用户账号是计算机使用者的身份和标识,每一个想要访问系统资源的人都需要通过其用户账号才能进入计算机。在Linux系统中,提供了多种机制来确保账户的正当、安全的使用。
在Linux系统中,除了手工创建的账号外还存在很多账号,包括随系统安装或程序安装而生成的大量账号,这些账号是用来维持系统运行或保持服务进程的,一把你不允许登录,我们把这些账户称为非登录用户。
这些非登录用户的shell环境通常是**/sbin/nologin**,表示禁止终端登录,不会被人改动。
对于一些很少用到的程序账户或手工创建的不用的账号,我们可以视为冗余账号,直接删除,一些随着应用程序创建的账号,程序卸载之后还存在的,我们也可以手动删除。删除的命令是userdel +账户名,或者userdel -r +账户名,连同账户的宿主目录一起删除。
对于无法确定是否需要删除的账户,可以暂时将其锁定(passwd,usermod命令都可以锁定和解锁账号)。我们以账号shi为例。
[root@localhost ~]# passwd -l shi
锁定用户 shi 的密码 。
passwd: 操作成功
[root@localhost ~]# passwd -u shi
解锁用户 shi 的密码。
passwd: 操作成功
[root@localhost ~]# usermod -L shi 锁定用户账号
[root@localhost ~]# usermod -U shi 解锁用户账号
[root@localhost ~]# chattr +i /etc/passwd /etc/shadow 锁定文件
[root@localhost ~]# lsattr /etc/passwd /etc/shadow
----i----------- /etc/passwd
----i----------- /etc/shadow
[root@localhost ~]# chattr -i /etc/passwd /etc/shadow 解锁文件
[root@localhost ~]# lsattr /etc/passwd /etc/shadow 查看文件状态
---------------- /etc/passwd
---------------- /etc/shadow
[root@localhost ~]#
在/etc/passwd 和/etc/shadow文件被锁定后,我们就无法创建新账户,也不能改密码、登录shell、更改宿主目录等属性。
在现有的网络环境中,我们为了降低密码被破解的风险,用户应该养成定期更改密码的习惯,往往我们都是一直在长期使用一个密码,这时候管理员可以在服务器端限制用户密码的最大有效天数,对于密码已经过期的用户,登录时要求重新设置密码,否则不能登录。
[root@localhost ~]# vi /etc/login.defs 适用于新建的用户
chage -M 30 shi //30是密码有效期为30天,shi是账户名
chage -d 0 shi //强制要求用户下次登录时修改密码
shell环境给我们带来了极大的便利,但是也会带来一定的风险。我们通过命令进行的一系列操作会被记录在该用户的命令历史文件中,只要获得用户的命令历史文件,用户的操作记录将会被一览无余,尤其是在有输入明文的密码的情况下,所以我们针对这种情况,可以对历史命令的记录进行设置。
vi /etc/profile //编辑配置文件,适用于新登录用户
export HISTSIZE=100 //设置记录历史文件为100条,适用于当前用户
我们还可以通过修改用户宿主目录中的 ~/.bash_logout文件,当用户退出登录的bash环境,自动清空历史命令。
vi ~/.bash_logout
bash终端环境中,可以设置一个闲置超时时间,当超过指定时间没有任何输入时即自动注销终端,这样可以有效避免当管理员不在时其他人员对服务器的误操作风险。闲置时间有变量TMOUT来控制,默认单位为秒
[root@localhost ~]# vi /etc/profile
将export TMOUT=600写进去 闲置600s后自动注销,适用于新登录用户
[root@localhost ~]#export TMOUT=600 适用于当前用户
在Linux系统中,我们常用的切换用户的方法就是su命令与sudo命令,su命令主要用于切换用户,sudo命令用来提升权限。
比如我们自己平时使用的是个人账户,我们需要切换到root账户我们就会使用su -root
选项“-”等同于“–login”或“-l”,表示切换用户后进入目标用户登录的shell环境,没有“-”就仅代表切换用户,不切换用户的shell环境。
有了su命令之后,任何用户都可以使用,从而不断尝试输入其他账户的密码,给账户的安全性带来风险,这时候我们就可以借助pam_wheel模块来只允许少数用户使用su命令切换。
[root@localhost ~]# gpasswd -a shi wheel 将用户shi加入wheel组中
正在将用户“shi”加入到“wheel”组中
[root@localhost ~]# grep wheel /etc/group 查看wheel组内的成员
wheel:x:10:shi
[root@localhost ~]# vi /etc/pam.d/su 修改配置文件,启用pam_wheel认证
我们在用账户进行一些操作的时候会需要用到root管理员的权限,如果将root密码告诉所有人就会增加安全风险,所以我们可以让普通用户拥有一部分的管理权限,这样就可以在不将密码告诉他的情况下,实现操作。
配置文件/etc/sudoers中,授权记录的基本配置格式如下
user MACHINE=COMMANDS
授权配置主要包括用户、主机、命令三个部分。
对于获得授权的账户,通过sudo的方式执行特权命令时,只要将正常的命令行作为sudo命令的参数即可,而普通用户执行时需要使用绝对路径。
验证了普通用户的密码后即可使用此命令。
PAM(Pluggable Authentication Modules )可插拔式认证模块,其中一项重要的功能就是为了加强su命令的使用控制,可以借助于PAM认证模块,只允许极个别用户使用su命令进行切换。
[root@localhost ~]# ls /etc/pam.d |grep su 查看su是否支持认证模块
ksu
su
sudo
sudo-i
su-l
[root@localhost ~]#
我们通过查看su的PAM配置文件来看其构成
这其中的每一行都是一个独立的认证过程。
每一行都可以区分为三个字段,分别是认证类型、控制类型、PAM模块及其参数。
我们通过对GRUB增加密码的实操来演示
[root@localhost ~]#cp /boot/grub2/grub.cfg/boot/grub2/grub.cfg.bak 备份grub.cfg文件
[root@localhost ~]# cp /etc/grub.d/00_header/etc/grub.d/00_header.bak 备份00_header文件
[root@localhost ~]# grub2-mkpasswd-pbkdf2 为GRUB菜单设置密码
输入口令:
Reenter password:
PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.50150F498F079722B049C13F6A1D5480C28C500B6F786876045073D01FC313E89F24BF49F402F8E6A701040DB21000A810449E6B82C2F1DB2A92D689EDEF34D4.B7EE31A0A1C0FCA491E8AFAD4B9FD771C7E5616B6E94E20EE94B45E7955C4734225EE9A9F668BC708B47414204C51DA3793A34704D9C942566F25B44B45184BF 生成的加密字符串
[root@localhost ~]# vim /etc/grub.d/00_header 进入修改配置文件,并将以下代码写入配置文件,写入的密码字符串从上面复制
cat << EOF
set superusers="root"
passwd_pbkdf2 root grub.pbkdf2.sha512.10000.50150F498F079722B049C13F6A1D5480C28C500B6F786876045073D01FC313E89F24BF49F402F8E6A701040DB21000A810449E6B82C2F1DB2A92D689EDEF34D4.B7EE31A0A1C0FCA491E8AFAD4B9FD771C7E5616B6E94E20EE94B45E7955C4734225EE9A9F668BC708B47414204C51DA3793A34704D9C942566F25B44B45184BF
[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg 新生成一个grub.cfg 文件,并覆盖原文件
[root@localhost ~]# init 6 重启
一般我们设置的账户密码为了方便都会设置的尽可能的简单好记,但是这种简单的密码给服务器带来了较大的风险,所以管理员要即使找出这些弱口令的账户,这就用到了我接下来使用的一款工具——John the Ripper,简称为JR。
将源码包用x-ftp放到/opt目录下
tar zxf john-1.8.0.tar.gz解压缩
cd john-1.8.0 ##进目录下查看src
cd src
make clean linux-x86-64 ##make编译,编译完成会生成一个名为john的可执行程序
cp /etc/shadow /root/shadow.txt ##准备待破解的密码文件
useradd新建一个账户并设置密码
./john /root/shadow.txt ##执行暴力破解
./john --show /root/shadow.txt ##查看已破解的账户列表
NMAP定期扫描可以找出网络不可控的应用服务,及时关闭不安全的服务,减小风险。我们在公司里用到的都是厂商的正版扫描工具, 我是以此工具为演示。
nmap的扫描程序位于/usr/bin/nmap目录下,基本命令格式为
nmap 【扫描类型】 【选项】 <扫描目标>