?
?
前言
? ? ? 作为一个开放源代码的操作系统,Linux服务器以其安全、高效和稳定的显著优势而得以广泛应用,下面主要从账户安全、系统引导、登录控制的角度,优化Linux系统的安全性。
?
?
一、账号安全
1、系统账号清理
将非登录用户的shell设为/sbin/nologin;
锁定长期不使用的账号:passwd -l? ; usermod -L
删除无用账号:userdel -r
锁定账号文件:passwd -u;usermod -U
2、密码安全
设置密码有效期?
新建账号:
vim /etc/login.defs
PASS_MAX_DAYS 30
已有账号:
chage -M 30 lisi
要求用户下次登录时修改密码
chage -d 0 zhangsan
3、命令历史限制
3.1??减少记录的命令条数
vi /etc/profile
HISTSIZE=200
3.2? ?注销时自动清空历史命令
vi ~/.bash_logout
history -c
clear
?history -w???保存 (保存到~/.bash_history) ?history -c???删除?(退出删除历史:vim ~/.bash_logout)
3.3??终端自动注销
vim ~/.bash_profile
export TMOUT=300 (无操作,300注销)
二、su命令
1、su切换用户 ?su zhangsan???(不改变当前目录) ?su - zhangsan (切换到用户的宿主目录)
2、?限制su命令
?启用pam_wheel认证模块 ??
vim /etc/pam.d/su
???auth???????required???pam_wheel.so use_uid
?把使用su命令的用户加入wheel组 ??
gpasswd -a zhangsan??wheel?
三、PAM安全认证
1、PAM认证的构成
1.1? 查看PAM认证
查看su是否支持PAM模块认证
[root@localhost ~]# ls /etc/pam.d | grep su
ksu
su
sudo
sudo-i
su-l
1.2? 查看PAM配置文件
[root@localhost ~]# cat /etc/pam.d/su
#%PAM-1.0
auth sufficient pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth sufficient pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the "wheel" group.
#auth required pam_wheel.so use_uid
auth substack system-auth
auth include postlogin
account sufficient pam_succeed_if.so uid = 0 use_uid quiet
account include system-auth
password include system-auth
session include system-auth
session include postlogin
session optional pam_xauth.so
每一行都是一个独立的认证过程;每一行可以区分为三个字段
2、PAM认证类型
认证管理:接受用户名和密码,进而对该用户的密码进行认证 账户管理:检查账户是否被允许登录系统,账号是否已经过期,账号的登录是否有时间限制等 密码管理:主要是用来修改用户的密码 会话管理:主要是提供对话的管理与记账
3、su命令的安全隐患
?默认情况下,任何用户都允许使用su命令,有机会反复尝试其他用户,如(root)的登录密码,带来安全风险,为了加强su命令的使用控制,可借助于PAM认证模块,只允许极个别用户使用su命令进行切换
4、PAM可插拔式认证模块
是一种高效而且是灵活便利的用户级别的认证方式,也是当linux服务器普遍使用的认证方式。
5、PAM认证原理
Service(服务)——PAM(配置文件)——pam_*.so 首先要确定哪一项服务,然后加载相应的PAM配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib64/security下)进行安全认证;用户访问服务器时,服务器某一服务程序把用户的请求发送到PAM模块进行验证;不同的应用程序所对应的PAM模块是不同的.
6、PAM安全认证流程
required验证失败时仍然继续,但返回Fail;
requisite验证失败时立即结束整个验证过程,返回Fail;
sufficien验证成功则立即返回,不再继续,否则忽略结果并继续;
optional不用于验证,只显示信息(通常用于session类型)
7、PAM模块顺序
7.1??第一列代表PAM认证模块类型 auth:对用户身份进行识别,如提示输入密码,判断是否为root。 account:对账号各项属性进行检查,如是否允许登录系统,帐号是否已经过期,是否达到最大用户数等 password:使用用户信息来更新数据,如修改用户密码 session:定义登录前以及退出后所要进行的会话操作管理,如登录连接信息,用户数据的打开和
7.2??第二列代表PAM控制标记 required:表示需要返回一个成功值,如果返回失败,不会立刻将失败结果返回,而是继续进行同类型的下一验证,所有此类型的模块都执行完成后,再返回失败。 requisite:与required类似,但如果此模块返回失败,则立刻返回失败并表示此类型失败。 sufficient:如果此模块返回成功,则直接向程序返回成功,表示此类成功,如果失败,也不影响这类型的返回值。 optional: 不进行成功与否的返回,一般不用于验证,只是显示信息(通常用于session类型), include:表示在验证过程中调用其他的PAM配置文件。比如很多应用通过完整调用/etc/pam.d/system-auth(主要负责用户登录系统的认证工作)来实现认证而不需要重新逐一去写配置项。
7.3??第三列代表PAM模块
默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径
7.4??第四列代表PAM模块的参数
| | | 用户1 | 用户2 | 用户3 | 用户4 |
---|
auth | required | 模块1 | pass | fail | pass | pass | auth | sufficient | 模块2 | pass | pass | fail | pass | auth | required | 模块3 | pass | pass | pass | fail | | | 结果 | pass | fail | pass | pass |
四、sudo命令
1、sudo命令的用途与用法
用途:以其他用户身份(如root)执行授权的命令 用法:sudo授权命令
2、使用sudo机制提升
visudo或vi /etc/sudoers?
3、语法格式
用户 主机名=命令程序列表 用户 主机名=(用户)命令程序列表
用户:直接授权指定的用户名;主机名:使用此规则的主机名;(用户):用户能够以何种身份来执行命令;命令程序列表:允许授权的用户通过sudo方式执行的特权命令。
4、参数选项
?-l: 列出用户在主机上可用的和被禁止的命令; -v:验证用户的时间戳; -u: 指定以以某个用户执行特定操作; -k:删除时间戳,下一个sudo 命令要求用求提供密码;
5、Linux的visudo中4个all代表的含义
从左到右第一个all是用户 从左到右第二个all是机器 从左到右第三个all是新用户身份(run_as_user,如root,oracle) 从左到右第四个all 是命令
6、启用sudo操作日志
visudo //进入编辑
Defaults logfile = /var/log/sudo //将该命令添加至最后一行:wq保存并退出即可
7、实例
?
?
五、别名创建
格式:
用户别名: User_Alias 主机别名: Host_Alias 命令别名: Cmnd_Alias
实例:
User_Alias ADMIN=admin1,admin2,admin3 用户的别名users包括:admin1,admin2,admin3
Host_Alias HOST=localhost 主机别名hosts包括:localhost,hellolee
Cmnd_Alias CMD=/sbin/*,!/sbin/reboot,!/sbin/poweroff
ADMIN HOST=CMD 相当于:用户组 主机组 = 命令程序列表
?六、开关机安全控制
1、调整BIOS引导设置
将第一引导设备设为当前系统所在硬盘 禁止从其他设备(光盘、U盘、网络)引导系统 将安全级别设为setup,并设置管理员密码
2、GRUB限制
使用grub2-mkpasswd-pbkdf2生成密钥 修改/etc/grub.d/00_header文件,添加密码记录 生成新的grub.cfg配置文件
3、限制更改GRUB 引导参数
通常情况下在系统开机进入GRUB菜单时,按e键可以查看并修改GRUB引导参数,这对服务器是一个极大的威胁。 可以为GRUB菜单设置一个密码,只有提供正确的密码才被允许修改引导参数
grub2-mkpasswd-pbkdf2 #根据提示设置GRUB 菜单的密码
PBKDF2 hash of your password is grub.pbkdf2…… #省略部分内容为经过加密生成的密码字符串
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" #设置用户名为root
password_pbkdf2 root grub.pbkdf2…… #设置密码,省略部分内容为经过加密生成的密码字符串
EOF
grub2-mkconfig -o /boot/grub2/grub.cfg #生成新的 grub.cfg 文件
根据提示设置GRUB菜单的密码
?
编辑/etc/grub.d/00_header文件
?
?
找到GRUB配置文件,先进行一个备份,防止出现问题,然后再重新生成一个新的grub菜单,重新虚拟机
?
?
七、终端登录安全控制
安全终端配置:/etc/securetty
禁止root用户登录
vi /etc/securetty
#tty5 想要不让在哪个终端登陆就在该终端前加注释#
tty6
禁止普通用户登录
touch /etc/nologin #创建/etc/nologin文件即禁止普通用户登录
rm -rf /etc/nologin #删除该文件即取消登录限制
八、系统弱口令检测
1、相关介绍
1.1? Joth the Ripper(JR) 密码分析工具,支持字典式的暴力破解 通过对shadow文件的口令分析,可以检测密码强度
1.2? 安装JR工具? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 安装方法make clean 系统类型 主程序文件为john
1.3? 检测弱口令账号 获得Linux/Unix服务器的shadow文件 执行john程序,将shadow文件作为参数
1.4? 密码文件的暴力破解 准备好密码字典文件,默认为paaword.lst 执行john程序,结合wordlist=字典文件
2、弱命令检测过程
#解压工具包
cd /opt
tar. zxf john-1.8.0.tar.gz
#安装软件编译工具
yum install -y gcc gcc-c++ make
#切换到src子目录
cd /opt/john-1.8.0/src
#进行编译安装
make clean linux-x86-64
#准备待破解的密码文件
cp /etc/shadow /opt/shadow.txt
#执行暴力破解
cd /opt/john-1.8.0/run
./john /opt/shadow.txt
#查看已破解出的账户列表
./john --show /opt/shadow.txt
#使用密码字典文件
> john. pot
#清空已破解出的账户列表,以便重新分析
./john --wordlist=./password.1st /opt/shadow.txt
#使用指定的字典文件进行破解
实例:
九、网络端口扫描
?1、控制位
SYN ?建立链接 ACK ?确认 FIN ?结束断开 PSH ?传送 0 数据缓存 ? 上层应用协议 RST ?重置 URG ?紧急 2、网络扫描
rpm -ivh /mnt/Packages/nmap-xxxx.rpm安装软件包 nmap -sT(TCP连接扫描) 127.0.0.1、 ? 192.168.4.0/24、 ? 192.168.4.100-200
选项: -sU:UDP扫描 -sP:ICMP扫描 -sS:TCP syn扫描 -sF:TCP fin扫描 -sT: TCP连接扫描? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -P0: 跳过ping检测? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -p: 指定扫描的端口。 -n: 禁用反向DNS解析? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 21,22:扫描多个端口,用逗号进行分隔
实例:快速检测192.168.150.0/24网段中有哪些存活主机(能ping通)
[root@localhost ~]# nmap -sP 192.168.150.0/24
Starting Nmap 6.40 ( http://nmap.org ) at 2019-11-17 16:56 CST
Nmap scan report for 192.168.150.1
Host is up (0.00023s latency).
MAC Address: 00:50:56:C0:00:08 (VMware)
Nmap scan report for 192.168.150.2
Host is up (0.00011s latency).
MAC Address: 00:50:56:E6:2C:E2 (VMware)
Nmap scan report for 192.168.150.133
Host is up (0.00036s latency).
MAC Address: 00:0C:29:D1:2D:03 (VMware)
Nmap scan report for 192.168.150.143
Host is up (0.00031s latency).
MAC Address: 00:0C:29:3D:EA:1F (VMware)
Nmap scan report for 192.168.150.254
Host is up (0.00015s latency).
MAC Address: 00:50:56:E8:F1:D3 (VMware)
Nmap scan report for 192.168.150.157
Host is up.
Nmap done: 256 IP addresses (6 hosts up) scanned in 1.70 seconds
总结
? ? ? ?虽然说linux系统安全,高效,稳定,但如果平时不注意安全优化,也不会安全,通过本文的总结,学会如何使用账户安全,系统引导和登录的安全,以及弱口令检测,网络扫描工具。
?
?
?
?
?
?
?
?
?
?
?
|