系统安全及应用
一,账号安全控制
1,基本安全措施
(1)系统账号清理
- 将非登录用户的shell设为/sbin/nologin 来禁止用户登录
root@server1 ~]# useradd -s /sbin/nologin zhangsan
- 锁定长期不适用的账号
[root@server1 ~]# usermod -L zhangsan // 锁定账户zhangsan
[root@server1 ~]# passwd -S zhangsan // 查看账户状态
zhangsan LK 2020-08-28 0 99999 7 -1 (Password locked.) //已被锁定
[root@server1 ~]# usermod -U zhangsan //解锁账户
[root@server1 ~]# passwd -S zhangsan
zhangsan PS 2020-08-28 0 99999 7 -1 (Password set, MD5 crypt.)
- 删除无用的账号
[root@server1 ~]# userdel zhangsan
-
锁定账号文件passwd ,shadow
chattr 命令的用法:
选项 | 用法 |
---|---|
+ | 在原有参数设定基础上,追加参数。(配合以下选项使用,不能单独使用) |
- | 在源有参数设定基础上,移除参数(配合以下选项使用,不能单独使用) |
= | 更新为指定参数设定(配合以下选项使用,不能单独使用) |
A | 文件或目录的atime 不可被修改,可以有效预防例如手提电脑磁盘I /0错误的发生。 |
S | 硬盘 I/O 同步选项,功能类似sync |
a | 即 compresse,设定文件是经过压缩后再存储,读取时需要经过自动解压操作。 |
d | 即 no dump ,设定文件不能成为dump 程序的备份目标 |
i | 设定文件不能被删除,改名,设定链接关系,同时不能写入或新增内容,i 参数对于文 件 系统的安全设置有很大帮助 |
j | 设定此参数使得当通过 mount 参数: data= ordered 或者 data = writeback 挂载的系统文件。 |
例如:
[root@server1 ~]# chattr +i /etc/passwd /etc/shadow //锁定文件
[root@server1 ~]# lsattr /etc/passwd /etc/shadow // 查看为锁定的状态
----i----------- /etc/passwd
----i----------- /etc/shadow
[root@server1 ~]# useradd zhangsan //此时创建账户因为是锁定状态无法创建
useradd: cannot open /etc/passwd
[root@server1 ~]# passwd zhangsan // 修改密码也因无法打开文件而无法修改
passwd: Unknown user name 'zhangsan'.
[root@server1 ~]# chattr -i /etc/passwd /etc/shadow //解锁文件
[root@server1 ~]# lsattr /etc/passwd /etc/shadow //查看为解锁的状态
---------------- /etc/passwd
---------------- /etc/shadow
[root@server1 ~]# useradd zhangsan //此时创建账户以及修改密码都可
[root@server1 ~]# passwd zhangsan
Changing password for user zhangsan.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@server1 ~]# id zhangsan
uid=1002(zhangsan) gid=1002(zhangsan) groups=1002(zhangsan)
(2)密码安全控制
- 密码安全控制有以下两种:
- 设置密码有效期
- 要求用户下次登录时修改密码
(3)命令历史,自动注销
- 命令历史限制有以下三种方法:
- 减少记录的命令条数
- 注销时自动清空命令历史
【】vi /etc/profile
histsize=200 //保留 200 t条历史命令 (重启之后生效)
【】vi ~/.bash_logout
history -c // 清空历史记录 (重启之后生效)
clear
或者
【】echo > $home./bash_history //清空历史记录
- 终端自动注销
- 闲置600 秒后自动注销
vi ~/.bash_profile
.......
export TMOUT=600 //闲置600秒后自动注销
2,用户切换与提权
(1)su命令 --substitute user (切换用户)
-
作用: substitute user 切换用户
-
格式: su - 目标用户
-
密码验证
- root -->任意用户,不验证密码
- 普通用户–>其他用户,验证目标用户的密码
-
限制使用 su 命令的用户
- 将允许使用su命令的用户加入wheel组
- 启用 pam_wheel 认证模块
注意 : 现象就是加入wheel组之间的可以自由切换,包括root,但是新建的或者是未加入wheel组的切换不了
例如
[root@server1 ~]# gpasswd -a lisi wheel //添加授权用户lisi
Adding user lisi to group wheel
[root@server1 ~]# grep wheel /etc/group //确认wheel 组成员
wheel:x:10:lihuihui,lisi
[root@server1 ~]# vi /etc/pam.d/su //进入配置文件去掉下面行开头的#注释·
auth required pam_wheel.so use_uid
(2)sudo命令 (提升执行权限)
- 弥补su命令的缺点
- sudo 命令的用途及用法
- 用途:以其他用户身份(如root)执行授权命令
- 用法:sudo 授权命令
- 配置sudo授权 (* 表示所有 !表示取反,不给使用)
- visudo 或者vi /etc/sudoers (保存时:wq!)
- 记录格式 用户 主机名列表=命令程序列表
备注: %sudo ALL=(ALL:ALLALL 从左到右,第一个all是用户,第二个是机器,第三个是新用户身份(如 run_as_user ,如root ,oracle )第四个是命令
例如: (提权过程)
[root@server1 ~]# su lisi //切换用户
[lisi@server1 root]$ vi a //创建文件并编辑,此时因为没有权限是编辑不了的
[lisi@server1 root]$ sudo /usr/bin/vi a //提升权限, 此时编辑是可以编辑的,编辑内容如下
[lisi@server1 root]$ sudo /usr/bin/cat a
123
[lisi@server1 root]$ touch b.txt //创建文件夹,此时也因为没有权限是创建不了
touch: cannot touch ‘b.txt’: Permission denied //无权限,,拒绝
[lisi@server1 root]$ sudo /usr/bin/touch b.txt //提升 限
[lisi@server1 root]$ sudo /usr/bin/ls -lh //给ls -lh也提升权限来查看一下,此时,已经创建文件
total 20K
-rw-r--r-- 1 root root 4 Aug 30 19:35 a
-rw-r--r-- 1 root root 7 Aug 30 19:30 aa
-rw-------. 1 root root 2.9K Aug 9 20:18 anaconda-ks.cfg
-rw-r--r-- 1 root root 0 Aug 30 19:31 a.txt
-rw-r--r-- 1 root root 0 Aug 30 19:35 b.txt
... 省略部分内容
- 用sudo -l 来参看用户所拥有的权限 (whoami查看当前用户是哪个)
注意:改权限的时候先查看在哪个文件夹下面,比如说,查看路由 which route ,如果一个账户属于多个组,那这个账户拥有多个组的权限
[# ]route add -host 192.168.20.100 gw 192.168.20.1 // 加路由
【#】# route -n // 查看路由
【$】sudo /ussr/sbin/route add -host 92.168.20.100 gw 192.168.20.1
【$】sudo /usr/sbin/ifconfig ens33:3 192.168.50.1/24
tail -f /var/log/secure : 查看日志记录
- 查看sudo 操作记录
- 需要启用 defaults logfile 配置
- 默认日志文件 : /var/log/sudo
【#】 visudo // 日志的引用,进去之后加下面一行
defaults logfile = "/var/log/sudo" //之后在所有wheel组的成员有权限查看
【*】sudo /usr/bin/sudo tail /var/log/sudo //在wheel组的用户下查看日志文件后一行
例如: [lisi@server1 root]$ sudo /usr/bin/sudo cat /var/log/sudo //在lisi账户下查看日志文件 ,下面是日志文件内容
Aug 30 20:21:49 : zhangsan : command not allowed ; TTY=pts/0 ; PWD=/root ;
USER=root ; COMMAND=list
Aug 30 20:22:42 : zhangsan : command not allowed ; TTY=pts/0 ; PWD=/root ;
USER=root ; COMMAND=list
Aug 30 20:23:37 : zhangsan : user NOT in sudoers ; TTY=pts/0 ; PWD=/root ;
USER=root ; COMMAND=/usr/bin/sudo -l
Aug 30 20:24:15 : lisi : TTY=pts/0 ; PWD=/root ; USER=root ; COMMAND=list
Aug 30 20:27:49 : lisi : TTY=pts/0 ; PWD=/root ; USER=root ;
COMMAND=/usr/bin/sudo cat /var/log/sudo
Aug 30 20:27:49 : lisi : TTY=pts/0 ; PWD=/root ; USER=root ; COMMAND=/bin/cat /var/log/sudo
3,PAM安全认证
- PAM 认证原理
- 一般遵循的顺序
service(服务)—>PAM (配置文件)—>pam_*.so - 首先要确定哪一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib/security下)进行安全认证
- 用户访问服务器时,服务器的某一个服务程序把用户的请求发送到pam模块进行认证
- 不同的应用程序所对应的pam模块是不同的
- 一般遵循的顺序
- PAM 认证的构成
- 查看某个程序是否支持pam认证,可以用ls命令
例如
- 查看某个程序是否支持pam认证,可以用ls命令
ls /etc/pam.d \ grep su
- 查看su 的pam配置文件:cat /etc/pam.d/su
- 每一行都是一个独立的认证过程
- 每一行可以区分为三个字段 (认证类型 ,控制类型,PAM模块及其参数)
-
认证类型 (有以下四种)
+ 认证管理: 授权用户名和密码,进而对该用户的密码进行认证
+ 账户管理 : 检查账户是否被允许登录系统,账号时候已经过期,账号的登录时候有时间段的限制等
+ 密码管理 : 主要用来修改用户的密码
+ 会话管理 : 主要提供对话的管理和记账 -
控制类型
控制类型也可以称作control flags ,用于PAM验证类型的返回结果
+ <1> required 验证失败时仍然继续,但返回fail
+ <2>requisite 验证失败则立即结束整个验证过程,返回fail
+ <3>sufficient 验证成功则立即返回,不再继续,否则忽略结果并继续
+ <4>optinal 不用于验证只显示信息 -
PAM 模块及其参数
-
- su 命令的安全隐患
- 默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户,(如root)的登录密码,带来安全风险
- 为了加强su 命令的使用控制,可借助PAM认证模块,只允许极个别用户使用su命令进行切换
- PAM 可插拔式认证模块
- 是一种高效而且灵活便利的用户级别的认证方式
- 也是当前linux服务器普遍使用的认证方式
二,系统引导和登录控制
1,开关机安全控制
(1)调整bios引导设置
- 调整BIOS引导设置
- 将第一引导设备设为当前系统所在硬盘
- 禁止从其他设备(光盘,U盘,网络)引导系统
- 将安全级别设为setup,并设置管理员密码
(2) 禁止ctrl +alt +del 快捷键重启
(3)限制更改GRUB引导参数
- 使用gtub2-mkpasswd-pbkdf2生成密钥
- 修改/etc/grub.d/00_header文件中,添加密码记录
- 生成新的grub.cfg配置文件
相关命令:
grub2-mkpasswd-pbkdf2 //根据提示指定密码,生成加密密钥
Enter passwd:
Reenter password:
此段密钥 is 后面才开始 假设密钥为:asfhoia hfoasnvosdjiodcnxcjoasdnvasvnaf
.....
//以上是经过加密的密码字符串省略
【#】cp -rp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
【#】cp -rp /etc/grub.d/00_header /etc/grub.d/00_header.bak
【#】vim /etc/grub.d/00_header //将下面内容添加到文件最后一行
cat << EOF
set superusers="root" password_pbkdf2 root 这里后面加入is 后面的密钥
EOF
【#】grub2-mkconfig -o /boot/grub2/grub.cfg
注意:在使用cat <<EOF时,输入完毕之后,需要在一个新的一行输入EOF结束stdin的输入。EOF必须顶行写,前面不能用制表符或者空格。密钥也可参考下面密钥复制:
2,终端及登录控制
(1)减少开放的tty终端个数(以下方法只适用于contens 6)
- /etc/init/tty.conf 控制tty终端的开启
- /etc/init/start-ttys.conf 控制tty终端的开启数量,设备文件
- /etc/sysconfig/init 控制tty 终端的开启数量,终端颜色
配置示例如下
【#】vi /etc/init/start-ttys.conf
.....
env ACTIVE_CONSOLES=/dev/tty[456]
【#】vi /etc/sysconfig/init
...
ACTIVE_CONSOLES=/dev/tty[456]
【reboot】
禁用tty1,tty2,tty3终端以后,重新开机并进入字符模式,默认将无法登陆。必须按alt+f4,alt+f5,alt+f6组合切换到可用的终端,然后才能进行登陆操作。
(2) 禁止root 用户登录
- 限制root 只在安全终端登录
- 安全终端配置:/etc/securetty
例如:
- 安全终端配置:/etc/securetty
[root@server1 ~]# vi /etc/securetty
...
#tty5
#tty6 //禁止 root 用户从终端tty5,tty6 登录
(3) 禁止普通用户登录
在服务器进行备份或调试过程时用
三,弱口令检测,端口扫描
1,弱口令检测
-
介绍
- John the Ripper 简称JR ,一款密码分析工具,支持字典式的暴力破解
- 通过对shadow文件的口令分析,可以检测密码强度
- 官方网站: http://www.openwall.com/john/
-
检测过程:
- 安装JR工具
- 安装方法 : make clean系统类型
- 主程序文件为 john
- 检测弱口令账号
- 获得linux/unix服务器的shadow文件
- 执行john程序,将shadow文件作为参数
- 密码文件的暴力破解
- 准备好密码字典文件,默认为password.lst
- 执行john程序,结合–wordlist=字典文件
示例
- 安装JR工具
共有条评论 网友评论