一,账号安全控制
1. 基本安全措施
(1)系统账号清理
- 检查系统账户:系统账户通常记录在
/etc/passwd
和/etc/shadow
文件中。可以使用命令如awk -F: '($7!="/sbin/nologin" && $7!="/bin/false") {print $1}' /etc/passwd
来列出所有可登录的账户。 - 识别未使用账户:检查日志文件(如
lastlog
)来发现长时间未登录的账户。使用命令lastlog -b 365
查看一年内未登录的用户。 - 删除账户:使用
userdel
命令彻底删除账户。例如,移除账户及其家目录:
sudo userdel -r unnecessary_user
(2)密码安全控制
- 设置密码策略:编辑
/etc/login.defs
文件,可以设置密码最小长度、最大年龄、最小年龄、警告期限等。例如:
PASS_MAX_DAYS 90 # 密码最大使用天数
PASS_MIN_DAYS 7 # 密码最小使用天数
PASS_MIN_LEN 8 # 密码最小长度
- 强制密码复杂度:使用
pam_cracklib.so
模块在/etc/pam.d/common-password
中设置密码复杂度规则,例如:
password requisite pam_cracklib.so retry=3 minlen=10 difok=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
(3)命令历史与自动注销
- 命令历史记录:在用户的
.bashrc
或.bash_profile
文件中设置历史记录的大小和持久化。例如:
HISTSIZE=10000
HISTFILESIZE=20000
PROMPT_COMMAND='history -a' # 实时保存历史记录
- 自动注销:在用户的
.bash_profile
或.bashrc
中设置TMOUT
变量来自动注销不活跃的会话,如:
export TMOUT=300 # 5分钟后自动注销
2. 用户切换与提权
(1)su
命令——切换用户
- 切换到指定用户:不带
-
或-l
选项,仅切换用户身份而不重置环境变量:
su other_user
- 完全切换环境:使用
-
或-l
选项以目标用户的完整环境执行命令:
su - root
(2)sudo
命令——提升执行权限
- 基本使用:允许特定用户或组以root权限执行命令,需预先配置
/etc/sudoers
文件。例如,允许用户执行重启命令:
sudo systemctl restart service_name
- sudoers配置:使用
visudo
命令安全编辑/etc/sudoers
文件,避免语法错误导致系统无法使用sudo。示例配置:
# 允许admin组成员无需密码执行所有命令
%admin ALL=(ALL) NOPASSWD:ALL
# 用户jane可以无密码执行apt-get update
jane ALL=NOPASSWD:/usr/bin/apt-get update
二,系统引导和登录控制
1:开机安全控制
(1):调整BIOS引导设置
(1)将第一优先引导设备(First Boot Device)设为当前系统所在磁盘。
(2)禁止从其他设备(如光盘、U盘、网络等)引导系统,对应的项设为“Disabled”
(3)将 BIOS的安全级别改为“setup”,并设置好管理密码,以防止未授权的修改。
(2)限制更改GRUB引导参数
- 编辑GRUB配置文件:以管理员权限编辑
/etc/default/grub
文件。- 为了限制GRUB编辑,可以注释掉或删除
GRUB_TERMINAL=console
和GRUB_TERMINAL_INPUT=console
行,仅允许通过图形界面修改。 - 添加
GRUB_DISABLE_OS_PROBER=true
可以阻止自动检测其他操作系统,减少引导菜单被篡改的风险。
- 为了限制GRUB编辑,可以注释掉或删除
- 加密GRUB:使用命令
grub-mkpasswd-pbkdf2
生成加密密码,并将输出添加到GRUB配置中。例如,在/etc/grub.d/40_custom
或/etc/grub.d/00_header
文件末尾添加:
set superusers="root"
password_pbkdf2 root <your_generated_hash>
- 更新GRUB:执行
sudo update-grub
命令应用改动,确保更改生效。
2. 终端及登录控制
(1)禁止root用户登录
- SSH服务:编辑
/etc/ssh/sshd_config
文件,找到或添加PermitRootLogin no
行,并确保该行未被注释,之后重启SSH服务:
sudo systemctl restart ssh
- TTY登录:在PAM配置文件
/etc/pam.d/login
中添加以下行,以阻止root直接登录TTY:
auth required pam_wheel.so use_uid
并且确保root用户不是/etc/group
文件中wheel
组的成员。
(2)禁止普通用户登录
- SSH服务:如果希望阻止特定普通用户通过SSH登录,可以在
/etc/ssh/sshd_config
中使用DenyUsers
指令,如:
DenyUsers user1 user2
- TTY登录:通过编辑
/etc/pam.d/common-session
或相应的PAM配置文件,利用PAM的account
模块,例如使用pam_listfile.so
:
account required pam_listfile.so item=user sense=deny file=/etc/nologin.users onerr=fail
创建文件/etc/nologin.users
,列出不允许登录的用户名,每行一个用户名。
三,弱口令检测,端口扫描
1:弱口令检测——John the Ripper
1. 下载并安装John the Ripper
在云环境或Linux服务器上安装John the Ripper,通常涉及以下步骤:
-
使用包管理器安装:对于大多数Linux发行版,可以使用系统自带的包管理器进行安装。例如:
- Ubuntu/Debian:
sudo apt-get update
sudo apt-get install john
- CentOS/RHEL:
sudo yum install john
# 对于CentOS 8+/RHEL 8+ 使用DNF
sudo dnf install john
- 手动编译安装:如果需要最新版本或特定功能,可以访问John the Ripper官网下载源代码,并按提供的安装指南进行编译安装。
2. 检测弱口令账号
- 导出哈希值:首先,需要从系统中导出用户密码的哈希值。在大多数Linux系统中,这些哈希值存储在
/etc/shadow
文件中,但直接访问该文件通常需要root权限。 - 破解哈希值:使用John the Ripper对导出的哈希值进行破解。假设已将哈希值保存至
hashes.txt
,运行命令如下:
john hashes.txt
3. 使用密码字典文件
- 选择字典:选择或创建一个密码字典文件,字典应该包含可能的密码组合。高质量的字典可以大大提高破解效率。
- 指定字典路径:通过
--wordlist
选项指定字典文件路径,例如:
john --wordlist=/path/to/your/dictionary.txt hashes.txt
- 利用规则增强破解:John支持使用规则来修改字典中的单词,生成更多密码变体。启用规则,可以这样做:
john --wordlist=/path/to/your/dictionary.txt --rules hashes.txt
2:网络扫描——NMAP
(1)安装NMAP软件包
在Linux系统中安装Nmap,通常使用包管理器进行安装:
- Debian/Ubuntu:
sudo apt-get update
sudo apt-get install nmap
- CentOS/RHEL
sudo yum install nmap
# 对于CentOS 8+/RHEL 8+ 使用DNF
sudo dnf install nmap
- Fedora:
sudo dnf install nmap
(2)扫描语法及类型
Nmap提供了丰富的命令行选项,以下是一些基础语法和扫描类型:
- 基本扫描:扫描目标主机是否在线。
nmap target
- 端口扫描类型:
- 快速扫描 (-F): 快速扫描最常见的100个端口。
nmap -F target
- 全端口扫描 (-p-): 扫描所有65535个端口。
nmap -p- target
- 指定端口扫描 (-p PORT[,PORT]...): 扫描指定的端口或端口范围。
nmap -p 22,80,443 target
- 高级扫描选项:
- 服务和版本检测 (-sV): 探测开放端口上运行的服务及版本信息。
nmap -sV target
- 操作系统检测 (-O): 尝试识别目标主机的操作系统。
nmap -O target
- 扫描技术:
- TCP SYN扫描 (-sS): 半开放扫描,隐蔽且快速。
nmap -sS target
- **TCP Connect扫描 (-sT)**: 标准的三次握手,容易被防火墙记录。
nmap -sT target
- **ACK扫描 (-sA)**: 测试防火墙规则和隐身扫描。
- **UDP扫描 (-sU)**: 扫描UDP端口。
(3)扫描操作示例
- 扫描本地网络寻找存活主机:
nmap -sn 192.168.1.0/24
- 扫描指定IP,探测开放服务及其版本:
nmap -v -sV 192.168.1.10
- 扫描整个子网,同时检测操作系统:
nmap -p- -A 192.168.1.0/24