0x01 前 言
Linux系统被应用于大部分企业的服务器上,因此在等保测评中主机加固也是必须要完成的一项环节。
由于在之后项目开始要进行主机加固,因此对linux的加固流程进行总结学习。
Linux的主机加固主要分为:账号安全、认证授权、协议安全、审计安全。简而言之,就是4A(统一安全管理平台解决方案)。
这边就使用我自己kali的虚拟机进行试验学习。
0x02 基础加固
口令生存期
gedit /etc/login.defs
PASS_MAX_DAYS 90 PASS_MIN_DAYS 10 PASS_WARN_AGE 7 如果修改设置有最小长度也需要修改 PASS_MIN_LEN 8
|
口令复杂度(很重要)
vim /etc/pam.d/system-auth
password requisite pam_cracklib.so try_first_pass retry=3 dcredit=-1 lcredit=-1 ucredit=-1 ocredit=-1 minlen=8
|
备注:至少包含一个数字、一个小写字母、一个大写字母、一个特殊字符、且密码长度>=8
版本信息
限制xx用户登录
vim /etc/hosts.deny
sshd : 192.168.1.1
|
检查是否有其他uid=0的用户
awk -F “:” '($3==0) {print $1} ' /etc/passwd
|
登陆超时限制
cp -p /etc/profile /etc/profile_bak gedit /etc/profile
TMOUT=300 export TMOUT
echo 'export TMOUT=300'>>/etc/profile echo 'readonly TMOUT' >>/etc/profile source /etc/profile
|
检查是否使用PAM认证模块禁止wheel组之外的用户su为root
gedit /etc/pam.d/su
auth sufficient pam_rootok.so auth required pam_wheel.so use_uid
|
备注:auth与sufficient之间由两个tab建隔开,sufficient与动态库路径之间使用一个tab建隔开
禁用无用账户
cat /etc/passwd
passwd -l user
|
账户锁定
gedit /etc/pam.d/system-auth
auth required pam_tally.so onerr=fail deny=3 unlock_time=7200
passwd -l bin passwd -l sys passwd -l adm
|
检查系统弱口令
john /etc/shadow --single john /etc/shadow --wordlist=pass.dic
|
我这边有报错 就不展示了
使用passwd 用户 命令为用户设置复杂的密码
0x03 软件协议安全
openssh升级(按需做)
定时任务(防止病毒感染)
限制ssh登录(看是否需要)
vim /etc/ssh/sshd_config
PermitRootLogin no Protocol 2 MaxAuthTries 3
echo "tty1" > /etc/securetty hmod 700 /root
|
限制su为root用户
gedit /etc/pam.d/su
auth required /lib/security/pam_wheel.so group=wheel
|
禁止root用户登录ftp
cat /etc/pam.d/vsftpd Auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
echo “root” >> /etc/vsftpd/ftpusers
|
防止flood攻击
gedit /etc/sysctl.conf
net.ipv4.tcp_syncookies = 1 sysctl -p
|
禁ping
echo 0 > /proc/sys/net/ipv4/icmp_echo_igore_all
|
检查异常进程
ps aux|sort -rn -k +3|head
ps aux|sort -rn -k +4|head
|
关闭无效的服务及端口
service postfix status chkconfig --del postfix chkconfig postfix off
service cups status chkconfig --del cups chkconfig cups off
|
设置防火墙策略
service iptables status echo '请根据用户实际业务端口占用等情况进行设置!'
|
例如:
gedit /etc/sysconfig/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT -A INPUT -m state --state NEW -m udp -p udp --dport 8080 -j ACCEPT
|
以下举例:
iptables -I INPUT -s 22.48.11.11 -j DROP
iptables -I INPUT -s 22.48.11.0/24 -j DROP
iptables -I INPUT -s 192.168.1.1 -p tcp --dport 80 -j DROP
iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport 80 -j DROP
service iptabels restart
|
设置历史记录数量
cp /etc/profile /etc/profile_xu_bak sed -i s/'HISTSIZE=1000'/'HISTSIZE=5000'/g /etc/profile cat /etc/profile |grep HISTSIZE|grep -v export
|
配置用户最小权限
chmod 644 /etc/passwd chmod 400 /etc/shadow chmod 644 /etc/group
|
文件与目录缺省权限控制
cp /etc/profile /etc/profile.bak gedit /etc/profile
umask 027 source /etc/profile
|
0x04 日志审计
启用远程日志功能
gedit /etc/rsyslog.conf *.* @Syslog日志服务器IP
|
注意:* 和@之间存在的是tab键,非空格。
检查是否记录安全事件日志
gedit /etc/syslog.conf 或者 /etc/rsyslog.conf
*.err;kern.debug;daemon.notice /var/log/messages chmod 640 /var/log/messages service rsyslog restart
|
日志保留半年以上
cp/etc/logrotate.conf /etc/logrotate.conf_xu_bak sed -i s/'rotate 4'/'rotate 12'/g /etc/logrotate.conf service syslog restart cat /etc/logrotate.conf |grep -v '#' |grep rotate
|