centos7 安全加固
目录
centos7 系统安全加固方案
一.密码长度与有效期
二.密码复杂度… 3
三.新口令不能与4个最近使用的相同… 4
四.设置会话超时(5分钟)… 5
五.设置history命令时间戳… 6
六.设置登陆失败锁定… 7
七.禁止root通过ssh远程登录… 8
八.SSH 配置参数增强… 9
九.设置SSH登录警告语… 10
十.设置umask值… 11
十一.禁止Control-Alt-Delete 键盘重启系统命令… 13
十二. 隐藏系统版本信息… 14
十三.设置grup密码… 14
十四.最大文件打开数(文件句柄数)… 17
十五.用户最大进程数… 17
十六.系统参数调优… 18
Linux安全加固手册… 22
1 身份鉴别… 22
1.1 安全的远程管理方式… 22
2 访问控制… 23
3 安全审计… 24
3.1 审核策略开启… 24
3.2 日志属性设置… 25
4 入侵防御… 26
5 系统资源控制… 26
5.1 访问控制… 26
5.2 超时锁定… 27
6 最佳经验实践… 28
6.1 DOS攻击防御… 28
6.2 历史命令… 29
一.密码长度与有效期
默认配置:
[root@i-1y3we23j ~]# cat /etc/login.defs |grep PASS_ |grep -v '#'
-
PASS_MAX_DAYS 99999
-
PASS_MIN_DAYS 0
-
PASS_MIN_LEN 5
-
PASS_WARN_AGE 7
加固方案:
1.备份配置文件:
# cp -a /etc/login.defs /etc/login.defs.default
2.编辑配置文件并将相关参数改成如下
# vi /etc/login.defs
- PASS_MAX_DAYS 90
- PASS_MIN_DAYS 6
- PASS_MIN_LEN 8
- PASS_WARN_AGE 30
备注:
/etc/login.defs文件的pass_min_len 参数并不具备强制性,测试仍然可以设置7位密码。最终需要cracklib来实现。
参数说明:
-
PASS_MAX_DAYS 密码有效期
-
PASS_MIN_DAYS 修改密码的最短期限
-
PASS_MIN_LEN 密码最短长度
-
PASS_WARN_AGE 密码过期提醒
二.密码复杂度
默认配置:
[root@i-1y3we23j ~]# 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=
加固方案:
1.备份配置文件:
cp -a /etc/pam.d/system-auth /etc/pam.d/system-auth.default
2.编辑配置文件
# vim /etc/pam.d/system-auth
将
- password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
注释并在其下面新增1行
- password requisite pam_cracklib.so try_first_pass minlen=8 difok=5 dcredit=-1 lcredit=-1 ocredit=-1 retry=1 type=
3.保存配置文件
备注:
try_first_pass而当pam_unix验证模块与password验证类型一起使用时,该选项主要用来防止用户新设定的密码与以前的旧密码相同。
-
nlen=8:最小长度8位
-
fok=5:新、旧密码最少5个字符不同
-
redit=-1:最少1个数字
-
redit=-1:最少1个小写字符,(ucredit=-1:最少1个大写字符)
-
redit=-1:最少1个特殊字符
-
try=1:1次错误后返回错误信息
-
pe=xxx:此选项用来修改缺省的密码提示文本
三.新口令不能与4个最近使用的相同
默认配置:
[root@i-1y3we23j ~]# cat /etc/pam.d/system-auth |grep use_authtok
ssword sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
加固方案:
1.备份配置文件
2.编辑配置文件:
vi /etc/pam.d/system-auth
在password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok 所在行的后面添加
member=5
3.保存配置文件
备注:
记住5个历史密码
四.设置会话超时(5分钟)
默认配置:
无
加固方案:
1.备份配置文件:
cp -a /etc/profile /etc/profile.default
2.编辑配置文件:
vi /etc/profile
在文件的末尾添加参数
port TMOUT=300
3.保存配置文件
备注:
- 五分钟无操作中断登录会话
五.设置history命令时间戳
默认配置:
无
加固方案:
1.备份配置文件:
略
2.编辑配置文件:
vi /etc/profile
在文件的末尾添加参数
export HISTTIMEFORMAT="%F %T
whoami
"
3.保存配置文件
六.设置登陆失败锁定
(只能限定终端登录,图形界面依然可以登录)
默认配置:
无
加固方案:
1.备份配置文件
1)方法一:
- /etc/pam.d/login中设定控制台;
- /etc/pam.d/sshd中设定SSH
- /etc/pam.d/sshd中第二行添加下列信息
###########参数解释############
查看用户登录失败次数
# pam_tally2 --user root
解锁用户
# pam_tally2 -r -u root
even_deny_root 也限制root用户(默认配置就锁定root帐号);
deny 设置普通用户和root用户连续错误登陆的最大次数,超过最大次数,则锁定该用户
unlock_time 设定普通用户锁定后,多少时间后解锁,单位是秒;
root_unlock_time 设定root用户锁定后,多少时间后解锁,单位是秒;
2)、方法二编辑配置文件:
\# vi /etc/pam.d/system-auth
在# User changes will be destroyed the next time authconfig is run.行的下面,添加
auth required pam_tally2.so deny=5 unlock_time=1800 even_deny_root root_unlock_time=1800
3.保存配置文件
备注:
通过终端登录,5次登录失败后锁定账号30分钟,锁定期间此账号无法再次登录。
七.禁止root通过ssh远程登录
默认配置:
\# cat /etc/ssh/sshd_config |grep PermitRootLogin
#PermitRootLogin yes
加固方案:
1.备份配置文件
\# cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.default
2.编辑配置文件
vi /etc/ssh/sshd_config
将配置参数#PermitRootLogin yes改成PermitRootLogin no
3.保存配置文件
4.重启ssh服务
# /etc/init.d/sshd restart
八.SSH 配置参数增强
1.备份配置文件
2.编辑配置文件
\#vi /etc/ssh/sshd_config
(1)禁止空密码登录
将#PermitEmptyPasswords no参数的注释符号去掉,改成
PermitEmptyPasswords no
(2)关闭ssh的tcp转发
将#AllowTcpForwarding yes参数改成
AllowTcpForwarding no
(3)关闭S/KEY(质疑-应答)认证方式
将#ChallengeResponseAuthentication yes参数,改成
ChallengeResponseAuthentication no
(4)关闭基于GSSAPI 的用户认证
将GSSAPIAuthentication yes参数,改成
GSSAPIAuthentication no
3.保存配置文件
4.重启ssh服务
九.设置SSH登录警告语
默认配置:
无
加固方案:
1.备份配置文件
# 略
2.编辑配置文件
\#vi /etc/ssh/sshd_config
找到#Banner none参数,在其下一行,增加
Banner /etc/ssh/alert
3.保存配置文件
4新增告警信息文件.
\#vi /etc/ssh/alert
文件内容,设置成
*******************************************************
这里的内容自己定义,可以提示一下登录的用户引起运维人员重视
Warning!!!Any Access Without Permission Is Forbidden!!!
*******************************************************
5.保存后重启ssh服
十.设置umask值
默认配置:
# umask
0022
加固方案:
1.备份配置文件
\# cp -a /etc/bashrc /etc/bashrc.default
2.编辑配置文件
\# vi /etc/bashrc
在文件末尾增加参数
umask 027
3.保存配置文件
4. 备份配置文件
\# cp -a /etc/profile /etc/pr ofile.default
5.编辑配置文件
\# vi /etc/profile
在文件末尾增加参数
umask 027
6.保存配置文件
备注:
将umask值设置成0027,用于拿掉新增目录与文件的非所有者和所有者所属组的访问权限
默认:
新增目录权限755,即rxwr-xr-x
新增文件权限644,即
rw-r–r—
加固后:
新增目录权限750,即rxwr-x—
新增文件权限640,即
rw-r-----
十一.禁止Control-Alt-Delete 键盘重启系统命令
默认配置:
ls /usr/lib/systemd/system/ctrl-alt-del.target
加固方案:
1.备份配置文件
cp -a /usr/lib/systemd/system/ctrl-alt-del.target /usr/lib/systemd/system/ctrl-alt-del.target.default
2.移除该原源文件
rm -rf /usr/lib/systemd/system/ctrl-alt-del.target
十二. 隐藏系统版本信息
默认配置:
加固方案:
执行以下命令:
\#mv /etc/issue /etc/issue.bak
\#mv /etc/issue.net /etc/issue.net.bak
备注:登录界面显示系统版本信息
十三.设置grup密码
默认配置:
无
加固方案:
1.备份配置文件
cp -a /etc/grub.d/00_header /etc/grub.d/00_header.default
2.使用grub2-mkpasswd-pbkdf2 加密
使用grub2-mkpasswd-pbkdf2 加密密码(密码自己定义,但是一定得保存好否则最后连自己都登录不进去)
操作进行GRUB加密码的2种方式
密文密码
[root@localhost ~]# grub2-mkpasswd-pbkdf2
Enter password:
Reenter password:
PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.B157F42E96462AB239C03000F113D32EB18FD48073F1FC7D8F87A8F3B3F89F662424ECCAB901F3A812A997E547FD520F3E99D0E080F4FE8B05E019757E34F75B.29C83F87B4B6C086FC9A81E046CC3623CC5CF2F82128EDC3A0364894E429D4993B28563F82D71BF346188108CBD4341FC4A71B90E543581646B4E7EAE920C54A
3.添加以下配置到该文件的最后面
(特别需要注意 用户名root和密文之间是空格分隔,而不是换行)
cat <<EOF
set superusers='root'
password_pbkdf2 root grub.pbkdf2.sha512.10000.B157F42E96462AB239C03000F113D32EB18FD48073F1FC7D8F87A8F3B3F89F662424ECCAB901F3A812A997E547FD520F3E99D0E080F4FE8B05E019757E34F75B.29C83F87B4B6C086FC9A81E046CC3623CC5CF2F82128EDC3A0364894E429D4993B28563F82D71BF346188108CBD4341FC4A71B90E543581646B4E7EAE920C54A
E0F
4.执行命令grub2-mkconfig -o /boot/grub2/grub.cfg
重新编译生成grub.cfg文件
明文密码
①修改/etc/grub.d/00_header,在文件末尾添加以下命令
保存并退出
②重新编译生成grub.cfg
重启检验
成功:
十四.最大文件打开数(文件句柄数)
默认配置:
[root@i-1y3we23j ~]# ulimit -n
1024
加固方案:
1.备份配置文件
cp -a /etc/security/limits.conf /etc/security/limits.conf.default
2.添加以下两行配置到limits.conf文件最后
soft nofile 65535
hard nofile 65535
备注:修改所有用户的最大文件打开数为65535
十五.用户最大进程数
默认配置:
[root@i-1y3we23j ~]# cat /etc/security/limits.d/20-nproc.conf
Default limit for number of user's processes to prevent
accidental fork bombs.
See rhbz #432903 for reasoning.
soft nproc 4096
root soft nproc unlimited
加固方案:
1.备份配置文件
cp -a /etc/security/limits.d/20-nproc.conf /etc/security/limits.d/20-nproc.conf.default
2.修改配置文件
vim /etc/security/limits.d/20-nproc.conf
soft nproc 65535
hard nproc 65535
备注:修改所有用户的最大进程数为65535
十六.系统参数调优
默认配置:
无
加固方案:
1.备份配置文件
cp -a /etc/sysctl.conf /etc/sysctl.conf.default
2.添加以下调优参数到该文件中
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.route.gc_timeout = 20
net.ipv4.tcp_retries2 = 5
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_wmem = 8192 131072 16777216
net.ipv4.tcp_rmem = 32768 131072 16777216
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.core.somaxconn = 262144
net.core.netdev_max_backlog = 262144
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.route.gc_timeout = 20
net.ipv4.ip_local_port_range = 10024 65535
net.ipv4.tcp_retries2 = 5
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_wmem = 8192 131072 16777216
net.ipv4.tcp_rmem = 32768 131072 16777216
net.ipv4.tcp_mem = 94500000 915000000 927000000
fs.file-max = 65535
kernel.pid_max = 65536
net.ipv4.tcp_wmem = 4096 87380 8388608
net.core.wmem_max = 8388608
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_max_syn_backlog = 10240
net.core.netdev_max_backlog = 262144
net.core.somaxconn = 262144
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 120
net.ipv4.ip_local_port_range = 10000 65000
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_max_tw_buckets = 36000
Linux安全加固手册
1 身份鉴别
1.1 安全的远程管理方式
当对服务器进行远程管理时,应采取必要措施,防止鉴别信息在网络传输过程中被窃听。
防止远程管理过程中,密码等敏感信息被窃听
执行如下语句,查看telnet服务是否在运行
netstat -anptu | grep ":23"
禁止telnet运行,禁止开机启动:
chkconfig telnet off //禁止开机运行
netstat -anptu | grep ":23" //查看23号端口状态,telnet已关闭
2 访问控制
应及时删除多余的、过期的帐户,避免共享帐户的存在。
删除或禁用临时、过期及可疑的帐号,防止被非法利用。
主要是管理员创建的普通帐号,如:test
# usermod -L user 禁用帐号,帐号无法登录,/etc/shadow第二栏显示为!开头
# userdel user 删除user用户
# userdel -r user将删除user用户,并且将/home目录下的user目录一并删除
3 安全审计
3.1 审核策略开启
审计范围应覆盖到服务器和重要客户端上的每个操作系统用户和数据库用户;
开启审核策略,若日后系统出现故障、安全事故则可以查看系统日志文件,排除故障、追查入侵者的信息等。
查看rsyslog与auditd服务是否开启
rsyslog一般都会开启,auditd如没开启,执行如下命令:
1 | # systemctl start auditd |
---|---|
auditd服务开机启动
1 | # systemctl start auditd |
---|---|
3.2 日志属性设置
应保护审计记录,避免受到未预期的删除、修改或覆盖等。
防止重要日志信息被覆盖
让日志文件转储一个月,保留6个月的信息,先查看目前配置,
1 | # more /etc/logrotate.conf | grep -v "^#\|^$" |
---|---|
需要修改配置为下图所示:
4 入侵防御
操作系统遵循最小安装的原则,仅安装需要的组件和应用程序,并通过设置升级服务器等方式保持系统补丁及时得到更新。
关闭与系统业务无关或不必要的服务,减小系统被黑客被攻击、渗透的风险。
禁用蓝牙服务
1 | # systemctl stop bluetooth |
---|---|
禁止蓝牙开机启动
5 系统资源控制
5.1 访问控制
应通过设定终端接入方式、网络地址范围等条件限制终端登录。
对接入服务器的IP、方式等进行限制,可以阻止非法入侵。
- 在/etc/hosts.allow和/etc/hosts.deny文件中配置接入限制
最好的策略就是阻止所有的主机在“/etc/hosts.deny”文件中加入“ ALL:ALL@ALL, PARANOID ”,然后再在“/etc/hosts.allow” 文件中加入所有允许访问的主机列表。如下操作:
编辑 hosts.deny文件(vi /etc/hosts.deny),加入下面该行:
1 2 | # Deny access to everyone. ALL``: ``ALL``@``ALL``, PARANOID |
---|---|
编辑hosts.allow 文件(vi /etc/hosts.allow),加入允许访问的主机列表,比如:
ftp: 202.54.15.99 foo.com //202.54.15.99是允许访问 ftp 服务的 IP 地址
//foo.com 是允许访问 ftp 服务的主机名称。
- 也可以用iptables进行访问控制
5.2 超时锁定
应根据安全策略设置登录终端的操作超时锁定。
设置登录超时时间,释放系统资源,也提高服务器的安全性。
/etc/profile中添加如下一行
1 2 | exprot TMOUT``=``900 //``15``分钟 # source /etc/profile |
---|---|
改变这项设置后,必须先注销用户,再用该用户登录才能激活这个功能。
如果有需要,开启屏幕保护功能
设置屏幕保护:设置 -> 系统设置 -> 屏幕保护程序,进行操作
6 最佳经验实践
对Linux系统的安全性提升有一定帮助。
6.1 DOS攻击防御
防止拒绝服务攻击
TCP SYN保护机制等设置
1)打开 syncookie:
# echo“1”>/proc/sys/net/ipv4/tcp_syncookies //默认为1,一般不用设置
表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
2)防syn 攻击优化
用vi编辑/etc/sysctl.conf,添加如下行:
1 | net.ipv4.tcp_max_syn_backlog ``= 2048 |
---|---|
进入SYN包的最大请求队列.默认1024.对重负载服务器,增加该值显然有好处.可调整到2048.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SA3fIBEU-1597817934742)(file:///C:/Users/teng/AppData/Local/Temp/msohtmlclip1/01/clip_image022.png)]
6.2 历史命令
为历史的命令增加登录的IP地址、执行命令时间等
1)保存1万条命令
1 | # sed -i 's/^HISTSIZE=1000/HISTSIZE=10000/g' /etc/profile |
---|---|
2)在/etc/profile的文件尾部添加如下行数配置信息:
source /etc/profile让配置生效