EAimTY的博客
一个没什么技术的开源爱好者,一个苦逼的学生狗。

总结一下对服务器安全的初级设置。

设置iptables

这一步的作用连小白都知道,就不多说了。

先清空iptables规则并清零:

# iptables -F
# iptables -X
# iptables -Z

然后设置规则,首先打开本地的环路:

# iptables -A INPUT -i lo -j ACCEPT

允许ping:

# iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

使主机与外部网络可以通讯:

# iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

之后用一下命令开启ssh(默认为22)、http(默认为80)、https(默认为443)之类的端口:

# iptables -A INPUT -p tcp --dport 端口号 -j ACCEPT

需要开启UDP端口的话就执行:

# iptables -A INPUT -p udp --dport 端口号 -j ACCEPT

最后屏蔽其它请求:

# iptables -P INPUT DROP

保存并重启iptables:
# service iptables save
# service iptables restart

配置Nginx与PHP用户权限

首先,我们来看一下Nginx和php-fpm运行在什么用户下:

# ps aux|grep nginx
# ps aux |grep php-fpm

可以发现,通过yum安装的Nginx默认运行在用户nginx下,php-fpm运行在用户apache下,这样不利于安全,也不便于管理。
起初,我习惯新建一个用户并把PHP与Nginx放在其下运行,但最后发现其实这并不是最安全的做法,而且还很麻烦,没办法,懒人嘛~
研究并参考Google到的一些文章后,我发现让它们在nobody下运行是最安全的,因为假如我们使用nobody权限,即使黑客攻破了网站,也不能顺利攻破系统,所以我们把Nginx和php-fpm放在nobody用户下运行:

# vi /etc/nginx/nginx.conf

将第一行改为:user nobody;

# vi /etc/php-fpm.d/www.conf

搜索user = 找到后将文件中user与group的值改为nobody
这时重启一下Nginx与php-fpm,就会发现它们已经是运行在nobody用户下的了。

但是假如仅仅修改Nginx与php-fpm的运行用户,会出现网站程序(例如WordPress、Typecho)无法上传附件或更改文件的错误,这是因为网站程序的权限还是在其它用户手里。

修改网站文件的用户:

# chown -R nobody:nobody 网站目录

顺便把权限改得安全一些:

# find 网站目录 -type d|xargs chmod 0755

# find 网站目录 -type f|xargs chmod 0644

至此权限就配置完成了,但假如这时使用phpMyAdmin,就会报错:

Warning in ./libraries/session.inc.php#*** session_start():
open(/var/lib/php/session/*************, O_RDWR) failed: Permission denied (**)

解决方法是:

# chown nobody:nobody /var/lib/php/session

假如还是有问题就执行:

# chown -R nobody:nobody /var/lib/php/session

已有 2 条评论
    起司
    2016-04-09 21:16
      EAimTY
      2016-04-10 16:25

      还是有关系的,PHP可以远程执行命令,假如使用默认的apache用户,攻击者就有权限对服务器系统做一些手脚,但nobody用户几乎没有实权,所以较为安全。

添加新评论