1、服务器超时设置
-
问题描叙
TMOUT的值大于{key1}视为合规
查看命令:export
-
检测结果
超时时间:0 - 处理方式
- 备份/etc/profile文件
cp /etc/profile /etc/profile_bak
- 编辑profile文件
vim /etc/profile
修改/新增
TMOUT=3600
export TMOUT
或
export TMOUT=3600
保存退出
3. 执行source /etc/profile
命令使修改生效。
2、关闭所有不需要的共享目录
-
问题描叙
人工确认展示出的目录是否必须,应及时关闭所有不需要的共享目录
查看命令:showmount -e
- 检测结果
clnt_create: RPC: Program not registered
-
处理方式
启动rpcbind和nfs服务:
systemctl start rpcbind.service
systemctl start nfs-server.service
停服务:
systemctl stop rpcbind.socket
systemctl stop rpcbind.service
systemctl stop nfs-server.socket
systemctl stop nfs-server.service
查看NFS使用的端口:
rpcinfo -p
未处理,该服务不存在
查看RPC服务的状态
LANG="en_us-utf-8" service rpcbind status
关闭该服务:systemctl stop rpcbind.service
3、修改系统默认账号
未处理
4、修改密码长度限制
- 整改方式:
方法一(使用pam_cracklib.so模块):
1.备份需要编辑的文件/etc/pam.d/system-auth或/etc/pam.d/passwd
cp /etc/pam.d/system-auth /etc/pam.d/system-auth_bak
或cp /etc/pam.d/passwd /etc/pam.d/passwd_bak
2.修改配置文件system-auth或passwd,将minlen值修改为大于等于{key1}
3.保存退出。
方法二(使用pam_pwquality.so模块):
1.备份需要编辑的文件/etc/pam.d/system-auth或/etc/pam.d/passwd,和cat /etc/security/pwquality.conf
cp /etc/security/pwquality.conf /etc/security/pwquality.conf_bak
cp /etc/pam.d/system-auth /etc/pam.d/system-auth_bak
或cp /etc/pam.d/passwd /etc/pam.d/passwd_bak
2.修改配置system-auth或passwd文件,将minlen值修改为大于等于{key1}
password required pam_pwquality.so minlen={key1}
3.保存退出。
注:/etc/pam.d/system-auth和/etc/pam.d/passwd修改一个即可。均在passwd段中首行添加。
此处,我采用的方法一修改中修改的 passwd 文件
vim /etc/pam.d/passwd
password required pam_cracklib.so minlen=8
5、查看所有用户名
10.0.5.6 和.5 服务器
cat /etc/passwd |cut -f 1 -d :
修改用户名(usermod -l <新用户> <旧用户>)
注:此处修改用户名需要谨慎修改,有些用户名为系统用户,会提示有进程占用,切不可强制杀死进程,强制修改用户名。
6、AllowAgentForwarding 的值为no 视为合规
查看命令:
cat /etc/ssh/sshd_config
AllowAgentForwarding
: 是否允许ssh-agnet 转发:yes
整改方式:
1.备份sshd_config文件
cp /etc/ssh/sshd_config /etc/ssh/sshd_config_bak
2.编辑sshd_config文件
vi /etc/ssh/sshd_config
3.添加或修改如下行 (重启SSH服务后生效)
AllowAgentForwarding no
MaxAuthTries 6
注:我这里原先是被注释的。
同理,修改最大登陆次数限制:6
7、文件中应包含* hard core 0配置
问题背景:
查看命令:cat /etc/security/limits.conf
解决方式
1.备份文件/etc/security/limits.conf
cp /etc/security/limits.conf /etc/security/limits.conf_bak
2.编辑文件,添加或修改如下行
vim /etc/security/limits.conf
* hard core 0
* hard core 0
:禁止所有用户(除root)创建core文件
同理:文件中应包含* soft core 0配置,整改建议为:编辑文件,添加或修改如下行* soft core 0
8、查看别名文件/etc/aliases(或/etc/mail/aliases、/etc/postfix/aliases)配置
问题描叙
查看/etc/aliases或/etc/mail/aliases或/etc/postfix/aliases中内容,应不存在如下行
games: root
ingres: root
system: root
toor: root
uucp: root
manager: root
dumper: root
operator: root
decode: root
root: marc
查看命令:cat /etc/aliases /etc/mail/aliases
整改建议
1.备份需要修改的文件
cp /etc/aliases /etc/aliases_bak
2.编辑文件
vi /etc/aliases
或 /etc/mail/aliases
或 /etc/postfix/aliases
删除或者注释如下行,如:
#games: root
#ingres: root
#system: root
#toor: root
#uucp: root
#manager: root
#dumper: root
#operator: root
#decode: root
#root: marc
注:此处我是采用注释的方法整改。
3.执行命令使修改生效
/usr/bin/newaliases
9、查看日志存储的时间配置
问题背景
推荐配置最少为1年,即日志轮转周期设置为 weekly
(默认)则建议修改rotate
值大于等于{key4}
,同理若周期为daily
则建议修改rotate
值大于等于{key6},表示 365 天一年,若周期为 monthly
则建议设置rotate
值大于等于{key2}
查看命令:cat /etc/logrotate.conf
&& cat /etc/logrotate.d/*
整改建议:
1.备份需要修改的配置文件
2.编辑配置文件。此处配置文件可为/etc/logrotate.conf或/etc/logrotate.d下的文件,如:
vi /etc/logrotate.conf
添加或修改如下行,保证日志的存储时间最少为1年。如果日志轮转周期设置为weekly(默认)则建议修改rotate值为53,表示53周一年,同理若周期为daily则建议rotate设置为365,表示365天一年,若周期为monthly则建议设置为12,表示12个月一年
weekly
rotate ${key3}
补充说明:
在/etc/logrotate.conf最外层的配置为默认配置,在/etc/logrotate.d下的文件或/etc/logrotate.conf中指定路径的配置会覆盖默认配置
此处我的整改方式:
cp /etc/logrotate.conf /etc/logrotate.conf_bak
vim /etc/logrotate.conf
修改 rotate 53
10、文件权限777
问题背景
表示当前用户、它所在的组和其他人都拥有读、写、执行权限,该权限为最高权限。环境变量目录下不应该存在该权限文件(软连接除外)
查看命令:find echo $PATH | tr ':' ' '
-type f ( -perm -002 -o -perm -020 ) -ls
整改建议
人工查看列出的目录是否必须,若不为必须,则修改相关文件权限
执行命令 chmod 644 filename 修改目录权限,按照对应的要求设置,默认一般大多数情况为644,filename为要修改权限的文件名
注:此处我未做整改,查询没有发现有 777 的。有 777 权限的不适合修改。
11、umask值为027视为合规
查看命令:cat /etc/csh.login
问题背景
umask值:[未配置]
整改建议
- 备份csh.login文件
cp -p /etc/csh.login /etc/csh.login_bak - 编辑csh.login文件
注释掉原有umask值或循环函数
在文件末尾添加umask值为027
umask 027
umask 介绍
一、umask介绍
在linux系统中,我们创建一个新的文件或者目录的时候,这些新的文件或目录都会有默认的访问权限,umask命令与文件和目录的默认访问权限有关。若用户创建一个文件,则文件的默认访问权限为 -rw-rw-rw- ,创建目录的默认权限 drwxrwxrwx ,而umask值则表明了需要从默认权限中去掉哪些权限来成为最终的默认权限值。
二、umask值的含义
可以使用命令 umask 来查看umask值
hadoop@sench-pc:~$ umask
0002
可以看到umask值为0002,其中第一个0与特殊权限有关,可以暂时不用理会,后三位002则与普通权限(rwx)有关,其中002中第一个0与用户(user)权限有关,表示从用户权限减0,也就是权限不变,所以文件的创建者的权限是默认权限(rw),第二个0与组权限(group)有关,表示从组的权限减0,所以群组的权限也保持默认权限(rw),最后一位2则与系统中其他用户(others)的权限有关,由于w=2,所以需要从其他用户默认权限(rw)减去2,也就是去掉写(w)权限,则其他人的权限为rw - w = r,则创建文件的最终默认权限为 -rw-rw-r-- 。同理,目录的默认权限为 drwxrwxrwx
,则d rwx rwx rwx - 002 = (d rwx rwx rwx) - (- --- --- -w-) = d rwx rwx r-x
,所以用户创建目录的默认访问权限为drwxrwxr-x
。我们通过下面的例子验证一下:
hadoop@sench-pc:~$ umask
0002
hadoop@sench-pc:~$ touch test.txt
hadoop@sench-pc:~$ ls -l test.txt
-rw-rw-r-- 1 hadoop hadoop 0 4月 24 20:31 test.txt
hadoop@sench-pc:~$ mkdir test
hadoop@sench-pc:~$ ls -al test
总用量 8
drwxrwxr-x 2 hadoop hadoop 4096 4月 24 20:32 .
drwxr-xr-x 52 hadoop hadoop 4096 4月 24 20:32 ..
可以看到文件test.txt
的权限为-rw-rw-r--
,目录test
的权限为 drwxrwxr-x
( . 代表当前目录,也就是test目录的属性)。
umask
命令显示的为umask
的数字值,还可以使用命令umask -S
来显示umask的符号值:
hadoop@sench-pc:~$ umask -S
u=rwx,g=rwx,o=rx
可以看出(rwx rwx rwx) - (rwx rwx r-x) = (— — -w-) = 002 。
三、更改umask值
可以通过命令 umask 值 的方式来更改umask值,比如我要把umask值改为027,则使用命令 umask 027 即可。改成027后,用户权限不变,群组权限减掉2,也就是去掉写(w)权限,其他用户减7,也就是去掉读写执行权限(rwx),所以其他用户没有访问权限。
hadoop@sench-pc:~$ umask 027
hadoop@sench-pc:~$ umask
0027
hadoop@sench-pc:~$ touch test.txt
hadoop@sench-pc:~$ ls -l test.txt
-rw-r----- 1 hadoop hadoop 0 4月 24 20:49 test.txt
hadoop@sench-pc:~$ mkdir test
hadoop@sench-pc:~$ ls -al test
总用量 8
drwxr-x--- 2 hadoop hadoop 4096 4月 24 20:49 .
drwxr-xr-x 52 hadoop hadoop 4096 4月 24 20:49
可以看到文件的默认访问权限变为了-rw-r-----
,目录test的默认访问权限变为了 drwxr-x---
。这种方式并不能永久改变umask值,只是改变了当前会话的umask
值,打开一个新的terminal
输入umask
命令,可以看到umask值仍是默认的002
。要想永久改变umask值,则可以修改文件/etc/bashrc
,在文件中添加一行 umask 027
。
四、总结
当我们想改变创建文件和目录时的默认访问权限,则可以通过umask命令来实现。
整改方式
- 首先查看原来的权限
[root@localhost ~]# umask
0022
- 查看现有的文件符号值
[root@localhost ~]# umask -S
u=rwx,g=rx,o=rx
- 修改
umask
- 备份csh.login文件
cp -p /etc/csh.login /etc/csh.login_bak
- 编辑
csh.login
文件
vim /etc/csh.login
- 注释掉原有umask值或循环函数
在文件末尾添加umask值为027umask 027
注:此处我采用在文件末尾添加umask 027
- 修改完未生效,采用命令行
umask 027
修改
12、min后的值为前两位为disabled,最后两位存在大于等于${key23}的值视为合规
查看命令:cat /etc/pam.d/system-auth;cat /etc/pam.d/common-password;cat /etc/security/pwquality.conf;cat /etc/pam.d/passwd
问题背景
未配置
整改建议
1.备份需要编辑的文件/etc/pam.d/system-auth或/etc/pam.d/passwd
cp /etc/pam.d/system-auth /etc/pam.d/system-auth_bak
或
cp /etc/pam.d/passwd /etc/pam.d/passwd_bak
2.修改配置文件system-auth或passwd,将min后的前两位修改为 disabled,最后两位存在大于等于${key23}的值视为合规
password required pam_passwdqc.so min=disabled,disabled,12,8,8
3.保存退出
整改方式
1、备份/etc/pam.d/passwd
文件
cp /etc/pam.d/passwd /etc/pam.d/passwd_bak
这里我已经备份过了,所以不再重复操作。
2、修改/etc/pam.d/passwd 文件,增加如下配置信息
password required pam_passwdqc.so min=disabled,disabled,12,8,8
3、保存退出
12、使用命令查看RPC服务运行状态,如不是特殊需要,不运行此服务
问题背景:
查看命令:
LANG="en_us-utf-8" service portmap status>/tmp/rpc.txt;
Unit portmap.service could not be found.
LANG="en_us-utf-8" service rpcbind status >>/tmp/rpc.txt;
cat /tmp/rpc.txt;
rm -rf /tmp/rpc.txt
整改建议
根据实际情况停止此服务
停止服务命令:
service rpcbind stop 或 service postmap stop
补充说明:
启动服务命令:
service rpcbind start 或 service postmap start
整改方式
未整改,经人工核验,没有postmap服务,rpcbind为系统业务需要。
13、检查密码长度及复杂度
以下四个参数中至少存在三个且值小于等于-1视为合规
dcredit、credit、ucredit、ocredit
查看命令:
cat /etc/pam.d/system-auth;
cat /etc/pam.d/common-password;
cat /etc/security/pwquality.conf;
cat /etc/pam.d/passwd
整改方式
方法一(使用pam_cracklib.so模块):
1.备份需要编辑的文件/etc/pam.d/passwd
cp /etc/pam.d/passwd /etc/pam.d/passwd_bak
此处,我之前已经复制过了
2.修改配置文件 passwd,将dcredit,lcredit,ucredit,ocredit的值中至少三项修改为小于等于-1
vim /etc/pam.d/passwd
password required pam_cracklib.so dcredit=-1 lcredit=-1 ucredit=-1 ocredit=-1
3.保存退出。
14、系统umask设置
- /etc/profile
问题背景
查看profile文件的umask值是否为027,为027视为合规。
查看命令:cat /etc/profile
umask值:002
整改方式
1、执行备份:
cp -p /etc/profile /etc/profile_bak
2、修改umask设置:vi /etc/profile
注释掉原有umask值或循环函数
在文件末尾添加umask值为027umask 027
保存退出
3.执行source /etc/profile
使修改生效
- /etc/csh.cshrc
查看文件csh.cshrc的umask值,为027视为合规。
查看命令:cat /etc/csh.cshrc
整改方式:
- 备份csh.cshrc文件
cp -p /etc/csh.cshrc /etc/csh.cshrc_bak
- 编辑csh.cshrc文件
vim /etc/csh.cshrc
- 注释掉原有umask值或循环函数
在文件末尾添加umask值为027umask 027
- /etc/bashrc
查看文件的umask值为027视为合规。
查看命令:cat /etc/bashrc
整改方式:
4. 执行备份:cp -p /etc/bashrc /etc/bashrc_bak
5. 修改umask设置:vi /etc/bashrc
6. 注释掉原有umask值或循环函数。
在文件末尾添加umask值为027umask 027
- /root/.bashrc
查看/root/.bashrc的umask值,为027视为合规。
查看命令:cat /root/.bashrc
整改方式:
7. 备份配置文件cp -p /root/.bashrc /root/.bashrc_bak
8. 修改配置文件vim /root/.bashrc
9. 注释掉原有umask值或循环函数。
在文件末尾添加umask值为027umask 027
- /root/.cshrc
查看/root/.cshrc文件的umask值,为027视为合规
查看命令:cat /root/.cshrc
整改方式:
- 备份文件
cp /root/.cshrc /root/.cshrc_bak
- 编辑文件
vi /root/.cshrc
- 注释掉原有umask值或循环函数在文件末尾添加umask值为027
umask 027
- /etc/login.defs
查看login.defs中是否存在UMASK 027,存在视为合规。
查看命令:cat /etc/login.defs
现状:权限掩码:077
整改方式:
设置默认权限:
备份文件
cp /etc/login.defs /etc/login.defs_bak
编辑文件
vi /etc/login.defs
在末尾增加UMASK 027
或者编辑修改(若之前存在UMASK循环函数,则需要先将整段循环注释),将缺省访问权限设置为750。
补充说明:
UMASK 的默认设置一般为022,这给新创建的文件默认权限755(777-022=755),这会给文件所有者读、写权限,但只给组成员和其它用户读权限。
15、存在HISTTIMEFORMAT配置视为合规
问题背景
具体日期记录格式准确性需人工查看
查看命令:export
未配置
整改方式
- 备份文件
cp /root/.bashrc /root/.bashrc_bak
- 编辑文件
vi /root/.bashrc
添加或修改如下行
export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S" //具体日期格式根据可根据实际需要修改
执行source /root/.bashrc
生效
16、账户口令安全符合要求
问题背景
PASS_MAX_DAYS的值大于0且小于等于${key2}视为合规
查看命令:cat /etc/login.defs
现状如下:
密码最大有效期:99999(代表永久有效)
/etc/login.defs详解:
PASS_MAX_DAYS 99999 #密码的最大有效期, 99999:永久有期
PASS_MIN_DAYS 0 #是否可修改密码,0可修改,非0多少天后可修改
PASS_MIN_LEN 5 #密码最小长度,使用pam_cracklib module,该参数不再有效
PASS_WARN_AGE 7 #密码失效前多少天在用户登录时通知用户修改密码
整改方式
1.执行命令备份需要修改的配置文件
cp /etc/login.defs /etc/login.defs_bak
2.编辑配置文件 login.defs
vim /etc/login.defs
添加或修改 PASS_MAX_DAYS 为小于等于${key2},且大于0的值
PASS_MAX_DAYS ${key2}
注:若在shadow文件中设置相应限制信息,则shadow文件配置优先生效。
此处我修改为:2000
同理,密码过期告警时间 ,原本默认是 7 天,这里我们修改 PASS_WARN_AGE
为 30 天。
PASS_MAX_DAYS 2000
PASS_MIN_DAYS 7
PASS_MIN_LEN 12
PASS_WARN_AGE 30
17、账户锁定策略
问题背景
看是否包含以下auth required pam_tally.so onerr=fail deny=${key2} no_magic_root even_deny_root。包含视为合规(deny的具体标准值以正则为准)。
查看命令:
cat /etc/pam.d/common-auth
cat /etc/pam.d/system-auth
cat /etc/pam.d/sshd
当前未配置
整改方法
1.备份/etc/pam.d/sshd
文件
cp /etc/pam.d/sshd /etc/pam.d/sshd_bak
2.编辑 vi /etc/pam.d/sshd
添加或修改如下行(这里我设置密码尝试10次)no_magic_root #表示连root用户也在限制范围内(暂时去掉)
auth required pam_tally2.so onerr=fail deny=6 unlock_time=20 no_magic_root
简要说明:普通帐户和 root 的帐户登录连续 3 次失败,就统一锁定 20 秒, 20 秒后可以解锁。
如果不想限制 root 帐户,可以把 even_deny_root 和root_unlock_time这两个参数去掉。
root_unlock_time 表示 root 帐户的 锁定时间,onerr=fail 表示连续失败,deny=6,表示 超过6 次登录失败即锁定。
很危险的,我自己在设置的时候不小心就把root给锁了。建议还是移除吧。
auth required pam_tally2.so onerr=fail deny=6 unlock_time=20 no_magic_root even_deny_root root_unlock_time=20
这里我又重新修改了下登录连续失败次数为 6,所以截图和实际不一样。
(pam_tally.so模块需根据实际情况配置,一般使用pam_tally.so或pam_tally2.so
模块。配置前可以先用find / -name pam_tally.so
命令查看模块是否存在)
find / -name pam_tally.so 此命令运行报错,权限不足(find: ‘/run/user/1000/gvfs’: 权限不够)
umount /run/user/1000/gvfs // 卸载该文件
rm -rf /run/user/1000/gvfs // 删除该文件
*注:此处我未做删除和卸载处理*
find / -name pam_tally2.so
发现有这个,就用这个吧。
注:只需修改/etc/pam.d/system-auth或/etc/pam.d/sshd文件中的一个即可。修改/etc/pam.d/sshd只限制ssh方式登录的用户。
18、存在password required pam_passwdqc.so enforce=everyone视为合规
整改方式
编辑文件
vim /etc/pam.d/passwd
这里发现我已经配置过 pam_passwdqc.so
,只需要增加enforce=everyone
配置项即可。
增加配置项
password required pam_passwdqc.so enforce=everyone
19、设置Ntp服务开机自启
问题背景
使用命令查看 ntpd 服务,应开启
查看命令:
systemctl is-enabled ntp > /tmp/ntpenable.txt 2>/dev/null;
systemctl is-enabled ntpd >> /tmp/ntpenable.txt 2>/dev/null;
chkconfig --list >> /tmp/ntpenable.txt 2>/dev/null;
cat /tmp/ntpenable.txt;
rm -rf /tmp/ntpenable.txt;
整改方式
执行如下命令设置ntp服务开机启动,
systemctl enable ntpd
chkconfig ntpd on
systemctl enable ntp
chkconfig ntp on
这里提示没有 ntp 服务
服务 ntp 信息读取出错:没有那个文件或目录
配置完成后,可利用 date 命令查看系统当前时间,与监控终端时间比较,若相差超过 1000s,可用 ntpdate
命令与时间服务器强制同步
20、限制SSH登录后使用图形化界面
问题背景
执行命令cat /etc/ssh/sshd_config查看 X11Forwarding
值是否为no,为no或者没有配置视为合规
查看命令:cat /etc/ssh/sshd_config
当前现状:启用图形化状态:yes
整改方式
将值设置为X11Forwarding
设置为 no
X11Forwarding no
21、防syn攻击优化
问题背景
查看返回结果net.ipv4.tcp_max_syn_backlog的值为2048视为合规。
查看命令:sysctl net.ipv4.tcp_max_syn_backlog > /tmp/backlog.txt && cat /tmp/backlog.txt
rm -f /tmp/backlog.txt
当前结果为:值:1024
整改方式
- 备份sysctl.conf文件
cp -p /etc/sysctl.conf /etc/sysctl.conf_bak
- 编辑sysctl.conf文件
vim /etc/sysctl.conf
找到以下行net.ipv4.tcp_max_syn_backlog
(若没有自行添加),将其值修改为2048
。
net.ipv4.tcp_max_syn_backlog=2048
执行/sbin/sysctl -e -p /etc/sysctl.conf
立即生效
22、对root为ls、rm设置别名
问题背景
存在alias ls='ls -aol’和alias rm='rm -i’视为合规
查看命令:cat /root/.bashrc
当前现状:ls别名:[未配置],rm别名:rm -i
整改方式
备份/root/.bashrc文件
cp /root/.bashrc /root/.bashrc_bak
编辑/root/.bashrc文件
vi /root/.bashrc
添加或修改如下行
alias ls='ls -aol'
alias rm='rm -i'
执行source /root/.bashrc
使修改生效
23、记录历史密码次数
问题背景
存在password required pam_unix.*so remember=${key3}视为合规
查看命令:cat /etc/pam.d/system-auth
;cat /etc/pam.d/common-password
;cat /etc/pam.d/passwd
当前现状:未配置
整改方式
- 备份
/etc/pam.d/passwd
文件
cp /etc/pam.d/passwd /etc/pam.d/passwd_bak
如已经备份,请忽略
2. 编辑配置文件
vim /etc/pam.d/passwd
添加或修改如下行
password required pam_unix.so remember=6
24、检查是否对登录进行日志记录—LASTLOG_ENAB
问题背景
- 检测方式:
存在 LASTLOG_ENAB yes 视为合规
查看命令:cat /etc/login.defs - 当前现状:没有配置
整改方式
1.备份文件(如已有备份,请忽略此步骤)cp /etc/login.defs /etc/login.defs_bak
2.编辑文件vi /etc/login.defs
3.添加或修改如下行LASTLOG_ENAB yes
4.保存退出
25、系统登录超时设置
问题背景
autologout的值等于${key2}视为合规
查看命令:cat /etc/csh.cshrc
现状:登录超时:[未配置]
整改方式
- 备份csh.cshrc文件(如已备份,请忽略此步骤)
cp -p /etc/csh.cshrc /etc/csh.cshrc_bak
- 编辑csh.cshrc文件
vi /etc/csh.cshrc
- 添加或修改如下参数
set autologout=3600
26、系统日志权限控制
问题背景
查看 /var/log
文件夹日志权限,按账户分配日志文件读取、修改和删除权限
如:messages
、secure
、maillog
、cron
、spooler
、boot.log
文件权限是否合规
查看命令:
ls -la /var/log | grep -E "messages$|secure$|maillog$|cron$|spooler$|boot.log$" --color=never
整改方式:
1、备份需要修改的文件,messages、secure、maillog、cron、spooler、boot.log文件
样例:cp /var/log/fileName (此处fileName依次替换为messages、secure、maillog、cron、spooler、boot.log文件)
cp /var/log/messages /var/log/messages_bak
cp /var/log/secure /var/log/secure_bak
cp /var/log/maillog /var/log/maillog_bak
cp /var/log/cron /var/log/cron_bak
cp /var/log/spooler /var/log/spooler_bak
cp /var/log/boot.log /var/log/boot.log_bak
2、设置文件权限。
样例:chmod 644 fileName (此处fileName依次替换为messages、secure、maillog、cron、spooler、boot.log文件)
chmod 644 messages
chmod 644 secure
chmod 644 maillog
chmod 644 cron
chmod 644 spooler
chmod 644 boot.log
3、再次查看文件权限
ls -la /var/log | grep -E "messages$|secure$|maillog$|cron$|spooler$|boot.log$" --color=never
结果如下:
-rw-r–r–. 1 root 0 2月 25 03:43 boot.log
-rw-r–r–. 1 root 78134 3月 2 10:40 cron
-rw-r–r–. 1 root 0 2月 26 03:42 maillog
-rw-r–r–. 1 root 192060 3月 2 10:40 messages
-rw-r–r–. 1 root 13057 3月 2 08:46 secure
-rw-r–r–. 1 root 0 2月 26 03:42 spooler
27、加固主机解析文件
问题背景
查看是否存在nospoof on,存在视为合规。
查看命令:cat /etc/host.conf
样例:
1.备份文件/etc/host.conf
cp /etc/host.conf /etc/host.conf_bak
2.编辑文件,添加或修改如下行
nospoof on #关闭IP伪装
查看是否存在multi off,存在视为合规。
查看命令:cat /etc/host.conf
样例:
1.备份文件/etc/host.conf
2.编辑文件,添加或修改如下行
multi off #关闭多IP绑定
28、SSH 协议使用SSH2
漏洞背景
查看sshd_config
中是否包含Protocol 2
,包含视为合规。
查看命令:cat /etc/ssh/sshd_config
整改方式
样例:
1.备份需要编辑的文件(已有备份,忽略):
cp /etc/ssh/sshd_config /etc/ssh/sshd_config_bak
2.编辑文件
vi /etc/ssh/sshd_config
添加Protocol 2或者取消Protocol 2前的#号注释
Protocol 2
(重启SSH服务后生效)
检查环境变量目录中是否包含组目录权限为777的文件
find / -perm 777 -type d
关闭ip转发功能
当前现状
默认接口的转发功能:1,所有接口的转发功能:1
整改建议
方法一:
- 备份sysctl.conf文件(已备份,请忽略)
cp -p /etc/sysctl.conf /etc/sysctl.conf_bak
- 编辑sysctl.conf文件
vim /etc/sysctl.conf
找到以下行net.ipv4.ip_forward
(若没有自行添加),将其值修改为0。
执行/sbin/sysctl -e -p /etc/sysctl.conf立即生效
方法二:
1.使用命令以下命令修改ip_forward的值(不推荐,使用该方法修改参数值,系统重启后会失效,参数变为原始默认值)。
sysctl -w net.ipv4.ip_forward=0
!!!注意!!!
(针对K8S集群宿主机基线)kube-proxy的实现方式是使用iptables机制,服务之间的调用走service的负载均衡。Iptables的forward机制需要设置net.ipv4.ip_forward=1
整改方式
这里我采用方法一。
同理修改如下配置项
方法一:
- 备份sysctl.conf文件
cp -p /etc/sysctl.conf /etc/sysctl.conf_bak - 编辑sysctl.conf文件
vim /etc/sysctl.conf
找到以下行net.ipv4.conf.all.forwarding = 0
(若没有自行添加),将其值修改为0net.ipv4.conf.default.forwarding = 0
(若没有自行添加),将其值修改为0
执行/sbin/sysctl -e -p /etc/sysctl.conf
立即生效
方法二:
1.使用以下命令修改值(不推荐,使用该方法修改参数值,系统重启后会失效,参数变为原始默认值)。
sysctl -w net.ipv4.conf.all.forwarding=0
sysctl -w net.ipv4.conf.default.forwarding=0
!!!注意!!!
对于容器场景,此检查项不适用
支持配置sshd服务端未认证连接最大并发量:10
整改建议
样例:
备份sshd_config文件
cp /etc/ssh/sshd_config /etc/ssh/sshd_config_bak
编辑sshd_config文件
vi /etc/ssh/sshd_config
添加或修改如下行
MaxStartups 10:30:100
(重启SSH服务后生效)
补充说明:缺省值为10:30:100
10:开始删除之前未认证的连接数
30:一单达到10后就开始下降的几率(现行增强超过10)
100:删除所有内容的最大连接数
整改方式:注释去掉
Wuftp的banner信息
问题描叙
通过外部ftp客户端登录,banner按照预先设定的显示
查看命令:cat cat /etc/ftpaccess |grep -v "#"|grep ^banner |awk -F " *" '{print $2}'
1 2>/dev/null
整改建议
样例:
修改文件/etc/ftpaccess,在其中添加,如:
banner /thisftpbannerfile
在指定目录下创建包含ftp的banner信息的文件
touch /thisftpbannerfile
编辑文件
vi /thisftpbannerfile
在其中添加banner信息,例如
this is banner
查看cron.d相关文件权限
问题背景:
人工查看文件权限是否合理
查看命令:ls -la /etc/cron* /var/spool/cron* --color=never
不合规的内容如下:
文件名:/etc/cron.deny,权限:rw-------
文件名:/etc/crontab,权限:rw-r--r--
文件名:0hourly,权限:rw-r--r--
文件名:raid-check,权限:rw-r--r--
文件名:sysstat,权限:rw-------
文件名:logrotate,权限:rwx------
文件名:man-db.cron,权限:rwxr-xr-x
文件名:mlocate,权限:rwx------
文件名:0anacron,权限:rwxr-xr-x
整改方式,修改权限:
合理设置文件权限
使用 chmod go-wx filename命令修改文件或目录权限
chmod go-wx /etc/cron.deny
chmod go-wx /etc/crontab
chmod go-wx /etc/cron.d/0hourly
chmod go-wx /etc/cron.d/raid-check
chmod go-wx /etc/cron.d/sysstat
chmod go-wx /etc/cron.daily/logrotate
chmod go-wx /etc/cron.daily/man-db.cron
chmod go-wx //etc/cron.daily/mlocate
chmod go-wx /etc/cron.hourly/0anacron
Mysql 从数据库(版本8.0.27)
1、配置用户使用ssl连接
人工查看展示的可远程用户的ssl_type值 是否合理(所有网络请求必须走SSL/TLS访问数据库。SSL提供多种算法,其中一些算法安全性并不高不能帮助用户杜绝网络劫持和网络拦截。建议设置ssl_type为高安全类型的加密算法。但这其中有一个隐患,如果客户端使用较低加密算法,会由于算法无法匹配导致链接失败)
查看命令:
mysql -P@{dbport} -h@{dbhost} -u@{dbusername} -p'@{dbpassword}' -t -e "SELECT user, host, ssl_type FROM mysql.user WHERE NOT HOST IN ('::1', '127.0.0.1', 'localhost') \G"
注:暂未做调整
2、开启 mysql 查询日志
默认未开启
mysql> show variables like '%general%';
+------------------+--------------------------------------------+
| Variable_name | Value |
+------------------+--------------------------------------------+
| general_log | OFF |
| general_log_file | /usr/local/mysql-8.0.27/data/localhost.log |
+------------------+--------------------------------------------+
2 rows in set (0.00 sec)
整改方式:
cd /usr/local/mysql-8.0.27/log/
mkdir general_log
开启查询日志
关于查询日志的配置详解,请参考我另一篇博文:
关于查询日志的配置详解
vim /etc/my.cnf
log_output = FILE
这个选项如果已经存在,无需再次配置
[mysqld]
general_log = 1
general_log_file = /usr/local/mysql-8.0.27/log/general_log/general_statement.log
log_output = FILE
修改配置后需要重启 Mysql 服务。
service mysqld restart;
同时修改日志权限(先确认目录位置是否在 (cd /usr/local/mysql-8.0.27/log/general_log
)
chmod 660 general_statement.log
查看slow_query_log_file文件权限
命令行登录 mysql 查看 Mysql 慢查询日志的位置
show variables like '%slow%';
+-----------------------------+--------------------------------------+
| Variable_name | Value |
+-----------------------------+--------------------------------------+
| log_slow_admin_statements | OFF |
| log_slow_extra | OFF |
| log_slow_replica_statements | OFF |
| log_slow_slave_statements | OFF |
| slow_launch_time | 2 |
| slow_query_log | ON |
| slow_query_log_file | /usr/local/mysql-8.0.27/log/slow.log |
+-----------------------------+--------------------------------------+
执行修改权限命令
chmod 660 /usr/local/mysql-8.0.27/log/slow.log
同理修改 log_error
日志的权限
chmod 660 /usr/local/mysql-8.0.27/log/mysqld.log
查看relay_log_basename文件权限
登录mysql 命令行查看:
show variables like 'relay_log_basename';
mysql> show variables like '%relay_log_basename%';
+--------------------+--------------------------------------------------+
| Variable_name | Value |
+--------------------+--------------------------------------------------+
| relay_log_basename | /usr/local/mysql-8.0.27/data/localhost-relay-bin |
+--------------------+--------------------------------------------------+
1 row in set (0.00 sec)
找到相关文件修改权限
chmod 660 /usr/local/mysql-8.0.27/data/localhost-relay-bin.index
chmod 660 /usr/local/mysql-8.0.27/data/localhost-relay-bin.000002
chmod 660 /usr/local/mysql-8.0.27/data/localhost-relay-bin.000003
chmod 660 /usr/local/mysql-8.0.27/data/localhost-relay-bin.000004
查看log_bin_basename文件权限配置
show variables like 'log_bin_basename';
mysql> show variables like 'log_bin_basename';
+------------------+-------------------------------------------+
| Variable_name | Value |
+------------------+-------------------------------------------+
| log_bin_basename | /usr/local/mysql-8.0.27/log/mysql3307_bin |
+------------------+-------------------------------------------+
1 row in set (0.00 sec)
找到相关文件修改权限
cd /usr/local/mysql-8.0.27/log/
chmod 660 mysql3307_bin.index
chmod 660 mysql3307_bin.000001
chmod 660 mysql3307_bin.000002
chmod 660 mysql3307_bin.000003
查看 Mysql 所有用户信息
SELECT user FROM mysql.user;
mysql> SELECT user FROM mysql.user;
+------------------+
| user |
+------------------+
| root |
| mysql.infoschema |
| mysql.session |
| mysql.sys |
+------------------+
4 rows in set (0.00 sec)
当前查看并无其他用户。
设置 mysql 登录失败次数
登录 mysql 查看当前设置
show variables like '%connection_control%';
整改方式:
1.以mysql用户登录系统
msyql -uroot -p
2.切换到mysql命令行
3.执行如下命令安装插件
install plugin CONNECTION_CONTROL soname 'connection_control.so';
install plugin CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS soname 'connection_control.so';
4.备份/etc/my.cnf文件
5.编辑文件,在[mysqld]标签下,增加如下内容
connection-control-failed-connections-threshold= 6
6.重启mysql后生效
show variables like '%connection_control%';
+-------------------------------------------------+------------+
| Variable_name | Value |
+-------------------------------------------------+------------+
| connection_control_failed_connections_threshold | 6 |
| connection_control_max_connection_delay | 2147483647 |
| connection_control_min_connection_delay | 1000 |
+-------------------------------------------------+------------+
配置密码策略:
查看当前配置:
show global variables like 'validate%';
整改方式:
用组件方式:
1.以有mysql权限的用户登录
2.切换到mysql命令行,使用如下命令安装插件,一般默认已安装无需重复安装INSTALL COMPONENT 'file://component_validate_password';
3.备份/etc/my.cnf文件
4.编辑文件,在[mysqld]下添加如下内容,
- 设置密码中特殊字符的最小个数为${key1}
validate_password.special_char_count=1
- 检验密码强度等级
validate_password.policy=2
注:参数说明
0/LOW:只检查长度
1/MEDIUM:检查长度、数字、大小写、特殊字符
2/STRONG:检查长度、数字、大小写、特殊字符字典文件 - 限制密码中大小写字符最小个数
validate_password.mixed_case_count=1
- 限制密码中最小数字的个数
validate_password.number_count=1
- 密码最小长度设置
validate_password.length=8
5.重启Mysql服务生效
命令历史记录保护
1.以管理员权限用户登录
2.查找.mysql_history和.bash_history是否存在,默认在用户家目录下
find / .mysql_history
find / .bash_history
3.查看展示结果,应不存在.mysql_history和.bash_history文件
整改建议:
1.以管理员权限用户登录
2.查找.mysql_history和.bash_history是否存在,默认在用户家目录下
/root/.mysql_history
/root/.bash_history
cd /root/
rm -rf .mysql_history
rm -rf .bash_history
3.根据找到的路径结果,删除.mysql_history和.bash_history文件
4.使用以下命令防止文件再次创建
ln -s /dev/null /root/.mysql_history
ln -s /dev/null /root/.bash_history