文章目录
Linux系统安全措施
1 系统账号清理
1.1 非登录用户
将其的shell设置为**/sbin/nologin 或者/bin/false**
usermod -s /sbin/nologin
或
usermod -s /bin/false
1.2 长期不使用的账号
进行锁定操作
usermod -L 用户名
passwd -S 用户名
1.3 无用账号
进行删除操作
userdel [-r] 用户名
1.4 账号文件锁定
账号文件/etc/passwd /etc/shadow
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 找到此行
将其改为你需要的时间,一般建议是一个月或一个季度修改一次
即PASS_MAX_DAYS 30 或 90
但是此方法只能针对以后新创建的用户,对于已经存在的用户使用此方法
chage -M 天数 用户名
chage -d 0 用户名 表示强制下次登录时更改密码
而且新密码必须强度高,要有大小写字母数字组合
3 命令历史限制
history命令可以查看历史命令,平时方向键向上翻找的就是history命令的内容
但是此举也容易被其他用户看到,为了安全考虑,需要减少记录的命令条数
vi /etc/profile
export HISTSIZE=历史命令数量
export使得此命令在所有shell环境中生效
再次加载即可生效
或者也可以选择每次登录清空历史命令
vim /etc/profile 或 /etc/bashrc
echo '' > ~/.bash_history
每次登录时在此文件中替换为空内容
vim /etc/bashrc
history -c
每次切换shell环境都会清空历史命令
4 终端自动注销
保证安全
vim /etc/profile
...
export TMOUT=600
source /etc/profile 检验600秒后自动断开
5 PAM认证
5.1 认证原理
只给信任的用户su权限,限制其他用户使用su
因为默认情况下任何用户都能使用su,有机会反复尝试其他用户的登录密码
将允许使用su命令的用户加入wheel组
gpasswd -a 用户名 wheel
启用pam_wheel认证模块
vi /etc/pam.d/su
第二行的配置代表root用户免密切换用户
第六行的配置代表pam_wheel组中的用户可以使用su
将其注释#取消掉使其可用
5.2 类型
cat /etc/pam.d
查看su的PAM配置文件
-
第一列认证模块类型
- auth 用户身份,如提示输入密码,判断是否为root
- account 对账号各项属性进行检查,如是否登录系统,账号是否已经过期,是否达到最大用户数等
- password 使用用户信息来更新数据,如修改用户密码
- session 定义登录前以及退出后索要进行的会话操作管理,如登录连接信息,用户数据的打开和关闭,挂载文件系统
-
第二列PAM控制标记
- required 验证失败时仍然继续,但返回fail
- requisite 验证失败则立即结束整个验证过程,返回fail
- sufficient 验证成功,则直接向程序返回成功,如果失败也不影响
- optional 不进行成功与否的返回,一般不用于验证,只是显示信息
- include 表示验证过程中调用其他的PAM配置文件,
-
第三列PAM模块
- 默认是在/lib64/security目录下,如果不在此默认路径下,要填写绝对路径
-
第四列PAM模块参数
- 传递给模块的参数,参数可以有多个,之间用空格分隔开
6 sudo
sudo授权命令
以其他用户身份如root执行授权的命令
并且有日志记录下操作
6.1 配置sudo授权
visudo 或 vi /etc/sudoers(因为所有用户都没有写的权限,所以需要强制保存)
记录格式
用户 主机名=命令程序列表
用户名/用户别名 主机名/主机别名=(授权的用户 不加就是默认以root用户运行 NOPASSWD: 代表不需要进行密码验证 )程序列表/程序别名
%组名 主机名/主机别名=程序列表/程序别名
6.2 设置别名
-
Cmnd_Alias 命令别名=绝对路径命令以","分隔开
Host_Alias主机别名
User_Alias 用户别名
别名必须大写 -
示例
- **%**wheel ALL=**NOPASSWD:**ALL 组
组前面要加%,NOPASSWD表示不需要密码
- jerry localhost=/sbin/ifconfig
jerry 在主机localhost下能执行ifconfig命令
- syrianer localhost=/sbin/*,!/sbin/ifconfig,!/sbin/route
syrianer用户在所有主机下都能执行/sbin/下的命令,除了ifconfig和route命令
- Cmnd_Alias PKGTOOLS=/bin/rpm,/usr/bin/yum
给/bin/rpm /usr/bin/yum 命令设置别名为PKGTOOLS
- mikr localhost=PKGTOOLS
紧接上一个,用户mikr在主机localhost下能执行别名为PKGTOOLS命令
即rpm和yum命令
7 开关机安全控制
7.1 调整BIOS引导设置
- 将第一引导设备设为当前系统所在硬盘
- 禁止从其他设备(光盘、U盘、网络)引导系统
- 将安全级别设为setup,并设置管理员密码
7.2 GRUB限制
通常情况下在系统开机进入GRUB菜单时,按e键可以查看并修改GRUB引导参数,这对服务器是一个极大的威胁
可以为GRUB菜单设置一个密码,只有提供正确的密码才被允许修改引导参数
##使用grub2-mkpasswd-pbkdf2生成密钥
grub2-mkpasswd-pbkdf2
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
##修改/etc/grub.d/00_header文件中,添加密码记录
vim /etc/grub.d/00_header
cat << EOF
set superusers="root" 设置用户名为root
password_pbkdf2 root grub.pbkdf2...... 设置密码,省略部分为经过加密生成的密码字符串EOF
##生成新的grub.cfg配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg
重启系统进入GRUB菜单时,按e键将需要输入密码才能修改引导参数
7.3 终端登录安全控制
限制root只在安全终端登录
vi /etc/securetty
.....
#tty5
#tty6
加#注释掉就可以禁止root用户从虚拟终端tty5、tty6登录
7.4 禁止普通用户登录
##建立/etc/nologin文件
touch /etc/nologin
##删除nologin文件或重启后即恢复正常
rm -rf /etc/nologin
8 系统弱口令检测
Joth the Ripper
密码分析工具,支持字典式的暴力破解
通过对shadow文件的口令分析,可以检测密码强度
解压工具包
cd /opt
tar zxf john-1.8.0.tar.gz
安装软件编译工具
yum install 0y 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
9 网络端口扫描
NMAP
CentOS 7.3光盘中安装包nmap-6.40-7.el7.x86_64.rpm
nmap [扫描类型] [选项] <扫描目标..>
9.1 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通而放弃扫描 |
netstat -natp 查看正在运行的使用TCP协议的网络状态信息
netstat -naup 查看正在运行的使用UDP协议的网络状态信息
9.2 natstat常用选项
-a | 显示主机中所有活动的网络连接信息 |
---|---|
-n | 以数字的形式显示相关的主机地址,端口等信息 |
-t | 查看TCP相关的信息 |
-u | 显示UDP协议相关的信息 |
-p | 显示与网络连接相关联的进程号、进程名称信息 |
-r | 显示路由表信息 |
-l | 显示处于监听状态的网络连接和端口信息 |
------------------------------------------ |
| -n | 以数字的形式显示相关的主机地址,端口等信息 |
| -t | 查看TCP相关的信息 |
| -u | 显示UDP协议相关的信息 |
| -p | 显示与网络连接相关联的进程号、进程名称信息 |
| -r | 显示路由表信息 |
| -l | 显示处于监听状态的网络连接和端口信息 |