CentOS LNMP权限设置要点
/etc/ssh/sshd_config文件,设置PermitRootLogin no,禁止root用户通过SSH远程登录,降低服务器被暴力破解的风险。www-data、MySQL运行用户mysql),遵循“最小权限原则”分配权限,避免权限滥用。chage命令设置密码过期时间(如chage -M 90 username,强制用户每90天更换密码)。usermod -L username锁定长期不用的默认账户(如games、ftp),防止非法用户利用这些账户入侵系统。/var/www/html)权限设置为750(所有者:www-data,可读可写可执行;所属组:www-data,可读可执行;其他用户:无权限),避免其他用户修改网站文件;上传目录(如/var/www/html/uploads)权限设置为750,禁止执行权限(chmod -x uploads),防止上传的恶意脚本被执行。/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow等敏感文件的权限应设置为644(passwd)、600(shadow/gshadow)、644(group),防止非授权用户读取或修改;使用chattr +i命令给这些文件加上不可更改属性(如chattr +i /etc/passwd),进一步防止文件被篡改。*.php)权限设置为640(所有者:www-data,可读可写;所属组:www-data,可读;其他用户:无权限),避免其他用户读取或修改PHP代码;禁止将PHP文件设置为777权限(完全开放),降低代码泄露和篡改风险。root用户启动(用于绑定80/443端口),工作进程以www-data用户运行(修改/etc/nginx/nginx.conf中的user www-data;),限制Nginx对系统资源的访问范围;关闭Nginx的目录列表功能(在nginx.conf中设置autoindex off;),防止用户浏览未授权目录。mysql用户运行(修改/etc/my.cnf中的[mysqld]部分的user=mysql;),限制MySQL对系统文件的访问;创建专用数据库用户(如CREATE USER 'webuser'@'localhost' IDENTIFIED BY 'StrongPassword';),仅授予必要的权限(如GRANT SELECT, INSERT, UPDATE ON webdb.* TO 'webuser'@'localhost';),避免使用root用户连接数据库。www-data用户运行(修改/etc/php-fpm.d/www.conf中的user = www-data和group = www-data;),限制PHP对系统文件的访问;设置open_basedir(如open_basedir = /var/www/html/:/tmp/;),限制PHP只能访问指定目录,防止跨站脚本攻击(XSS)。setenforce 1命令开启SELinux(/etc/selinux/config中SELINUX=enforcing),限制进程对系统资源的访问;根据LNMP需求调整SELinux策略(如允许Nginx访问上传目录:chcon -R -t httpd_sys_rw_content_t /var/www/html/uploads)。firewalld或iptables限制对Nginx(80/443端口)、MySQL(3306端口)的访问,仅允许必要的IP地址访问(如firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="3306" accept',允许指定IP访问MySQL);关闭不必要的端口(如FTP、Telnet),减少攻击面。