一、 账号安全控制
用户账号是计算机使用者的身份和标识,每一个想要访问系统资源的人都需要通过其用户账号才能进入计算机。在Linux系统中,提供了多种机制来确保账户的正当、安全的使用。
1.1 账号基本安全措施
1.1.1 系统账号清理
在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 解锁用户账号
- 锁定账号文件passwd,shadow
如果服务器中的用户账号已经固定,不再进行更改,还可以采取锁定账号配置文件的方法。chattr命令,分别结合“+i”“-i”选项来锁定、解锁文件,使用lsattr命令可以查看文件锁定情况。
[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、更改宿主目录等属性。
1.1.2 密码安全控制
在现有的网络环境中,我们为了降低密码被破解的风险,用户应该养成定期更改密码的习惯,往往我们都是一直在长期使用一个密码,这时候管理员可以在服务器端限制用户密码的最大有效天数,对于密码已经过期的用户,登录时要求重新设置密码,否则不能登录。
[root@localhost ~]# vi /etc/login.defs 适用于新建的用户
对于已经存在的用户,我们可以使用chage命令
chage -M 30 shi //30是密码有效期为30天,shi是账户名
chage -d 0 shi //强制要求用户下次登录时修改密码
1.1.3 命令历史、自动注销
shell环境给我们带来了极大的便利,但是也会带来一定的风险。我们通过命令进行的一系列操作会被记录在该用户的命令历史文件中,只要获得用户的命令历史文件,用户的操作记录将会被一览无余,尤其是在有输入明文的密码的情况下,所以我们针对这种情况,可以对历史命令的记录进行设置。
- 命令历史
bash终端环境中,历史命令的记录条数由变量HISTSIZE控制,默认为1000条。通过修改/etc/profile文件中的HISTSIZE变量值,可以影响系统中 的所有用户
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 适用于当前用户
1.2 用户切换与提权
在Linux系统中,我们常用的切换用户的方法就是su命令与sudo命令,su命令主要用于切换用户,sudo命令用来提升权限。
1.2.1 su命令——切换用户
比如我们自己平时使用的是个人账户,我们需要切换到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认证
1.1.2 sudo命令——提升权限
我们在用账户进行一些操作的时候会需要用到root管理员的权限,如果将root密码告诉所有人就会增加安全风险,所以我们可以让普通用户拥有一部分的管理权限,这样就可以在不将密码告诉他的情况下,实现操作。
1)在配置文件/etc/sudoers中添加授权
配置文件/etc/sudoers中,授权记录的基本配置格式如下
user MACHINE=COMMANDS
授权配置主要包括用户、主机、命令三个部分。
- 用户(user):授权的用户名,或采用“%组合”的形式(授权一个组的所有用户)。
- 主机(MACHINE):使用此配置文件的主机名,主要是方便在多个主机之间共用一份sudoers文件,一般设置为localhost或实际的主机名。
- 命令(COMMANDS):允许授权的用户通过“sudo”命令执行的特权命令,需要填写命令程序的绝对路径,多个命令之间以“,”分隔。
特点
- 每一行对应一个用户或组的sudo配置
- 当用户相同授权较多或授权命令较多时,可以集中采取定义的别名(必须大写)
- sudo配置记录的命令部分允许使用通配符“*”、取反符号“!”
2)通过sudo获得特权命令
对于获得授权的账户,通过sudo的方式执行特权命令时,只要将正常的命令行作为sudo命令的参数即可,而普通用户执行时需要使用绝对路径。
验证了普通用户的密码后即可使用此命令。
二、 PAM安全认证
PAM(Pluggable Authentication Modules )可插拔式认证模块,其中一项重要的功能就是为了加强su命令的使用控制,可以借助于PAM认证模块,只允许极个别用户使用su命令进行切换。
2.1 PAM的作用
- PAM目前是Linux服务器普遍使用的认证方式。
- PAM提供了对所有服务进行认证的中央机制,适用于login,远程登录(telnet,rlogin,fsh,ftp),su等应用程序系统
- 管理员通过PAM配置文件来制定不同应用程序的不同认证策略。
2.2 PAM认证原理
- PAM认证一般遵循的顺序:service(服务)——PAM(配置文件)——pam_*.so
- PAM认证首先要确定哪一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib/security下)进行安全认证。
- 用户访问服务器的时候,服务器某一个服务程序把用户的请求发送到PAM模块进行认证,不用的应用程序对应的PAM模块也是不同的。
[root@localhost ~]# ls /etc/pam.d |grep su 查看su是否支持认证模块
ksu
su
sudo
sudo-i
su-l
[root@localhost ~]#
2.3 PAM认证的构成
我们通过查看su的PAM配置文件来看其构成
这其中的每一行都是一个独立的认证过程。
每一行都可以区分为三个字段,分别是认证类型、控制类型、PAM模块及其参数。
2.4 PAM认证类型
- 认证管理
接受用户名和密码,进而对该用户的密码进行认证 - 账户管理
检查用户是否被允许登录系统,账号是否过期,登录的时间段是否有限制。 - 密码管理
主要用来修改密码 - 会话管理
提供对会话的管理和记账
2.5 PAM控制类型
三、 系统引导与登录控制
3.1 调整BIOS引导设置
- 将第一引导设备设为当前系统所在硬盘
- 禁止从其他设备(光盘,U盘,网络)引导系统
- 将安全级别设为setup,并设置管理员密码,防止未授权的修改
3.2 限制更改GRUB引导参数
我们通过对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 重启
3.3 终端及登录控制
- 禁止root用户登录
- 禁止普通用户登录
我们只要用“touch /etc/nologin”命令新建一个文件即可,一般用于做维护的时候,禁止其他用户登录,只允许root账户登录。要取消的话只要删除这个文件即可“rm -rf /etc/nologin”
四、 弱口令检测、端口扫描
4.1 弱口令检测——John the Ripper
一般我们设置的账户密码为了方便都会设置的尽可能的简单好记,但是这种简单的密码给服务器带来了较大的风险,所以管理员要即使找出这些弱口令的账户,这就用到了我接下来使用的一款工具——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 ##查看已破解的账户列表
4.2 网络扫描——NMAP
NMAP定期扫描可以找出网络不可控的应用服务,及时关闭不安全的服务,减小风险。我们在公司里用到的都是厂商的正版扫描工具, 我是以此工具为演示。
nmap的扫描程序位于/usr/bin/nmap目录下,基本命令格式为
nmap 【扫描类型】 【选项】 <扫描目标>
常见的几种扫描方式
- 扫描常用的TCP端口
- 扫描常用的UDP端口