1. 账号安全基本措施
1.1 系统账号清理
(1)将非登录用户的 shell 设为/sbin/nologin:
- 命令行格式:
- usermod -s /sbin/nologin 用户名
(2)锁定长期不使用的账号:
- 命令行格式:
- 锁定账户①:usermod -L 用户名
- 锁定账户②:passwd -l 用户名
- 解锁账户①:usermod -U 用户名
- 解锁账户②:passwd -u 用户名
- 查看某一个用户密码的状态:passwd -S 用户名
(3)删除无用的账号
- 命令行格式:
- userdel [-r] 用户名
(4)锁定账号文件passwd、shadow
- 命令行格式:
- 锁定文件:chattr +i /etc/passwd /etc/shadow(在vi编辑器里只能读,不能写)
- 解锁文件:chattr -i /etc/passwd /etc/shadow
- 查看文件状态:lsattr -i /etc/passdw /etc/shadow
1.2 密码安全控制
- 设置密码有效期
- 要求用户下次登录时修改密码
1.3 命令历史限制
- history 可以查看到用户的历史命令。历史命令默认保存1000 条。保存在 用户家目录 的 .bash_history 隐藏文件中
- history -c 可以清空历史命令。但是,用户家目录下的 .bash_history 文件中依旧保存着历史命令
- !命令字 可以执行最近使用的该命令字开头的命令
- !编号 可以执行该编号的历史命令
- 减少记录的命令条数
- 登录时自动清空命令历史
echo "echo '' >~/.bash_history " >> ~/.bashrc
将 echo '' > ~/.bash_history 追加重定向写入 到 ~/.bashrc 文件中
echo '' > ~/.bash_history 表示 将空字符 覆盖重定向写入 到 ~/.bash_history 文件中
1.4 终端自动注销
- 闲置 600 秒后自动注销
2. 使用 su 命令切换用户
2.1 用途及用法
- 用途:Substitute User,切换用户
- 命令行格式:
- 带“-”选项表示将使用目标用户的登录Shell环境
2.2 密码验证
- root→任意用户,不验证密码
- 普通用户→其他用户,验证目标用户的密码
2.3 限制使用 su 命令的用户
- 将允许使用 su 命令的用户加入 wheel 组
- 启用 pam_wheel 认证模块
Tips:在/etc/pam.d/su 文件里设置禁止用户使用 su 命令:
vim /etc/pam.d/su
auth sufficient pam_rootok.so
......
#auth required pam_wheel.so use_uid
......
以上两行是默认状态(即开启第一行,注释第二行),这种状态下是允许所有用户间使用su命令进行切换的;
两行都注释,也就是运行所有用户都能使用 su 命令,但 root 下使用 su 切换到其他普通用户需要输入密码:即 root 用户能够直接通过认证而不用输入密码;
如果开启第二行,表示只有 root 用户和 wheel 组内的用户才能使用 su 命令;
如果注释第一行,开启第二行,表示只有 wheel 组内的用户才能使用 su 命令,root 用户也被禁用 su 命令。
2.4 查看 su 操作记录
- 安全日志文件:/var/log/secure
3. Linux 中的 PAM 安全认证
3.1 su 命令的安全隐患
- 默认情况下,任何用户都允许使用 su 命令。这将有机会反复尝试其他用户的登陆密码,从而带来安全风险;
- 为了加强 su 命令的使用控制,可借助于 PAM 认证模块,只允许极个别用户使用 su 命令进行切换。
3.2 PAM(Pluggable Authentication Modules)可插拔式认证模块
- 是一种高效而且灵活便利的用户级别的认证方式;
- 也是当前 Linux 服务器普遍使用的认证方式。
3.3 PAM 认证原理
- PAM 认证一般遵循的顺序:Service(服务)>PAM(配置文件)>pam_*.so
- PAM 认证首先要确定哪一项服务,然后加载相应的 PAM 的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib/security下)进行安全认证
- 用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到 PAM 模块进行认证
- 不同的应用程序所对应的PAM模块也是不同的
- .so 为结尾的就是模块文件
3.4 PAM 认证的构成
- 查看某个程序是否支持PAM认证,可以用 ls 命令进行查看 /etc/pam.d,然后管道符号检索想要查询的程序;
- 例如查看 su 是否支持 PAM 模块认证:ls /etc/pam.d | grep su
- 查看su的PAM配置文件:cat /etc/pam.d/su
- 每一行都是独立的认证过程;
- 每一行可以区分为三个字段:认证类型、控制类型、PAM 模块及其参数
3.5 PAM 安全认证流程
- required:表示需要返回一个成功值,如果返回失败,不会立刻将失败结果返回,而是继续进行同类型的下一验证,所有此类型的模块执行完成后,再返回失败。
- requisite:与 requried 类似,但如果此模块返回失败,则立刻返回失败并表示此类型失败。
- sufficient:如果此模块返回成功,则直接向程序返回成功,表示此类成功,如果失败,也不影响这类型的返回值。
- optional:不进行成功与否的返回,一般不用于验证,只是显示信息(通常用于 session 类型)。
- include:表示在验证过程中调用其他的 PAM 配置文件。比如很多应用通过完整调用 /etc/pam.d/system-auth(主要负责用户登录系统的认证工作)来实现认证而不需要重新逐一去写配置项。
4. 使用 sudo 机制提升权限
4.1 su 命令的缺点
su 的确为管理带来方便,通过切换到 root下,能完成所有系统管理工具,只要把 root 的密码交给任何一个普通用户,他都能切换到 root 来完成所有的系统管理工作;但通过 su 切换到 root 后,也有不安全因素;比如系统有10个用户,而且都参与管理。如果这10个用户都涉及到超级权限的运用,做为管理员如果想让其它用户通过 su 来切换到超级权限的 root ,必须把 root 权限密码都告诉这10个用户;如果这10个用户都有 root 权限,通过 root 权限可以做任何事,这在一定程度上就对系统的安全造成了威胁。
4.2 sudo 命令的用途及用法
- 用途:以其他用户身份(如 root)执行授权的命令
- 命令行格式:
4.3 配置 sudo 授权
- visudo 或者 vi /etc/sudoers
- 语法格式:
-
用户 主机名=命令程序列表
用户 主机名=(用户) 命令程序列表
4.4 查看 sudo 操作记录
(1)需启用Defaults logfile 配置
- 默认日志文件: /var/log/sudo
- vim /etc/sudoers 编辑配置文件
- 添加:Defaults logfile="/var/log/sudo"
(2)进行 sudo 操作,查看文件操作记录
5. 开关机安全控制
5.1 调整 BIOS 引导设置
- 将第一引导设备设为当前系统所在硬盘
- 禁止从其他设备(光盘、U盘、网络)引导系统
- 将安全级别设为isetup,并设置管理员密码
- Tips:禁止从其他设备引导系统操作,感觉若是出现忘记root密码就可能无法从光驱去修改,所以还是谨慎操作
5.2 GRUB 限制
- 使用grub2-mkpasswd-pbkdf2生成密钥
- 修改/etc/grub.d/00_header文件中,添加密码记录
- 生成新的grub.cfg配置文件
5.3 终端登录安全控制
(1)限制 root 只在安全终端登录:
- 安全终端配置:/etc/securetty
(2)禁止普通用户登录:
- 建立 /etc/nologin 文件
- 删除 nologin 文件或重启后即恢复正常
6. 系统弱口令检测
弱口令(weak password) 没有严格和准确的定义,通常认为容易被别人(他们有可能对你很了解)猜测到或被破解工具破解的口令均为弱口令。弱口令指的是仅包含简单数字和字母的口令,例如“123”、“abc”等。
6.1 弱口令穷举破解过程
(1)Joth the Ripper密码分析工具,支持字典式的暴力破解
- 通过对shadow文件的口令分析,可以检测密码强度
(2)安装 JR 工具
- 安装方法 make clean系统类型
- 主程序文件为john
(3)密码文件的暴力破解
- 准备好密码字典文件,默认为password.lst
- 执行john程序,结合–wordlist=字典文件
7. 网络端口扫描
7.1 nmap 的扫描
NMAP 是一个强大的端口扫描类安全评测工具,支持 ping 扫描、多端口检测等多种技术。
NMAP 命令常用的选项和扫描类型:
- -p:指定扫描的端口;
- -n:禁用反向 DNS 解析(以加快扫描速度);
- -sS:TCP 的 SYN 扫描(半开扫描),只向目标发出 SYN 数据包,如果收到 SYN/ACK 响应包就认为目标端口正在监听,并立即断开连接,否则视为目标端口并未开放;
- -sT:TCP 连接扫描,这是完整的 TCP 扫描方式(默认扫描类型),用来建立一个 TCP 连接,如果成功则认为目标端口正在监听服务,否则视为目标端口并未开放。
- -sF:TCP 的 FIN 扫描,开放的端口会忽略这种数据包,关闭的端口会回应 RST 数据包。许多防火墙只对 SYN 数据包进行简单过滤,而忽略了其他形式的 TCP 攻击包。这种类型的扫描可间接检测防火墙的健壮性。
- -sU:UDP 扫描,探测目标主机提供哪些 UDP 服务,UDP扫描的速度会比较慢。
- -sP:ICMP 扫描,类似于 ping 检测,快速判断目标主机是否存活,不做其他扫描。
- -P0:跳过 ping 检测,这种方式认为所有的目标主机是存活的,当对方不响应 ICMP 请求时,使用这种方式可以避免因无法 ping 通而放弃扫描。