为Web服务器增加NFS客户端挂接点安全性noexec,nosuid,nodev选项

时间:2020-01-09 10:43:21  来源:igfitidea点击:

我在基于CentOS/RHEL的系统上使用4.x版本的NFS服务器。
我使用以下语法在五个基于Apache的节点上挂载了共享的/var/www /目录:

mount -t nfs4 -o rw,intr,hard,proto = tcp rocknas02:/httproot/www/var/www /

我注意到,由于我的应用程序中的错误,用户有时可以上传可执行文件或者其他设备文件以脱离chroot的Apache服务器。如何防止基于CentOS或者RHEL的NFS客户端和服务器设置上的此类安全问题? 首先,您需要修复您的应用程序。接下来,您可以传递以下三个选项来安装命令,以提高基于Apache/Nginx/Lighttpd nfs的客户端的整体安全性:

  • noexec防止在已挂载的文件系统上执行二进制文件。这样可以防止远程用户在系统上执行不需要的二进制文件。
  • nosuid禁用set-user-identifier或者set-group-identifier位。这样可以防止远程用户通过运行setuid程序获得更高的特权。
  • nodev防止定义字符和阻止特殊设备,或者防止将它们用作字符和阻止特殊设备。这样可以防止远程用户脱离chroot的服务器 Jail。

修改安装命令,如下所示:

# mount -t nfs4 -o rw,intr,hard,proto=tcp,nodev,noexec,nosuid rocknas02:/httproot/www /var/www/

或者尝试重新挂载已安装的nfsv4.0文件系统:

# mount -t nfs4 -o remount,rw,intr,hard,proto=tcp,nodev,noexec,nosuid rocknas02:/httproot/www /var/www/

测试一下

要验证新设置,请执行:

# mount
# mount | grep rocknas02

输出示例:

rocknas02:/httproot/www on /var/www type nfs4 (rw,noexec,nosuid,nodev,sync,intr,hard,proto=tcp,addr=192.168.1.10,clientaddr=192.168.1.100)

将/bin/ls复制到rocknas02:/httproot/www,即在名为rocknas02的nfsv4.0服务器上执行以下内容

# cp /bin/ls /httproot/www

在客户端上,执行:

cd /var/www
 
## run /bin/ls
ls -l
 
# Run uploaded ls
./ls

输出示例:
在nfs客户端上运行ls命令

留给读者更新"/etc/fstab"作为练习。

挂载文件系统为只读

如果可能,以只读模式挂载文件系统。
修改安装命令,如下所示:

# mount -t nfs4 -o ro,intr,hard,proto=tcp,nodev,noexec,nosuid rocknas02:/httproot/www /var/www/

或者尝试重新挂载已安装的nfsv4.0文件系统:

# mount -t nfs4 -o remount,ro,intr,hard,proto=tcp,nodev,noexec,nosuid rocknas02:/httproot/www /var/www/

推荐Apache的文件/目录权限

我建议使用以下模式:

以apache用户和组身份运行Apache

您必须首先以root用户身份运行httpd,它将切换到apache用户和组:

# egrep -i '^(User|Group)' /etc/httpd/conf/httpd.conf

输出示例:

User apache
Group apache

/var/www /的NFS服务器文件/目录权限

使用useradd命令创建一个名为www-files的用户:

# useradd -d /var/www -M -s /sbin/nologin www-files

确保使用passwd命令锁定www-files帐户:

# passwd -l www-files

使用以下passwd命令将文件所有者和组更改为/var/www目录的www-文件:

# chown -R www-files:www-files /var/www/

最后根据模式更改每个给定文件和目录的文件模式位:

## By default all files & dirs permissions are set to read-only ###
chmod -R 0444 /var/www
 
## Allow, apache/nginx/lighttpd to serve files from directory by settings others to x bit ###
find /var/www -type d -print0 | xargs -0 -I {} chmod 0445 "{}"
 
## Optional certain directory Jan need additional permissions such as /var/www/uploads ###
#chmod  0777 -R /var/www/uploads

使用ls -l命令来验证文件权限:

# cd /var/www
# ls -l

输出示例:

total 32
-r--r--r--. 1 www-files www-files  606 Dec 21  2011 best_resources.php
-r--r--r--. 1 www-files www-files 1068 Sep  4  2011 cdn_info_linux_unix_setup.php
dr--r--r-x. 2 www-files www-files 4096 Aug  5  2012 data
....
...
...
-r--r--r--. 1 www-files www-files 1550 Jun 22  2012 service-per-vm-guide.php