linux系统安全加固--账号相关

本文详细介绍了Linux系统安全加固中的账号管理,包括禁用或删除无用账号、检查特殊账号、添加口令策略,以及限制用户su、配置sudo权限。在口令策略中,涉及密码复杂度、过期时间和错误尝试次数的限制。此外,文章还涵盖了SSH登录配置,如密钥登录、禁止密码登录、禁止root用户直接登录和登录超时设置。通过对这些方面的加固,可以显著提升Linux系统的安全性。
摘要由CSDN通过智能技术生成

linux系统安全加固

一、账号相关

1、禁用或删除无用账号

减少系统无用账号,降低安全风险。

当我们的系统安装完毕后,系统默认自带了一些虚拟账户,比如bin、adm、lp、games、postfix等,这些账号理论上是可以删除的。但是因为它们的登录shell都是/sbin/nologin,所以它们本身也是无法登录的,不用删也可以。我们要注意的是系统安装完成后,自己手动创建的一些账户,比如这些登录shell是/bin/bash,一定要控制好。

1.1、使用cat /etc/passwd 命令查看所有账号

如下图所示:

注:/etc/passwd是存放用户的地方,简单学习一下。各个字段描述如下:

用户名: 密码 : uid : gid :用户描述:主目录:登陆shell

image

把系统一些自带的账号注释掉:

注意:不建议直接删除,当你需要某个用户时,自己重新添加会很麻烦。

删除用户主要包括:adm,lp,sync,shutdown,halt,news,uucp,operator,games,ftp,postfix,dovecot

[root@localhost ~]# cp /etc/passwd /etc/passwdbak
[root@localhost ~]# vim /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
#adm:x:3:4:adm:/var/adm:/sbin/nologin
#lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
#sync:x:5:0:sync:/sbin:/bin/sync
#shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
#halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
#operator:x:11:0:operator:/root:/sbin/nologin
#games:x:12:100:games:/usr/games:/sbin/nologin
#ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
#postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
lulu:x:1000:1000::/home/lulu:/bin/bash
#dovecot:x:97:97:Dovecot IMAP server:/usr/libexec/dovecot:/sbin/nologin
#dovenull:x:997:995:Dovecot's unauthorized user:/usr/libexec/dovecot:/sbin/nologin
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
dockerroot:x:996:993:Docker User:/var/lib/docker:/sbin/nologin
dd:x:1001:1001::/home/dd:/bin/bash
doubles:x:1002:1002::/home/doubles:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
d1:x:1003:1004::/home/d1:/bin/bash
d3:x:1004:1007::/home/d3:/bin/bash
[root@localhost ~]# id adm
id: adm: no such user
[root@localhost ~]# id lp
id: lp: no such user
[root@localhost ~]# 

注释用户组

删除的用户组包括:adm,lp,mail,games,ftp,audio

[root@localhost ~]# cp /etc/group /etc/groupbak
[root@localhost ~]# vim /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
#adm:x:4:
tty:x:5:
disk:x:6:
#lp:x:7:
mem:x:8:
kmem:x:9:
wheel:x:10:doubles
cdrom:x:11:
mail:x:12:postfix
man:x:15:
dialout:x:18:
floppy:x:19:
#games:x:20:
tape:x:30:
video:x:39:
#ftp:x:50:
lock:x:54:
#audio:x:63:
.....

1.2、userdel -r删除不必要的账号

如果是一些自己添加的账户,不用的话,建议直接删除。

加上参数-r,将账号相应的home目录与mail目录都一起删掉。

[root@localhost ~]# userdel -r d2
userdel: d2 mail spool (/var/spool/mail/d2) not found
userdel: d2 home directory (/home/d2) not found
[root@localhost ~]# 

1.3、passwd -l禁用账户

使用passwd -l禁用账户dd,禁用后,root用户仍然可以su,但是其他用户无法su到dd,也无法通过xshell去ssh到dd了。

[root@localhost ~]# passwd -l dd
Locking password for user dd.
passwd: Success
[root@localhost ~]# su dd
[dd@localhost root]$ exit
exit
[root@localhost ~]# su - doubles
Last login: Sat Sep 8 20:24:52 HKT 2018 on pts/2
[doubles@localhost ~]$ su dd
Password: 
su: Authentication failure
[doubles@localhost ~]$ 

1.4、passwd -u解锁账户

使用passwd -u解锁后,账户可以正常登陆。

[doubles@localhost ~]$ exit
logout
[root@localhost ~]# passwd -u dd
Unlocking password for user dd.
passwd: Success
[root@localhost ~]# su doubles
[doubles@localhost root]$ su dd
Password: 
[dd@localhost root]$ 

2、检查特殊账号

检查是否存在空口令和root权限的账号。

2.1、检测空口令账户

[root@localhost ~]# awk -F: '$2=="!!" {print $1}' /etc/shadow
systemd-bus-proxy
systemd-network
dbus
polkitd
tss
postfix
sshd
lulu
dovecot
dovenull
mysql
dockerroot
apache
d3

