linux系统安全加固
账号加固
密码长度与有效期
默认配置:
cat /etc/login.defs |grep PASS_ |grep -v '#'
#------------------
PASS_MAX_DAYS 99999
# 密码有效期
PASS_MIN_DAYS 0
# 修改密码的最短期限
PASS_MIN_LEN 5
# 密码最短长度
PASS_WARN_AGE 7
# 密码过期提醒
#------------------
加固方案:
cp -a /etc/login.defs /etc/login.defs.default
vim /etc/login.defs
#---------------
PASS_MAX_DAYS 90
PASS_MIN_DAYS 6
PASS_MIN_LEN 8
PASS_WARN_AGE 30
#---------------
密码复杂度
默认配置
cat /etc/pam.d/system-auth | grep "pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type="
#-------------------
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
#--------------------
加固方案:
cp -a /etc/pam.d/system-auth /etc/pam.d/system-auth.default
vim /etc/pam.d/system-auth
#----------------------------
password requisite pam_cracklib.so try_first_pass minlen=8 difok=5 dcredit=-1 lcredit=-1 ocredit=-1 retry=3 remember=3
#----------------------------
参数 | 说明 |
---|---|
try_first_pass | 而当pam_unix验证模块与password验证类型一起使用时,该选项主要用来防止用户新设定的密码与以前的旧密码相同。 |
minlen=8 | 最小长度8位 |
difok=6 | 配置密码时,新密码中至少6个字符与旧密码不同(默认为5) |
dcredit=-1 | 最少1个数字 |
lcredit=-1 | 最少1个小写字符,(ucredit=-1:最少1个大写字符) |
ocredit=-1 | 最少1个特殊字符 |
retry=3 | 配置密码时,提示3次用户密码错误输入 |
pe=xxx | 此选项用来修改缺省的密码提示文本 |
remember=N | 保存每个用户使用过的N个密码,强制密码不能跟历史密码重复 |
会话超时
cp -a /etc/profile /etc/profile.default
vim /etc/profile
# 末行追加:
#-----------
port TMOUT=300
#-----------
# 五分钟无操作中断登录会话
禁用删除系统多余用户
Openssh安全配置
配置文件安全加固
vim /etc/ssh/sshd_config
#----------------
PermitRootLogin no
# 禁止root登录
MaxAuthTries 3
# 超过3次socket连接会断开
PubkeyAuthentication no
AuthorizedKeysFile /dev/null
# 禁止证书登录
PasswordAuthentication no
# 使用证书替代密码认证
ChallengeResponseAuthentication yes
# 禁止SSH客户端记住密码
GSSAPIAuthentication no
# GSSAPIAuthentication yes
# GSSAPICleanupCredentials yes
# GSSAPICleanupCredentials yes
# GSSAPIStrictAcceptorCheck yes
# GSSAPIKeyExchange no
# 关闭 GSSAP
AllowTcpForwarding no
# 禁止SSH端口映射
#----------------
IP地址限制
白名单策略:
vim /etc/hosts.allow
#----------------
sshd:192.168.10.1,192.168.10.2,192.168.10.3
#----------------
vim /etc/hosts.deny
#----------------
sshd:ALL
#----------------
系统服务安全管理
- 采用最少服务原则,凡是不需要的服务一律注释掉。
- 在
/etc/inetd.conf
中不需要的服务前加 “#
”,较高版本中已经没有 inetd 而换成了 Xinetd;取消开机自动运行服务,把/etc/rc.d/rc3.d
下不需要运行的服务第一个字母大写改称小写,或者由 setup 命令启动的 GUI 界面中的 service 更改。
- 可以使用
/etc/host.allow
,/etc/host.deny
这两个文件,将不需要的服务禁止。 - 通过防火墙策略禁止访问不需要的服务。
文件系统权限
.history 文件
vim /etc/profile
# 在文件末尾添加如下内容:
#----------------
HISTSIZE=1000
# 设置保存历史命令的文件大小
HISTFILESIZE=2000
# 保存历史命令条数
export HISTTIMEFORMAT="%Y-%m-%d-%H:%M:%S:$USER:"
# 设置历史命令格式
#----------------
SUID权限管理
找出系统所有含 “s” 位的程序,把不必要得 “s” 位去掉,或者把根本不用的直接删除:
find / -type f -perm -u+s -exec ls -l {} \;
chmod a-s filename
防止用户滥用及提升权限的可能性
把重要文件加上不可改变属性,具体视需要而定:
chattr +i /etc/passwd
chattr +i /etc/shadow
chattr +i /etc/gshadow
chattr +i /etc/group
chattr +i /etc/inetd.conf
chattr +i /etc/httpd.conf
防火墙配置
防火墙策略
默认INPUT,FORWARD,OUTPUT 三个都是ACCEPT
INPUT ACCEPT FORWARD ACCEPT OUTPUT ACCEPT
从安全的角度出发,INPUT,FORWARD,OUTPUT 三个都是DROP最安全,但配置的时候会给你带来非常多的不可预料的麻烦。
INPUT DROP FORWARD DROP OUTPUT DROP
折中的方案,也是大多数硬件防火墙厂商所采用的方案,他们都是采用INPUT默认禁用所有,OUTPUT默认允许所有,你只要关注INPUT规则即可。
INPUT DROP FORWARD ACCEPT OUTPUT ACCEPT
防止成为跳板机
封锁22等端口,避免相互跳转:
iptables -A OUTPUT -p tcp -m multiport --dports 22,21,873 -j REJECT/etc/init.d/iptables save
iptables -L -n
web 服务器禁止使用ssh,作为跳板机,用户将不能使用ssh命令登陆到其他电脑。