Linux基线加固
Linux基线加固
目录
[toc]
Linux系统安全加固方案
检查除root之外的UID为0的用户
(1)配置项描述
检查是否存在除root之外UID为0的用户。
(2)操作步骤
删除除root外的UID为0的用户:
#userdel username
(3)检查方法
执行:
# awk -F: '($3 == 0) { print $1 }' /etc/passwd
返回值应只有root
设置复杂密码
服务器设置大写、小写、特殊字符、数字组成的12-16位的复杂密码 ,也可使用密码生成器自动生成复杂密码,这里给您一个链接参考:https://suijimimashengcheng.51240.com/
echo "root:wgr1TDs2Mnx0XuAv" | chpasswd
==案例:linux命令生成12位随机密码==
[root@test ~]# cat /dev/urandom | tr -dc '[:alnum:]'| head -c12
STT5sSRgE08v[root@test ~]# cat /dev/urandom | tr -dc '[:alnum:]'| head -c12
nL9ovPIgnlEa[root@test ~]#
检查是否存在空密码的帐户
(1)配置项描述
检查是否存在空密码的帐户,非法用户可通过该账户直接登录系统,威胁系统安全。
(2)操作步骤
1、执行:
# awk -F: '( $2 == "" ) { print $1 }' /etc/shadow
2、为帐户设置满足密码复杂度的密码:
# passwd username。
(3)检查方法
执行:
# awk -F: '( $2 == "" ) { print $1 }' /etc/shadow
返回值应为空。
特别注意:
#这里的空密码代表的是用passwd -d 用户后的账户,因为新创建的用户如果不设置密码,那么这个用户是不能远程登录机器的,其他用户也不能登录该用户;
#而用passwd -e 用户命令删除用户密码后,该用户的密码就为空了,虽然次用户也不能远程登录机器,但是其他用户时可以直接登录该用户的
#要注意区分以上2中情况
#测试过程如下:
#创建测试用户pp,并设置密码
[root@centos76 ~]#useradd pp
[root@centos76 ~]#echo "pp:0925" |chpasswd
[root@centos76 ~]#getent shadow pp
pp:$6$kkSYi/VDeIAm$B4TqsqN14hnt/khsIJfjS64Jwv.UYKSlZFwk3nbAPmRRGVGkSS9lajQlKK3J7Rcvn/PBOpv1uyPkDFxYzdXZP.:18655:0:99999:7:::
#正常普通用户之间登录需要知道对方的密码:
[kk@centos76 ~]$su - pp
Password:
-bash: 993: command not found
[pp@centos76 ~]$exit
logout
[kk@centos76 ~]$
#用passwd -d 用户命令删除测试用户pp的密码,并再次测试
[root@centos76 ~]#passwd -d pp
Removing password for user pp.
passwd: Success
[root@centos76 ~]#getent shadow pp
pp::18655:0:99999:7:::
[root@centos76 ~]#
#当测试用户密码为空密码后,其他普通用户时可以直接登录该用户的,这个很危险!
[kk@centos76 ~]$su - pp
Last login: Thu Jan 28 21:38:12 CST 2021 on pts/1
-bash: 993: command not found
[pp@centos76 ~]$
删除与设备运行、维护等工作无关的账号
(1)配置项描述
删除或锁定与设备运行、维护等工作无关的账号。
(2)操作步骤
1、参考配置操作
删除用户:#userdel username;
锁定用户:
1)修改/etc/shadow 文件,用户名后加*LK* #这个是什么意思??;
2)将/etc/passwd 文件中的 shell 域设置成/bin/false
3)#passwd -l username
只有具备超级用户权限的使用者方可使用,
#passwd -l username 锁定用户
2、补充操作说明需要锁定的用户:listen,gdm,webservd,nobody,nobody4、noaccess。
注:无关的账号主要指测试帐户、共享帐号、长期不用账号(半年以上未用)等
(3)检查方法
1、被删除或锁定的账号无法登录成功;
2、检测操作使用删除或锁定的与工作无关的账号登录系统;
3、需要锁定的用户:listen,gdm,webservd,nobody,nobody4、noaccess
设置口令策略满足复杂度要求和口令生存周期😘
#注意:关于密码复杂度涉及的2个文件如下
/etc/login.defs #口令生存周期
/etc/pam.d/system-auth #密码复杂度
或者
/etc/pam.d/password-auth
或者
/etc/pam.d/common-password
(1)配置项描述
设置口令策略满足复杂度要求和口令生存周期,确保口令具有足够的复杂性,可抵抗穷举攻击。
(2)操作步骤
1、执行备份:
cp -p /etc/login.defs /etc/login.defs_bak
cp -p /etc/pam.d/system-auth /etc/pam.d/system-auth_bak
2、修改策略设置:
第一步:#vi /etc/login.defs # 设置口令生存周期
修改PASS_MAX_DAYS为90、PASS_MIN_LEN为8、PASS_MIN_DAYS为1、PASS_WARN_AGE为7
#备注:
PASS_MAX_DAYS 90 #密码最长过期天数
PASS_MIN_DAYS 1 #密码最小过期天数
PASS_MIN_LEN 8 #密码最小长度
PASS_WARN_AGE 7 #口令失效前多少天开始通知用户修改密码
第二步:#vi /etc/pam.d/system-auth # 设置密码强度
修改或新增随意行(第一行除外):password requisite pam_cracklib.so difok=3 dcredit=-1 lcredit=-1 ucredit=-1 credit=-1
#备注:
difok=3 新密码必需与旧密码不同的位数;
dcredit=-1 #N >= 0:密码中最多有多少个数字;N < 0 密码中最少有多少个数字;(下面一样,-1代表至少有1个字符)
lcredit=-1 小写字母的个数;
ucredit=-1 大写字母的个数;
credit=-1 特殊字母的个数
#注意:这个密码强度的设定只对"普通用户"有限制作用,root用户无论修改自己的密码还是修改普通用户的时候,不符合强度设置依然可以设置成功
#requisite 必须的,必要的
#required 必需的,规定的;理想的
在 Linux 系统中配置 PAM (Pluggable Authentication Modules) 以增强密码强度是一个提高系统安全性的好方法。pam_cracklib
模块是用于检查密码复杂度的一个常用工具。它可以强制执行诸如密码长度、包含的字符类型以及与旧密码的差异等策略。
(3)检查方法
执行如下命令确定是否符合配置要求:
#more /etc/login.defs
检查PASS_MAX_DAYS、 PASS_MIN_LEN、PASS_MIN_DAYS、PASS_WARN_AGE参数
#more /etc/ pam.d/system-auth
检查:password requisite pam_cracklib.so difok=3 dcredit=-1 lcredit=-1 ucredit=-1 credit=-1
- 注意:这里的设置密码强度方法不太一样!(留意下就好)
编辑文件/etc/pam.d/password-auth
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= difok=1 minlen=8 ucredit=-1 lcredit=-1 dcredit=-1
minlen=新密码的最小长度
difok= 定义新密码中必须要有几个字符和旧密码不同
ucredit= 新密码中可以包含的大写字母的最大数目。
lcredit=新密码中可以包含的小写字母的最大数
dcredit=定新密码中可以包含的数字的最大数目
#注:这个密码强度的设定只对"普通用户"有限制作用,root用户无论修改自己的密码还是修改普通用户的时候,不符合强度设置依然可以设置成功
2024年6月14日加固方法
#备份
cp /etc/login.defs /etc/login.defs.bak-`date +%F`
cp /etc/pam.d/system-auth /etc/pam.d/system-auth.bak-`date +%F`
#cp /etc/pam.d/common-password /etc/pam.d/common-password.bak-`date +%F`
#(1)
#vi /etc/login.defs
PASS_MAX_DAYS 90
PASS_MIN_DAYS 1
PASS_MIN_LEN 8
PASS_WARN_AGE 7
#(2)
#vim /etc/pam.d/system-auth
password required pam_passwdqc.so min=disabled,disabled,disabled,8,8
password requisite pam_cracklib.so retry=3 minlen=8 minclass=3
#注意:
#system-auth和common-password只需要编辑一个就好,我们这里只编辑system-auth就好。
#vim /etc/pam.d/common-password
#password requisite pam_cracklib.so retry=3 minlen=8 minclass=3
Linux系统密码采用哪种机制?
#需要注意下:
[root@centos76 ~]#getent passwd zxl
zxl:x:1010:1018::/home/zxl:/bin/bash
[root@centos76 ~]#getent shadow zxl
zxl:$6$FBZyx/SIpegraMH$VQ5bpzg4.ubeoBXxyIeEsQ.OELs/qqi0N35/m7uTKYq.3X2xbJHqJlBm1etFndmoCvhO04k7/La1.dP4CvyR3/:18656:0:99999:7::: #第二选项$6代表sha512,$5代表sha256;
[root@centos76 ~]#
如何禁止root用户远程登录?(特别注意)
(1)配置项描述
远程执行管理员权限操作,应先以普通权限用户远程登录后,再切 换到超级管理员权限账号后执行相应操作。
(2)操作步骤
如果限制 root 从远程 ssh 登录,修改/etc/ssh/sshd_config 文件,将 PermitRootLogin yes改为PermitRootLogin no,重启sshd 服务。
注意:一般禁止root用户远程登录,只需要设置PermitRootLogin no选项即可,尽量建议不要设置/sbin/nologin 选项,否则会很麻烦!!!
测试过程如下:
#默认状态下:
[root@test ~]# cat /etc/ssh/sshd_config |grep PermitRootLogin
PermitRootLogin yes
# the setting of "PermitRootLogin without-password".
[root@test ~]# getent passwd root
root:x:0:0:root:/root:/bin/bash
[root@test ~]#
A.只设置**PermitRootLogin no**
**选项:**从远程用root身份登录机器的话,再输入密码后,会报ssh服务器拒绝了您的密码,请再试一次的提示,但用其他可登录系统的普通用户依然是可以su到root用户的(如果知道root密码的话)。
[root@test ~]# vim /etc/ssh/sshd_config
PermitRootLogin no
[root@test ~]# systemctl restart sshd
[HG@test ~]$ su - root
Password:
Last login: Tue Feb 9 06:43:14 CST 2021 on pts/1
[root@test ~]# id
uid=0(root) gid=0(root) groups=0(root)
[root@test ~]#
B.只设置**root的登录shell /sbin/nologin**
**选项:**远程以root身份登录,终端shell是会直接被断开的(并没有到输入rot密码的那一步),并提示Disconnected from remote host(192.168.10.2:22) at 06:46:34.
,并且用其他可登录系统的普通用户是不能su到root用户的,而且在控制台后面也是无法用root进行登录的(会直接退出并重现显示登录界面的)。(这个就非常麻烦了)
[C:\~]$ ssh root@192.168.10.2
Connecting to 192.168.10.2:22...
Connection established.
To escape to local shell, press Ctrl+Alt+].
WARNING! The remote SSH server rejected X11 forwarding request.
Last login: Tue Feb 9 06:46:07 2021 from 192.168.10.1
Connection closing...Socket close.
Connection closed by foreign host.
Disconnected from remote host(192.168.10.2:22) at 06:46:34.#终端shell是会直接被断开的(并没有到输入rot密码的那一步),并提示`Disconnected from remote host(192.168.10.2:22) at 06:46:34.`,并且用其他可登录系统的普通用户是不能su到root用户的,而且在控制台后面也是无法用root进行登录的(会直接退出并重现显示登录界面的)。(这个就非常麻烦了)</font>
Type `help' to learn how to use Xshell prompt.
[C:\~]$
[HG@test ~]$ su - root #用其他可登录系统的普通用户是不能su到root用户的
Password:
Last login: Tue Feb 9 07:00:58 CST 2021 on pts/1
[HG@test ~]$ sudo tail -3 /etc/shadow
postfix:!!:18632::::::
ZXL:$6$Tm5oFxeo$i58346GWjSIgq5ot3Dtl3tkQPFZ.VP7IqYCeuOTNCePVcSRsikgZjqav1JZkFSG7FbkpBKz/ofhC72CVCUJtM0:18666:0:99999:7:::
HG:$6$q6GRrpX3$sWivQZDloqUS0907AmnNq7NrI0OpuZ3oiqud8yVKmWSDTlv1aJ5Oj94pZprAeelIChzZWkuKbkvY4WOw2u2Ml1:18666:0:99999:7:::
[HG@test ~]$ id HG
uid=1001(HG) gid=1001(HG) groups=1001(HG),10(wheel)
[HG@test ~]$
在控制台后面也是无法用root进行登录的(会直接退出并重现显示登录界面的):
(3)检查方法
1、判定条件:
root 远程登录不成功,提示“没有权限” ;
普通用户可以登录成功,而且可以切换到 root用户;
2、检测操作:
root 从远程使用 telnet 登录;
普通用户从远程使用 telnet 登录;
root 从远程使用 ssh 登录;
普通用户从远程使用 ssh登录;
3、补充说明:
限制 root 从远程 ssh 登录,修改/etc/ssh/sshd_config 文件,将 PermitRootLogin yes改为PermitRootLogin no,重启sshd 服务。
禁止任何人su到root,添加wheel组用户
(1)配置项描述
注意:这里是使用PAM禁止任何人su为root,因此ssh配置文件中UsePAM 选项必须要是yes的:
[root@test ~]# cat /etc/ssh/sshd_config |grep UsePAM
# WARNING: 'UsePAM no' is not supported in Red Hat Enterprise Linux and may cause several
UsePAM yes
[root@test ~]#
(2)操作步骤
1、编辑su文件(vi /etc/pam.d/su),添加下面行:
auth sufficient pam_rootok.so
auth required pam_wheel.so use_uid
2、补充操作说明:
上述添加表明只有whell组的成员可以使用su命令成为root用户。可以把有需求的用户添加到whell组,以使它可以使用su命令成为root用户。
添加方法:
#usermod -G wheel username
现在还有个问题:某个用户指定了一个扩展组(`usermod -G wheel ZXL`),但是如何删除这个扩展组呢?用什么命令来着?-->用`gpasswd -d ZXL wheel`就好了。
(3)检查方法
查看/etc/pam.d/su是否存在以下行:
auth sufficient pam_rootok.so
auth required pam_wheel.so use_uid
更改ssh端口
(1)配置项描述
隐藏ssh信息。
(2)操作步骤
vi /etc/ssh/sshd_config
修改
Port 22
修改成其他端口,迷惑非法试探者
例:
Linux下SSH默认的端口是22,为了安全考虑,现修改SSH的端口为54330,修改方法如下 :
/usr/sbin/sshd -p 54330
这里建议直接在配置文件中修改即可;
vim /etc/ssh/sshd_config ,更改Port或追加Port
注:生效要重启sshd进程。
(3)检查方法
cat /etc/ssh/sshd_config 判断 port 字段。