为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