再去/etc/passwd查看哪些账户是可登录的,如下:

image

2.2、加固空口令账号

对无口令并且可登录的账户,进行密码设置:(注意密码不能包含用户名,也不能少于7位)

[root@localhost ~]# passwd lulu
Changing password for user lulu.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@localhost ~]# passwd d3
Changing password for user d3.
New password: 
BAD PASSWORD: The password is shorter than 7 characters
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@localhost ~]# 
[root@localhost ~]# passwd d3
Changing password for user d3.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

2.3、检测root权限账号

使用命令 awk -F: '($3==0)' /etc/passwd 查看UID为零的账号。

[root@localhost ~]# awk -F: '($3==0)' /etc/passwd
root:x:0:0:root:/root:/bin/bash
[root@localhost ~]# 

确保uid为0的账号只能是root账号。

3、添加口令策略

3.1、密码复杂度设置

加强口令的复杂度等,降低被猜解的可能性。

a、用户密码不能包含用户名

b、用户密码不能少于10位

c、用户密码需要是特殊字符、数字、字母的组合

Linux对应的密码策略模块有:pam_passwdqc 和 pam_pwquality 。

pam_passwdqc模块对应的是/etc/login.defs

pam_pwquality模块对应的是/etc/security/pwquality.conf

(旧版是pam_cracklib.so)

3.1.1、修改/etc/login.defs
[root@localhost ~]# vim /etc/login.defs

PASS_MIN_LEN 10 #密码最小长度,使用pam_cracklib module,该参数不再有效

3.1.2、修改/etc/pam.d/system-auth

修改前,我们先备份一下:

[root@localhost ~]# cp /etc/pam.d/system-auth /etc/pam.d/system-auth-backup
3.1.2.1禁止使用旧密码

找到同时有 “password” 和 “pam_unix.so” 字段并且附加有 “remember=5” 的那行,它表示禁止使用最近用过的5个密码(己使用过的密码会被保存在 /etc/security/opasswd 下面)。

配置如下:

password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5
3.1.2.2、设置密码最小长度

找到同时有 “password” 和 “pam_cracklib.so” 字段并且附加有 “minlen=10” 的那行,它表示最小密码长度为(10 - 类型数量)。这里的 “类型数量” 表示不同的字符类型数量。PAM 提供4种类型符号作为密码(大写字母、小写字母、数字和标点符号)。如果你的密码同时用上了这4种类型的符号,并且你的 minlen 设为10,那么最短的密码长度允许是6个字符。

配置如下:

password requisite pam_cracklib.so retry=3 difok=3 minlen=10
3.1.2.3、其他复杂度设置

pam_cracklib.so比较重要和难于理解的是它的一些参数和计数方法,其常用参数包括:   

debug:将调试信息写入日志;

type=xxx:当添加/修改密码时,系统给出的缺省提示符是“New UNIX password:”以及“Retype UNIX

password:”,而使用该参数可以自定义输入密码的提示符,比如指定type=your own word;

retry=N:定义登录/修改密码失败时,可以重试的次数;

difok=N:定义新密码中必须有几个字符要与旧密码不同。但是如果新密码中有1/2以上的字符与旧密码不同时,该新密码将被接受;

minlen=N:定义用户密码的最小长度;

dcredit=N:定义用户密码中必须包含多少个数字;

ucredit=N:定义用户密码中必须包含多少个大写字母;

lcredit=N:定义用户密码中必须包含多少个小些字母;

ocredit=N:定义用户密码中必须包含多少个特殊字符(除数字、字母之外);

我的配置如下:

image

主要是两行:

[root@localhost ~]# vim /etc/pam.d/system-auth
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1 difok=1 minlen=8 authtok_type="doubles type"
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5

(注)

a、*credit=-1表示至少有一个的意思。

b、旧版的系统用的pam_cracklib.so,只要把上面的pam_pwquality.so替换成pam_cracklib.so就可以了。

c、Centos7以后都用pam_pwquality了,pam_pwquality完全向下兼容pam_cracklib,并且还提供了/etc/security/pwquality.conf进行参数配置。

3.1.2.4、测试

以上设置对root用户完全不起作用的。root是个bug般的存在

[root@localhost ~]# passwd doubles
Changing password for user doubles.
New "doubles password: (输入的是dd)
BAD PASSWORD: The password is a palindrome
Retype new "doubles password: (输入的是dd123)
Sorry, passwords do not match.
New "doubles password: (输入的是dd123)
BAD PASSWORD: The password contains less than 1 uppercase letters
Retype new "doubles password: (再次输入dd123)
passwd: all authentication tokens updated successfully.
[root@localhost ~]# 

以上root给doubles最终设置密码为dd123,虽然不符合规则,但还是设置成功了,这就是root。

切换成普通用户去更改自己的密码:

[root@localhost ~]# su doubles
[doubles@localhost root]$ passwd doubles
passwd: Only root can specify a user name.
[doubles@localhost root]$ passwd
Changing passwo
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值