CentOS文件管理安全设置指南
权限是文件管理的核心安全屏障,需遵循“最小权限原则”(仅授予完成任务所需的最少权限),通过以下命令实现:
ls -l命令查看文件/目录的权限、所有者及所属组(如-rw-r--r-- 1 root root 1024 Jan 1 10:00 file.txt表示所有者有读写权限,组和其他用户仅有读权限)。chmod 755 /path/to/dir(所有者:读写执行;组和其他用户:读执行)。chmod u+x script.sh(给所有者添加执行权限)、chmod o-r sensitive.txt(撤销其他用户读权限)。chown修改所有者(如chown root:admin /etc/nginx.conf将文件所有者设为root,所属组设为admin)、chgrp修改所属组(如chgrp dev /var/www/project将目录所属组改为dev)。-R参数(如chmod -R 750 /opt/app),但需谨慎使用(避免误改系统关键目录)。特殊权限位可针对特定场景增强安全性:
/usr/bin/passwd允许普通用户修改密码),设置命令chmod u+s file(或数字格式4755),仅适用于可执行文件。/var/www/html目录设为SGID,开发组成员创建的文件自动属于www组),设置命令chmod g+s dir(或数字格式2770)。/tmp目录),设置命令chmod +t dir(或数字格式1777)。传统权限无法满足多用户/组的复杂需求,需使用ACL突破限制:
yum install acl -y安装。setfacl命令为特定用户/组添加权限(如setfacl -m u:devuser1:rwx /data/project允许devuser1对project目录有读写执行权限,setfacl -m g:devgroup2:r-x /data/project允许devgroup2有读执行权限)。getfacl /path/to/file查看ACL条目(带+号表示有额外权限),用setfacl -x u:username /path/to/file删除指定用户的ACL。核心系统文件需严格限制访问,防止未授权修改:
chattr命令设置不可修改属性(如chattr +i /etc/passwd防止passwd文件被修改,chattr +a /var/log/messages允许日志文件仅追加内容),删除属性用chattr -i /etc/passwd。chmod 750 /etc/shadow仅root和shadow组成员可访问密码文件,chmod 644 /etc/hosts允许所有用户读但仅root写)。SELinux通过安全上下文(Security Context)实现强制访问控制(MAC):
ls -Z查看文件/目录的SELinux上下文(如unconfined_u:object_r:etc_t:s0)。chcon命令更改上下文(如chcon -t public_content_rw_t /var/ftp/upload允许FTP用户上传文件到upload目录)。setsebool调整SELinux策略(如setsebool -P allow_ftpd_anon_write on允许FTP匿名用户写入,setsebool -P httpd_can_network_connect on允许Apache访问网络)。合理的用户/组划分是权限管理的基础:
groupadd dev创建开发组),将用户加入对应组(如usermod -aG dev devuser1将devuser1加入dev组),实现组内资源共享。umask 022表示新建文件权限为644(rw-r–r–),目录权限为755(rwxr-xr-x);umask 027表示新建文件权限为640(rw-r-----),目录权限为750(rwxr-x—))。visudo编辑/etc/sudoers文件,限制用户使用sudo的权限(如devuser1 ALL=(root) NOPASSWD: /usr/bin/systemctl restart httpd允许devuser1无需密码重启httpd服务,避免直接使用root账户)。权限配置需动态调整,定期检查避免过度授权:
find / -type d -perm -o=w -user root 2>/dev/null查找root用户拥有写权限的目录,用find / -type f -perm -o=rwx -user root 2>/dev/null查找root用户拥有读写执行权限的文件。getfacl -R /path/to/sensitive/data > acl_audit.log导出敏感目录的ACL权限,定期检查是否有未授权的用户/组权限。rsyslog或journalctl收集系统日志,监控文件访问、权限变更等异常行为(如journalctl -u sshd --since "2025-10-01" | grep "invalid user"查看SSH非法登录尝试)。