安全加固
Table of Contents
Apache安全加固
加固内容 | 作用 |
---|---|
修改默认banner信息 | 防止敏感信息泄漏 |
禁用目录列表 | 防止暴露文件目录 |
以单独的用户和组运行Apache | 使用非特权用户 |
限制对目录的访问 | |
关闭服务器端包含和CGI执行 |
修改Banner:
使用nc,nmap,F12网络等工具探查服务器80端口
编辑apache2.conf
vim /etc/apache2/apache2.conf
ServerSignature Off
ServerTokens Prod
禁用目录列表:
在浏览器中访问服务器某位置(无index文件,我为了测试在/var/www/html/下新建了testban文件夹和内部的两个文件)
修改/etc/apache2/apache2.conf
<Directory 指定的目录>
Options -Indexes
</Directory>
重启服务查看效果,已经无法查看了
以单独的用户和组运行Apache:
建立http用户和用户组
groupadd httpuser
useradd -d /var/www/ -g httpuser -s /bin/nologin httpuser
关闭服务器端包含和CGI执行:
总结
vim /etc/apache2/apache2.conf
添加 ServerTokens Prod
添加 ServerSignature off
修改
<Directory "/var/www/html">
Options -Indexes -FollowSymLinks //添加 - 号表示禁用此项功能
</Directory>
MySQL加固
加固内容 | 作用 |
---|---|
改变默认mysql管理员帐号名和密码 | 防止被爆破管理员 |
用户目录权限限制 | 防止被非mysql用户窃取数据 |
命令历史记录保护 | 防止数据库密码和数据库结构等信息泄露 |
删除默认数据库test和数据库用户 | |
限制本地文件数据访问 | |
禁止远程连接数据库 | |
更改默认端口3306 |
改变默认mysql管理员帐号和密码
update user set password=password('upassword') where user='root';#8.0以下版本
alter user 'root'@'localhost' identified by '128ve980';#8.0后版本
命令历史记录保护:
# rm .bash_history .mysql_history //删除历史记录
删除默认数据库test和数据库用户:
mysql> show databases;
mysql>
drop database test
PHP安全加固
vim /etc/php/7.4/apache2/php.ini
disable_functions 添加passthru,exec,system,popen,chroot,escapeshellcmd,escapeshellarg,shell_exec,proc_open,proc_get_status //禁用一些系统控制函数
memory_limit = 128M //限制消耗内存大小
由于wordpress需要上传图片,此处不进行上传限制,同时设置上传大小为3M
file_uploads = Off //禁止上传文件
重启web服务使设置生效
service apache2 restart
Linux安全加固
加固项 | 主要作用 |
---|---|
root登录限制 | |
SSH | 防止恶意远程登陆 |
禁用telnet | 不安全的传输环境 |
禁用代码编译 | |
root登录提醒 | |
history安全 | 防止命令记录被清除 |
禁用特殊账户 | |
特殊文件赋权 | 限制权限 |
关闭不用的端口和服务 | |
危险目录安全 | /tmp /var/tmp /dev/shm |
禁用PHP的危险函数 | |
php隐藏banner | |
php禁用危险函数 | |
php访问目录限制 | |
magic_quotes_gpc防注入 |
账户安全加固
锁定系统中多余的自建帐号
检查方法:
执行命令
cat /etc/passwd
cat /etc/shadow
查看账户、口令文件,与系统管理员确认不必要的账号。对于一些保留的系统伪帐户如:bin, sys,adm,uucp,lp, nuucp,hpdb, www, daemon等可根据需要锁定登陆。
加固方法:
使用命令passwd -l <用户名>锁定不必要的账号。
使用命令passwd -u <用户名>解锁需要恢复的账号。
设置系统口令策略
检查方法:
使用命令
cat /etc/login.defs|grep PASS查看密码策略设置
备份方法:
cp -p /etc/login.defs /etc/login.defs_bak
加固方法:
vi /etc/login.defs修改配置文件
PASS_MAX_DAYS 90 新建用户的密码最长使用天数
PASS_MIN_DAYS 0 新建用户的密码最短使用天数
PASS_WARN_AGE 7 新建用户的密码到期提前提醒天数
PASS_MIN_LEN 9 最小密码长度9
禁用root之外的超级用户
检查方法:
cat /etc/passwd 查看口令文件,口令文件格式如下:
login_name:password:user_ID:group_ID:comment:home_dir:command
login_name:用户名
password:加密后的用户密码
user_ID:用户ID,(1 ~ 6000) 若用户ID=0,则该用户拥有超级用户的权限。查看此处是否有多个ID=0。
group_ID:用户组ID
comment:用户全名或其它注释信息
home_dir:用户根目录
command:用户登录后的执行命令
备份方法:
cp -p /etc/passwd /etc/passwd_bak
加固方法:
使用命令passwd -l <用户名>锁定不必要的超级账户。
使用命令passwd -u <用户名>解锁需要恢复的超级账户
限制能够su为root的用户
检查方法:
cat /etc/pam.d/su,查看是否有auth required /lib/security/pam_wheel.so这样的配置条目
备份方法:#cp -p /etc/pam.d /etc/pam.d_bak
加固方法:
vi /etc/pam.d/su
在头部添加:
auth required /lib/security/pam_wheel.so group=wheel
这样,只有wheel组的用户可以su到root
usermod -G10 test 将test用户加入到wheel组
当系统验证出现问题时,首先应当检查/var/log/messages或者/var/log/secure中的输出信息,根据这些信息判断用户账号的有效性。如果是因为PAM验证故障,而引起root也无法登录,只能使用single user或者rescue模式进行排错
多次登录失败锁定
当用户试图登陆多次失败后,锁定此用户(su or login 5次失败锁定)
在文件/etc/pam.d/system-auth中配置:
auth requisite pam_tally.so per_user onerr=fail deny=4 unlock_time=3600
注:超过4次错误就会lock user,为了防止拒绝服务攻击,加入per_user参数