将非登录用户的Shell设为/sbin/nologin
禁止非登录用户通过Shell访问系统
usermod -s /sbin/nologin 用户名
锁定长期不使用的账号
对长期不活跃的账号进行锁定,避免潜在的安全风险。
usermod -L 用户名 # 锁定用户
passwd -l 用户名 # 锁定密码
passwd -S 用户名 # 查看账号状态
删除无用的账号
清理无用的账号,保持系统用户列表的简洁和安全。
userdel [-r] 用户名 # 使用-r选项同时删除用户的主目录
锁定账号文件passwd、 shadow
锁定关键系统文件以防止未授权的更改。
chattr +i /etc/passwd /etc/shadow # 锁定文件
lsattr /etc/passwd /etc/shadow # 查看文件属性
chattr -i /etc/passwd /etc/shadow # 解锁文件
设置密码有效期
强制用户定期更新密码,提升密码的安全性。
新建用户: 修改全局密码策略,适用于所有新建用户。
[root@localhost ~]# vi /etc/login.defs # 修改配置文件
PASS_MAX_DAYS 30 # 密码有效期为30天
已有用户: 针对特定用户设置密码有效期。
[root@localhost ~]# chage -M 30 lisi
# 设置用户lisi密码有效期为30天
[root@localhost ~]# cat /etc/shadow | grep lisi
# 查看用户lisi的密码信息
要求用户下次登录时修改密码
强制用户在下次登录时更新密码,提升安全性。
[root@localhost ~]# chage -d 0 zhangsan
# 将用户zhangsan的密码修改日期设置为0
[root@localhost ~]# cat /etc/shadow | grep zhangsan
# 验证更改
减少记录的命令条数
限制历史命令记录数量,减少敏感信息的暴露。
[root@localhost ~]# vi /etc/profile
export HISTSIZE=200 # 设置历史记录条数为200
[root@localhost ~]# source /etc/profile # 使更改生效
登录时自动清空历史
在每次登录时自动清空命令历史记录,防止命令泄露。
[root@localhost ~]# vi ~/.bashrc
##在文件中插入:输入空字符覆盖文件实现清空
echo "" > ~/.bash_history
闲置600秒后自动注销
设置终端闲置600秒后自动注销,防止长时间未操作的会话被利用。
[root@localhost ~]# vi /etc/profile
export TMOUT=600 # 设置超时时间为600秒
[root@localhost ~]# source /etc/profile # 使更改生效
注销时间设置太短导致无法输入命令
解决办法:在另一台机器上使用scp命令,将本机正常机器profile传输覆盖到故障机器的同名文件。
scp /etc/progile [email protected]:/etc/profile
误删了profile文件,除最基础命令外其余命令都无法使用
解决办法:同样方式,复制使用另一台机器的文件,在本机操作,拷贝正常机器的profile文件到本机再source。
scp /etc/progile [email protected]:/etc/profile
用途
su是Substitute User的缩写,用于切换用户身份
格式
su - 目标用户 # 使用目标用户的登录shell环境
密码验证
##带-选项表示将使用目标用户的登录shell环境
[test@localhost ~]# su - root # 切换到root用户
[root@localhost ~]# whoami
root # 验证当前用户为root、
将允许使用su命令的用户加入wheel组
仅允许wheel组内的用户使用su命令切换到其他用户。
启用pam_wheel认证模块(PAM系统相关的认证权限管理)
通过PAM模块控制su命令的使用权限
[root@localhost ~]# vi /etc/pam.d/su
#%PAM-1.0
auth sufficient pam_rootok.so # 如果是root用户,直接通过
auth required pam_wheel.so use_uid # 仅允许wheel组成员使用su
查看su操作记录
su命令的操作记录保存在安全日志文件/var/log/secure中。
安全隐患
默认情况下,任何用户都允许使用 su 命令
其他用户有机会反复尝试其他用户(如root) 的登录密码,带来安全风险
解决办法
使用 PAM 认证模块限制 su 命令的使用
为了加强 su 命令的使用控制,借助于PAM认证模块,只允许极个别用户使用 su 命令切换用户身份,减少安全风险
认证流程
流程大致为:
Service(服务)→PAM(配置文件)→pam_*.so
PAM模块的认证流程一般遵循以下步骤顺序:
用户访问服务器时,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证,不同的应用程序所对应不同的PAM模块。
查看某个程序是否支持PAM认证,可以用ls命令
ls /etc/pam.d | grep su # 检查 su 是否支持 PAM 认证
查看su的PAM配置文件
可以通过查看 /etc/pam.d/su
文件了解具体的 PAM 认证过程。文件中的每一行代表一个独立的认证过程,通常分为以下三个字段:
控制类型(Control Flags)
用于指定PAM验证模块的返回结果出来方式:
root
用户。required
,但如果此模块失败,认证过程立即停止并返回失败信息。/etc/pam.d/system-auth
来处理系统认证。/lib64/security/
目录下,如果在其他路径,需要提供绝对路径。required
标记的模块都必须成功,否则认证失败。但错误信息会在所有此类型模块执行完成后返回。以下是 PAM 认证过程中,使用不同控制标记对用户进行身份验证的示例:
模块类型 | 控制标记 | 模块 | 用户1 | 用户2 | 用户3 | 用户4 |
---|---|---|---|---|---|---|
auth | required | 模块1 | pass | fail | pass | pass |
auth | substack | 模块2 | pass | pass | fail | pass |
auth | required | 模块3 | pass | pass | pass | fail |
结果 | pass | fail | pass | pass |
在上表中,不同用户经过不同模块的认证后,最终结果为 pass
或 fail
,这取决于每个模块的认证结果和控制标记的作用。
用途
通过 sudo 以其他用户身份(如 root )执行授权的命令。
用法
sudo 授权命令 # 以指定身份执行命令
编辑 sudoers 文件
使用 visudo 命令或者 vi /etc/sudoers 修改 /etc/sudoers 文件。
修改后保存时,如果使用 vi,需要强制保存(:wq!)以避免权限问题。
语法格式
用户 主机名=命令程序列表
用户 主机名=(用户) 命令程序列表
字段解释
示例1
[root@localhost ~]# visudo
## 为wheel组成员设置权限,允许组内成员无需密码即可执行任何命令
%wheel ALL=NOPASSWD:ALL
## 为用户jerry授权,只允许在本地主机上使用ifconfig命令
jerry localhost=/sbin/ifconfig
## 为用户syrianer授权,允许其使用/sbin目录下的所有命令,
## 除了reboot和poweroff命令
syrianer localhost=/sbin/*,!/sbin/reboot,!/sbin/poweroff
## 定义命令别名
Cmnd_Alias PKGTOOLS=/bin/rpm,/usr/bin/yum
## 为用户mike授权,只允许使用定义的PKGTOOLS命令别名中的命令
mike localhost=PKGTOOLS
示例2
为特定用户设置 sudo 权限
## 允许用户 Tom 在所有主机上执行 ifconfig 命令
Tom ALL=/sbin/ifconfig
## 允许用户 Jerry 在 localhost 主机上执行 /sbin 目录下的所有命令,
## 但排除 reboot 和 poweroff 命令
Jerry localhost=/sbin/*,!/sbin/reboot,!/sbin/poweroff
为组设置 sudo 权限
## 允许 wheel 组的所有成员无需密码验证即可使用 sudo 执行任何命令
%wheel ALL=NOPASSWD: ALL
为特定用户设置 root 权限的命令
## 允许用户 Mike 以 root 身份执行 kill 和 killall 命令,且无需密码
Mike ALL=(root) NOPASSWD: /bin/kill, /usr/bin/killall
使用别名配置
为了简化管理,可以使用别名来定义用户、主机和命令,必须使用大写字母。
## 定义用户别名
User_Alias USERS=Tom,Jerry,Mike
## 定义主机别名
Host_Alias HOSTS=localhost,bogon
## 定义命令别名
Cmnd_Alias CMNDS=/sbin/ifconfig,/usr/sbin/useradd,/usr/sbin/userdel
## 为定义的用户组在指定主机上授权指定命令
USERS HOSTS=CMNDS
使用 sudo 执行命令
在配置完 sudo 权限后,用户可以使用 sudo 命令执行特权操作。例如:
## 使用 Tom 用户登录并配置网络接口
su - Tom
/sbin/ifconfig ens33:0 192.168.1.11/24
## 使用 sudo 执行 ifconfig 命令(需验证用户密码)
sudo /sbin/ifconfig ens33:0 192.168.1.11/24
## 查看当前用户的 sudo 权限
sudo -l
注意:初次使用 sudo 时,系统会提示用户输入密码。默认情况下,密码的验证结果会在 5 分钟内保持有效,期间执行的后续 sudo 命令无需再次输入密码。
启用 Defaults logfile 配置(启用 sudo 操作日志)
需要在 /etc/sudoers 文件中启用日志记录功能。
使用 visudo 命令来编辑 sudoers 文件,以避免语法错误。
[root@localhost ~]# visudo
## 配置日志文件路径(默认)
Defaults logfile = "/var/log/sudo"
启用日志配置后,所有使用 sudo 执行的命令都会被记录在指定的日志文件中。
[root@localhost ~]# tail /var/log/sudo
## 查看最近的sudo操作记录
## 2023年8月24日23:59:44,用户jerry以root身份执行了ifconfig命令
Aug 24 23:59:44 : jerry :TTY=pts/0; PWD=/home/jerry :USER=root; COMMAND=/sbin/ifconfig ens33:0 192.168.1.11/24
## 2023年8月25日00:00:46,用户syrianer以root身份执行了自定义命令list
Aug 25 00:00:46 syrianer :TTY=pts/1; PWD=/home/syriader; USER=root; COMMAND=list
查询授权的sudo操作
使用 sudo -l 命令来查看当前用户被授权执行的命令列表,以及在什么情况下可以使用这些命令。
示例:显示当前用户的所有 sudo 权限,包括可以执行的命令和是否需要密码等信息。
## 查询当前用户的sudo权限
[user@localhost ~]$ sudo -l
安全终端配置:/etc/securetty 文件
通过编辑 /etc/securetty 文件,可以指定允许 root 用户登录的终端设备。有助于增强系统安全性,防止未经授权的设备获取 root 权限。
[root@localhost ~]# vi /etc/securetty
## 允许 root 用户通过 tty1 和 tty2 终端登录
tty1
tty2
## 禁止通过 tty5 和 tty6 登录
#tty5
#tty6
建立/etc/nologin文件
删除nologin文件或重启后即恢复正常(限制解除)
## 创建 /etc/nologin 文件以禁止普通用户登录
[root@localhost ~]# touch /etc/nologin
## 删除 /etc/nologin 文件以取消登录限制
[root@localhost ~]# rm -rf /etc/nologin
在系统开机进入 GRUB 菜单时,按 e
键可以查看并修改 GRUB 引导参数。这对于服务器安全构成了一定的威胁。为了防止未经授权的修改,可以为 GRUB 菜单设置密码,只有提供正确的密码才允许更改引导参数。
首先,使用 grub2-mkpasswd-pbkdf2
命令生成加密密码:
grub2-mkpasswd-pbkdf2
根据提示设置密码,系统会生成一段类似如下的加密字符串:
PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.……
在继续之前,建议备份 GRUB 配置文件和相关文件,以防出现问题:
cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
cp /etc/grub.d/00_header /etc/grub.d/00_header.bak
编辑 /etc/grub.d/00_header
文件,添加用户和密码配置:
vim /etc/grub.d/00_header
## 在文件中添加以下内容
cat << EOF
set superusers="root" # 设置 GRUB 的超级用户,用户名为 root
password_pbkdf2 root grub.pbkdf2…… # 设置超级用户的密码(此处为加密后的密码字符串)
EOF
将上述代码中的 grub.pbkdf2……
替换为实际生成的加密字符串。
完成编辑后,生成新的 GRUB 配置文件以应用更改:
grub2-mkconfig -o /boot/grub2/grub.cfg
重新启动系统,进入 GRUB 菜单时,按 e
键尝试修改引导参数。此时,系统会要求输入配置的用户名和密码,才能进行进一步操作。
介绍
流程步骤
#解压工具包
cd /opt
tar zxf john-1.8.0.tar.gz
#安装软件编译工具
yum install -y gcc gcc-c++ make
#切换到src子目录
cd /opt/john-1.8.0/src
#进行编译安装
make clean linux-x86-64
#准备待破解的密码文件
cp /etc/shadow /opt/shadow.txt
#执行暴力破解
cd /opt/john-1.8.0/run
./john /opt/shadow.txt
#查看已破解出的账户列表
./john --show /opt/shadow.txt
#使用密码字典文件
> john.pot #清空已破解出的账户列表,以便重新分析
./john --wordlist=./password.lst /opt/shadow.txt #使用指定的字典文件进行破解
介绍
格式
nmap [扫描类型] [选项] <扫描目标...>
常用的扫描类型
示例
分别查看本机开放的TCP端口、UDP端口
nmap -sT 127.0.0.1 ## TCP连接扫描
nmap -sU 127.0.0.1 ## UDP扫描
检测192.168.4.0/24网段有哪些主机提供FTP服务
nmap -p 21 192.168.4.0/24
检测192.168.4.0/24网段有哪些存活主机
nmap -n -sP 192.168.4.0/24
nmap命令常用的选项和扫描类型