Linux系统安全及应用
一、账号安全控制
1.系统账号清理
将非登录用户Shell设为/sbin/nologin
usermod -s /sbin/nologin 用户名
锁定长期不使用的账号
usermod -L 用户名 或者 passwd -l 用户名
passwd -S 用户名(查看用户是否锁定)
删除无用的账号
userdel [-r] 用户名
锁定账号文件
chattr +i /etc/passwd /etc/shadow 锁定文件
lsattr /etc/passwd /etc/shadow 查看文件状态
chattr -i /etc/passwd /etc/shadow 解锁文件
2.密码安全控制
设置密码有效期
修改密码配置文件,适用于新建用户
vim /etc/login.defs
PASS_MAX_DAYS 天数(99999默认表示永不过期)
cat /etc/shadow | grep lisi 查看文件并过滤出lisi
修改密码配置文件,适用于已有用户
chage -M 天数 用户名
cat /etc/shadow | grep lisi 查看文件并过滤出lisi
用户下次登陆时更改密码
强制在下次登录时更改密码
chage -d 0 lisi
cat /etc/shadow | grep lisi
3.命令历史限制
3.1限制记录的命令条数
vi /etc/profile
export HISTSIZE=20
source /etc/profile
3.2清空历史命令
临时清空:history -c
永久清空:vi ~/.bashrc 或者 /etc/profile
echo "" > ~/.bash_history
4.终端自动注销
闲置600秒后自动注销
vi /etc/profile
export TMOUT=600
source /etc/profile
二、切换用户
1.用户之间的切换
用途及用法
- 用途:切换用户
- 格式:su - 目标用户
密码验证
- root -任意用户,不验证密码
- 普通用户-其他用户,验证目标用户的密码
2.限制使用su命令的用户
vim /etc/pam.d/su 启用pam_wheel认证模块
auth sufficient pam_rootok.so 允许root不需要密码su其他用户
auth required pam_wheel.so use_uid 允许加入wheel的su root
查看su命令切换的日志:路径:/var/log/secure
3.PAM安全认证
PAM:可插拔式认证模块
可插拔:可以理解为可配置、可定制的一个模块。
- 是一种高效而且灵活便利的用户级别的认证方式
- 也是当前Linux服务器普遍使用的认证方式PAM工作原理
3.1.PAM工作原理
PAM认证一般遵循的顺序:service(服务)--->PAM(配置文件)--->pam_*.so
具体步骤:PAM认证首先要确定那一项应用服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证模块(位于/lib64/security)进行安全认证。
用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证。不同的应用程序所对应的PAM模块也是不用的。
如果想查看某个程序是否支持PAM认证,可以用ls命令进程查看/etc/pam.d 下面是否有相应的配置文件
3.2.PAM配置文件介绍
PAM的配置文件中的每一行都是一个独立的认证过程,它们从上往下的顺序依次由PAM模块调用。
每一行可以区分为三个字段:
认证类型 、 控制类型 、 PAM模块及参数
第一列代表PAM认证模块类型
-
auth(认证管理) : 对用户身份进行识别,如提示输入密码,或者判断是否为root
-
account(账户管理) : 对账号各项属性进行检查,如是否允许登录系统,账号是否已过期,是否达到最大用户数等。
-
password(密码管理) : 使用用户信息来更新数据,如修改用户密码。
-
session (会话管理) : 定义登录前以及退出后要进行的会话草最管理,如登录连接信息,用户数据打开和关闭,挂载文件系统。
第二列代表PAM控制标记
- requird : 表示需要返回一个成功值,如果返回失败,不会立刻将失败结果返回,而是继续同类型的下一个验证,所有此类型的模块都执行完成后,再返回失败。
- requisite : 和requird类型,但如果此模块返回失败,则立刻返回失败,并且此类型失败。
- sufficient: 如果此模块返回成功,一般不用于验证,只是显示信息(通常用于session类型)
- optional: 不进行成功与否的返回,一般不用于验证,只是显示信息(通常用于session类型),
- include : 表示在验证过程中,调用其他的PAM配置文件,比如很对应用通过完整调用/etc/pam.d/system-auth(主要负责用户登录系统的认证工作)来实现认证而不需要重新逐一去写配置项。
第三列代表PAM模块
- 默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径,同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型编制了不同的执行函数。
第四列代表PAM模块的参数
- 这个需要根据所使用的模块来添加。传递给模块的参数,参数可以有多个,之间用空格分开。
4.小结
PAM简单来说就是管理系统“默认”程序/服务的权限程序
三、提升权限机制sudo
1.sudo命令的用途及用法
- 用途:以其它的用户身份(如root)执行授权的命令
- 用法:sudo 授权命令
2.sudo参数命令
选项 | 作用 |
---|---|
-l | 列出用户在主机上可用的和被禁止的命令,一般配置好/etc/sudoers后,要用这个命令来查看和测试是不是配置正确的。 |
-v | 验证用户的时间戳,如果用户运行sudo后,输入用户的密码后,在短时间内可以不用输入口令来直接进行sudo操作,可以跟踪最新的时间戳 |
-u | 指定以用户执行特定操作 |
-k | 删除时间戳 |
sudo -l :查看当前用户获得哪些sudo授权
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3d6b2ybX-1681370183928)(C:\Users\10311\Desktop\课程图片\4.12\612.png)]
3.sudo命令授权
配置sudo命令授权的配置文件在:
以上两个都可进入授权配置文件,第一个配置文件的权限为440,保存退出时,需要:wq!
格式
用户/组授权
用户名/用户别名 主机名/别名=程序列表/别名
%组名 主机名 = 程序列表
用户名 主机名=(用户)程序列表
- 用户:直接授权指定的用户名,或采用"组名"的形式(授权一个组的所有用户)
- 主机名:使用此规则的主机名,每配置过主机名时可以用locathost,有配过主机名
则用实际的主机min,ALL代表带所有主机。 - 命令程序列表:允许授权的用户通过sudo方式执行的特权命令,需要填写命令程序的完整路径,多个命令之间以逗号进行分隔。ALL代表所有命令
zhangsan ALL=/sbin/ifconfig
#zhangsan用户下的所有主机都可以使用ifconfig命令
lisi localhost=/sbin/*,!/sbin/reboot,!/sbin/poweroff
lisi用户下的localhost主机,可以使用root的所有命令,但是reboot和poweroff命令不能使用
wangwu ALL=(root)NOPASSWD:/bin/kill,/usr/bin/killall
xiaoming用户下的所有主机,可以使用kill和killall命令,并且不需要验证密码
4.sudo用户别名案例
- 当使用相同授权的用户较多,或者授权的命令较多时,可以采集几种定义别名。
- 用户、主机、命令部分都可定义为别名(别名必须为大写),分别通过关键字:User_Alias、Host_Alias、Cmnd_Aliasl来进行设置
用户别名的语法格式
别名 | 解释 |
---|---|
User_Alias | 用户别名:包含用户、用户组(用户组用%引导),还可以包含其它已经使用的别名 |
Host_Alias | 主机别名:主机名、IP、网络地址、其它主机名(使用!进行取反) |
Comnd_Alias | 命令路径:目录(此目录所有命令),其它事先定义过的命令别名 |
案例:zhangsan ,lisi 除了重启 关机命令都可以使用
四、开关机安全机制
调整BIOS引导设置
- 将第一引导设备设为当前系统所在硬盘
- 禁止从其他设备(光盘、U盘、网络)引导系统
- 将安全级别设为setup,并设置管理员密码
GRUB限制
- 使用grub2-mkpasswd-pbkdf2生成密钥
- 修改/etc/grub.d/00_header文件中,添加密码记录
- 生成新的grub.cfg配置文件
1.限制更改GRUB引导参数
通常情况下载系统开机进入GRUB菜单时,按e键可以查看并修改GRUB引导参数,这对服务器是一个极大的威胁,可以为GRUB菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。
方法一:
grub2-mkpasswd-pbkdf2
#根据提示设置GRUB菜单的密码,后面自动生成加密密码
cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
cp /etc/grub.d/00_header /etc/grub.d/00_header.bak
#备份配置文件
vim /etc/grub.d/00_header
#进入修改配置文件
****
cat << EOF
set superusers="root"
加密密码内容
EOF
****
grub2-mkconfig -o /boot/grub2/grub.cfg
#使用grub2-mkconfig命令生成新的grub。cfg配置文件
方法二:
grub2-setpassword
#一步到位
vim /etc/grub.d/00_header里面
2.终端登录安全控制
2.1 禁止普通用户登录
- 建立/etc/nologin文件
- 删除nologin文件或重启后恢复正常
禁止普通用户登录,当服务器正在备份或调试等维护工作时,可能不希望有新的用户登录系统。这时候,只需要简单的建立/etc/nologin文件即可,login程序会检查/etc/nologin文件是否存在,如果存在,则拒绝普通用户登录系统(root用户不受限制)
用途:建立在服务器维护期间临时使用
2.2 指定终端id进行登录
安全终端配置:/etc/securetty
五、网络端口扫描nmap
1.nmap介绍
端口取值范围: 0-65535。0是一个预留的特殊端口。
扫描目标: 主机名,IP地址,网络地址等,多个目标以空格分隔。
常用选项
选项 | 参数 |
---|---|
-p | 分别用来指定端口扫描 |
-n | 禁止反向DNS解析(加快扫描速度) |
常用的扫描类型
扫描类型 | 作用 |
---|---|
-sS | 半开扫描: 值向目标发送SYN数据包,如果收到SYN/ACK响应包就认为目标端口正在监听,并立即断开连接,如果没收到则认为目标端口未开放 |
-sT | 连接扫描: 这是完整的TCP扫描方式,用来建立一个TCP连接,如果成功则认为目标端口正在监听服务,如果失败则认为目标端口未开放 |
-sF | TCP FIN 扫描: 开放的端口会忽略这种数据包,关闭的端口会回应RST数据白,许多防火墙只对SYN数据包进行简单过滤,而忽略了其它形式的TCP攻击包。这种类型的扫描可间接检测防火墙的健壮性。 |
-sU | UDP扫描: 探测目标主机提供哪些UDP服务,UDP扫描的速度会比较慢 |
-sP | ICMP扫描: 类似于ping检测,快速判断目标主机是否存活,不做其它扫描 |
-P0 | 跳过ping检测: 这种方式认为所有的目标主机时存活的,当不响应ICMP请求时,使用这种方式可以避免因无法ping通而放弃扫描。 |
2.案例
①nmap -sT (扫描常用的TCP)
现在开另一台系统,配置好ip为:20.0.0.51 ,DNS,关闭防火墙。
在用nmap去扫描查看
②nmap -sU (扫描常用的UDP)
③nmap -sP (ICMP扫描)
设置禁ping
- 内核的配置文件:/etc/sysctl.conf
六、netstat命令
查看当前操作系统的网络连接状态、路由表、接口等信息,它是了解网络状态及排除网络故障的有效工具。
常用选项
选项 | 作用 |
---|---|
-n | 以数字的形式显示相关的主机地址,端口等信息 |
-r | 显示路由表信息 |
-a | 显示主机中所有活动的网络连接信息(包括监听、非监听状态的服务端口) |
-l | 显示处于监听(Listening)状态的网络连接及端口信息 |
-t | 查看TCP相关信息 |
-u | 查看UDP相关信息 |
-p | 显示与网络连接相关的进程号、进程名称信息(需要root权限) |
用法:
①通常使用“-anpt”组合选项,以数字形式显示当前系统中所有的 TCP 连接信息,同时显示对应的进程信息
②配合管道符grep过滤出特定的记录
netstat -natp #查看正在运行的使用TCP协议的网络状态信息
netstat -naup #查看正在运行的使用UDP协议的网络状态信息
实例:
七、总结
1.账号管理
- 锁定对象:账号、文件/目录
- 账号锁定:passwd 、 usermod
- 文件/目录锁定:chattr +i 、文件/目录解锁:chattr -i
- 查看文件锁定:lsattr
2.密码安全
- chage命令---->控制账号的密码
- 修改配置文件:/etc/logine.defs
3.历史命令限制
- linux中执行命令的同时,会保存在内存中然后被写入到磁盘中,磁盘的目录为:~/.bash_hostory
- 所以想要完全清空,需要清空缓存(hostory -c)和清空磁盘(eho “ ” > ~/.bash_hostory)
- 或者在~/.bash_logout中定义清除日志,终端在关闭时执行的文件
- 或者在~/.bash_profile ( ~/.bashrc) 中定义,终端在开启时执行的文件
- /etc/profile:系统所有用户生效的配置文件(环境变量)
4.su切换用户登录
- 管理su命令的用户或附加组(wheel)对象
- 配置文件:PAM模块的配置:/etc/pam.d
- 可实现的是:控制用户,分为root用户和组用户(wheel组),可以将普通用户添加到wheel组中,来实现“赋权”---->可以使用su切换
5.sudo提权(暂时用root用户的权限来执行操作)
- 使用 visudo 或 /etc/sudoerc 进行编辑
- 标准格式:用户 或 %组名(表示组) 主机名=命令(绝对路径)
- 提权的目的:可以有效减少重复输入root密码的次数/频率。
6.PAM原理
- 用户---->访问服务----->进项pam验证------>调用对应的so模块
- 如何查看指定的一个服务程序或命令工具,是否能被pam管理?
- ls /etc/pam.d/ |grep 名称对象
7.终端登录
- 对于用户登录终端的id进行限制
- 控制的文件:/etc/securetty ------》控制指定的终端ID
- 可以在非远程登录的终端上,来切换终端。
8.nmap端口扫描
- 可以使用nmap扫描主机。主要输出的内容在于端口、协议、主机ip、是否存活。
- 作用场景:
①扫描指定协议(TCP/UDP)端口的目标IP、主机名、网络号是否开启
②扫描指定网段中哪些主机是否存活/开启的
9.netstat命令
- netstat是查看指定协议的网络信息
- 包含:
① 协议(TCP/UDP) TCP
② 队列 queue 接收队列 0
③ 队列 queue 发送队列 0
④ IP:Port :::80(IPV6) 192.168.226.131:80(接收端) 192.168.226.132:Port(发送端)
⑤ LISTEN 状态 包含了连接状态、断开状态、等待状态
⑥ PID/进程任务 3459/httpd
c/pam.d/ |grep 名称对象