2026年4月

PHP的一些高危函数可以被人利用用来上传文件,并且控制系统,导致安全问题。 基于安全考虑,我们应该对其进行屏蔽。但是如果屏蔽过多,又可能导致程序操作问题,那么哪些可以屏蔽,哪些不能屏蔽呢,我们不妨参考一下阿里云是怎样设置的。

1.打开php.ini文件,找到 > disable_functions = 这一行,如果前面有;号,将;号去掉。

2.在 disable_functions = 后面加上: >

chmod,exec,system,passthru,shell_exec,escapeshellarg,escapeshellcmd,proc_close,proc_open,ini_alter,dl,popen,pcntl_exec,socket_accept,socket_bind,socket_clear_error,socket_close,socket_connect,socket_create_listen,socket_create_pair,socket_create,socket_get_option,socket_getpeername,socket_getsockname,socket_last_error,socket_listen,socket_read,socket_recv,socket_recvfrom,socket_select,socket_send,socket_sendto,socket_set_block,socket_set_nonblock,socket_set_option,socket_shutdown,socket_strerror,socket_write,stream_socket_client,stream_socket_server,pfsockopen,disk_total_space,disk_free_space,chown,diskfreespace,getrusage,get_current_user,getmyuid,getmypid,dl,leak,listen,chgrp,link,symlink,dlopen,proc_nice,proc_get_stats,proc_terminate,shell_exec,sh2_exec,posix_getpwuid,posix_getgrgid,posix_kill,ini_restore,mkfifo,dbmopen,dbase_open,filepro,filepro_rowcount,posix_mkfifo,putenv,sleep

3.保存并重启apache,即可。

 

还是再写一下iptables,虽然总在用它,但是每次新装开系统时,由于各家云服务端精简的系统不同,每次在配置服务器时都还要在这里浪费一些时间,简单整理一下方便以后使用。

环境是centos7.9 x64,步骤如下:

1.关闭firewalld 
在centos7以后版本中,有些环境默认启用了firewalld防火墙,这时iptables是不开启的,这时需要关掉firewalld。
systemctl stop firewalld
systemctl disable firewalld
systemctl mask firewalld

这一点很重要,否则会导致很多灵异问题,比如我就遇到了使用iptables-save保存配置重启不生效的问题。

2.安装iptables
执行一下iptables -L看看输出内容,如果执行找不到文件说明系统并没有安装iptables,那么要安装一下。
yum install iptables

如果执行iptables -L输出格式正确,即使没有规则也说明已经安装正常。

3.安装iptables服务脚本
在centos7以后的系统中,使用systemctl管理软件的开机运行,所以我们在上一步安装了iptables,但还需要安装下面脚本使得可以systemctl对其进行操作。
yum install iptables-services
systemctl enable iptables
systemctl start iptables

下面几条是可操作选项:
systemctl enable iptables //启用iptables
systemctl start iptables  //启动iptables
systemctl stop iptables   //停止iptables
systemctl restart iptables   //重启iptables
systemctl reload iptables    //热加载iptables配置

4.配置iptables
iptables防火墙的默认配置保存在/etc/sysconfig/iptables文件中,iptables具体的使用方法请参照其它文章,这里仅提供一个我常用的配置列表,复制下面所有命令在shell中一次性执行(去掉注释行):
# 清空所有现有规则(谨慎操作)
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -t raw -F
iptables -t raw -X
iptables -t security -F
iptables -t security -X

# 设置默认策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# 允许已建立连接和回环接口
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT

# 允许 ICMP (ping)
iptables -A INPUT -p icmp -j ACCEPT

# 允许 TCP 端口(合并重复端口)
iptables -A INPUT -p tcp -m multiport --dports 80,443,12345 -j ACCEPT
(上面行中含#和中文的是注释文件,可以删掉)


5.iptables配置文件的保存
这里分两种情况,如上面第4步的修改,是直接修改iptables的配置文件,修改后规则并不会直接加载到系统中生效,可以使用systemctl reload iptables加载一下,或者就直接重启一下系统即可。

如果是使用手工在shell一条一条添加的规则,这个时候是立即生效的,但是并没有保存到配置文件中,重启系统后就没了,需要使用iptables-save > /etc/sysconfig/iptables保存一下。如果当前目录已经在/etc/sysconfig中,直接执行iptables-save效果也是一样的。

扩展使用方法:
iptables防火墙配置的导出与导入
这里的iptables配置导出导入,也就是备份与恢复的意思。假设我已经有一台机器已经配置好了,怎样把这个配置复制到其它机器使用呢?
//导出配置
iptables-save > /etc/sysconfig/iptablesRule.bak    

//导入配置
把iptablesRule.bak复制到另一台机的/etc/sysconfig目录下执行
iptables-restore < /etc/sysconfig/iptablesRule.bak

好了,相同的配置已复制过去了,但还没有加载生效,重启系统或者systemctl reload iptables即可。