# 系列文章目录
提示:仅用于个人学习,进行查漏补缺使用。
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
本章大概内容有:
账号安全控制 usermod passwd、系统引导和登录控制、PAM安全认证、sudo命令、弱口令检测、JR、端口扫描、NMAP命令、补充、netstat命令等等
提示:以下是本篇文章正文内容,下面案例可供参考
一、账号安全控制
- 账号安全基本措施
- 将非登录用户的Shell设为/sbin/nologin【禁止用户登录】
shell
usermod -s /sbin/nologin 用户名
- 锁定长期不使用的账号
shell
usermod -L 用户名
passwd -l 用户名
passwd -S 用户名
- 删除无用的账号【定期清理、手动删除】
shell
userdel [-r] 用户名
/etc/shadow ###例如:手动删除修改【慎用】
- 锁定账号文件passwd、shadow
shell
chattr +i /etc/passwd /etc/shadow ###锁定文件并查看状态
lsattr /etc/passwd /etc/shadow ###查看文件锁定状态
chattr -i /etc/passwd /etc/shadow ###解锁文件
- 小结
- 账号安全:
- 缩小权限集合
- 密码更换周期缩短 root wheel
- 账号注销时间
- 账号安全:
二、系统引导和登录控制
- 密码安全控制
- 设置密码有效期
- 要求用户下次登录时修改密码
shell
vi /etc/login.defs ###修改密码配置文件,适用于新建用户
......
chage -M 30 lisi
cat /etc/shadow | grep lisi
- 命令 历史限制
- 减少记录的命令条数
- 登录时自动清空命令历史
shell
vi /etc/profile ###设置系统上所有用户的shell环境变量
export HISTSIZE=200 ###设置历史记录中保存的命令行数量是200
source /etc/profile
###使得`/etc/profile`文件中定义的环境变量对当前shell生效。
###实际上是在当前shell会话中重新加载配置文件。
vi ~/.bashrc ###打开用户家目录下的`.bashrc`文件修改shell配置
echo "" >~/.bash_history ###清空用户的家目录下的`.bash_history`文件
- 终端自动注销
- 闲置600秒自动注销
shell
vi /etc/profile ###设置系统上所有用户的shell环境变量
......
export TMOUT=600 ###设置bash shell的超时时间为600秒,即10分钟
source /etc/profile ###重新加载配置文件
ps:若设置了6秒自动注销怎么办?
1.复制/etc/profile覆盖
2.脚本
- 使用SU命令切换用户
- 用途 及用法
- 用途: Substitute User 切换用户
- 格式: su -目标用户
- 密码验证
- root->任意用户,不验证密码
- 普通用户->其他用户,验证目标用户的密码
- 限制使用su命令的用户
- 将允许使用su命令的用户加入wheel组
- 启用pam_wheel认证模块 【PAM:系统相关的认证权限管理,Linux系统中较为全面的安全管理的程序】
- 用途 及用法
shell
pgasswd -a tsengyia wheel ###将用户`tsengyia`添加到名为`wheel`的用户组中。
tsengyia
正在将用户"tsengyia" 加入到"wheel"组中
vi /etc/pam.d/su
#%PAM-1.0
......
-
Linux中的PAM安全认证
- su命令的安全隐患
- 默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户(如root)的登录密码,带来安全风险
- 为了加强su命令的使用控制,可借助于PAM认证模块,只允许极个别用户使用su命令进行切换
- PAM(Pluggable Authentication Moudules)可插拔认证模块
- 是一种高效而且灵活便利的用户级别的认证方式
- 也是当前Linux服务器普遍使用的认证方式
- su命令的安全隐患
-
PAM认证原理
- 一般遵循的顺序
- Service(服务)->PAM(配置文件)->pam*.so_
- 首先要确定哪一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib64/security下)进行安全认证
- 用户访问服务器时,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证
- 不同的应用程序所对应的PAM模块是不同的
- 一般遵循的顺序
-
PAM认证的构成
- 查看某个程序是否支持PAM模块认证
shell
ls /etc/pam.d | grep su
- 查看su的PAM配置文件: cat /etc/pam.d/su
- 每一行都是一个独立的认证过程
- 每一行可以区分为三个字段
- 认证类型
- 控制类型
- PAM模块及其参数
- PAM安全认证流程
- 控制类型也称做Control Flags,用于PAM验证类型的返回结果
- 服务启动 :服务启动时,会调用PAM进行用户认证。
- 加载PAM模块 :PAM加载负责认证的模块。
- 用户认证 :认证模块要求用户提供凭证(如密码)。
- 验证凭证 :认证模块检查提供的凭证是否有效。
- 继续或失败 :如果凭证有效,PAM继续调用下一个模块;如果无效,认证失败。
- 会话管理:所有认证模块执行完毕后,PAM管理会话,服务根据认证结果继续或拒绝操作。
- 控制类型也称做Control Flags,用于PAM验证类型的返回结果
- 使用sudo机制提升权限
- su命令的缺点(安全,历史命令等等)
- sudo命令的用途及用法
- 用途:授权普通用户、记录审计、控制权限等等。
- 配置sudo授权
- visudo或者 vi /etc/sudoers
- 记录格式
shell
visudo
.......
- 查看sudo操作记录
- 需启用Defaults logfile 配置
- 默认日志文件: /var/log/sudo
shell
visudo
Defaults logfile = "/var/log/sudo"
tail /var/log/sudo
.....
-
查看授权的sudo操作
- sudo -l
-
终端登录安全控制
- 安全终端配置: /etc/securetty
- 禁止普通用户登录
- 建立/etc/noglogin文件
- 删除nologin文件或重启后即恢复正常
shell
touch /etc/nologin
rm -rf /etc/nologin
三、弱口令检测
- Joth the Ripper,简称为 JR
- 一款密码分析工具,支持字典式的暴力破解
- 通过对shadow文件的口令分析,可以检测密码强度
- 官方网站:http://www.openwall.com/john/
四、端口扫描
- 网络端口扫描
- NMAP
- 一款强大的网络扫描、安全检测工具,支持 ping 扫描、多端口检测等多种技术。
- 官方网站:http://nmap.org/
- CentOS 7.3光盘中安装包 nmap-6.40-7.el7.x86_64.rpm
- 安装
- NMAP
shell
rpm -qa | grep nmap
yum install -y nmap
- NMAP的扫描
shell
nmap [扫描类型] 【选项】 《》
- 示例
- -sS、-sT、-sF、-sU、-sP、-P0
- 分别查看本机开放的TCP端口、UDP端口
shell
nmap -sT 127.0.0.1
nmap -sU 127.0.0.1
- **检测192.168.4.0/24网段有哪些主机提供FTP服务**
shell
nmap -p 21 192.168.4.0/24
- **检测192.168.4.0/24网段有哪些存活主机**
shell
nmap -n -sP 192.168.4.0/24
- nmap命令常用的选项和扫描类型
选项 | 描述 |
---|---|
-p |
指定要扫描的端口。例如:nmap -p 22,80,443 target 。 |
-n |
禁用反向DNS解析,以加快扫描速度。 |
-sS |
TCP的SYN扫描(半开扫描),只向目标发送SYN数据包。 |
-sT |
TCP连接扫描,建立完整的TCP连接。 |
-sF |
TCP的FIN扫描,开放的端口会忽略这种数据包。 |
-sU |
UDP扫描,用于探测目标主机提供的UDP服务。 |
-sP |
ICMP扫描,快速判断目标主机是否存活,不进行其他扫描。 |
-P0 |
跳过ping检测,认为所有目标主机都是存活的。 |
ps: 这些选项可以单独使用,也可以组合使用,以适应不同的扫描需求。 例如,nmap -p 80,443 -sS target
将执行针对目标主机的80和443端口的SYN扫描。
五、补充
- netstat命令
- 概述
- 用来显示各种网络相关信息,如网络连接、路由表、接口统计等。
- 常用选项
- 概述
选项 | 描述 |
---|---|
--all 或 -a |
显示所有活动和非活动的连接。 |
--numeric 或 -n |
直接使用数字地址和端口号,不进行域名解析。 |
--listening 或 -l |
只显示监听中的服务(监听的套接字)。 |
--route 或 -r |
显示路由表。 |
--interfaces 或 -i |
显示网络接口信息。 |
--programs 或 -p |
显示与网络连接相关的程序名称。 |
--timers 或 -o |
显示超时信息。 |
--extend 或 -e |
显示额外的网络统计信息。 |
--statistice 或 -s |
显示协议统计信息。 |
- 输出列
列标题 | 描述 |
---|---|
Proto |
网络协议类型,如TCP、UDP、ICMP等。 |
Recv-Q |
接收队列的大小,表示尚未被应用程序读取的数据包数量。 |
Send-Q |
发送队列的大小,表示尚未被网络层发送的数据包数量。 |
Local Address |
本地的IP地址和端口号。 |
Foreign Address |
远程的IP地址和端口号。 |
State |
连接的状态,如ESTABLISHED(已建立)、SYN_SENT(SYN已发送)、TIME_WAIT(等待时间)等。 |
User |
拥有该连接的用户。 |
PID/Program Name |
对应连接的进程ID和进程名称。 |
- 示例
- netstat -a 显示所有连接
- netstat -l 显示监听中的服务
- netstat -r 显示路由表
- netstat -s | grep TCP 显示TCP连接状态统计
- netstat -i 显示所有网络接口信息