账号安全基本措施(很重要)
将非登录用户的shell设为/sbin/nologin
usermod -s /sbin/nologin 用户名 禁止登录
锁定长期不使用的账号
usermod -L 用户名 passwd -l 用户名 锁定用户 passwd -S 用户名 查看是否锁定
删除无用账号
userdel [-r] 用户名 删除用户以及家目录
锁定账号文件passwd shadow
chattr +i /etc/passwd /etc/shadow 锁定文件,无法对其修改则做到了对账户的保护 lsattr /etc/passwd /etc/shadow 查看锁定状态 chattr -i /etc/passwd /etc/shadow 解锁
查看用户是否被偷改
cat /etc/passwd | wc -l 统计数量 md5sum /etc/shadow 计算账户文件md5校验和 md5sum /etc/shadow >> usermd5.txt 输出md5校验和
chattr 相关面试题
假如一个文件无法写入,什么原因?1 权限不够
2 权限够了,chattr锁定
密码安全控制(很重要)
设置密码有效期
要求用户下次登录修改密码
vi /etc/login.defs 修改密码配置文件 适用于新建用户 PASS_MAX_DAYS 30 修改密码有效期 chage -M 30 lisi 修改密码有效期 适用于已有用户 cat /etc/shadow | grep lisi 查看 chage -d 0 zhangsan 强制在下次登录时更改密码 cat /etc/shadow | grep zhangsan 查看(shadow第三个字段被修改为0)
历史命令记录限制(很重要)
减少记录条数
vi /etc/profile 按G到底添加,或是直接添加 export HISTSIZE=200 source /etc/profile 重新加载
临时清除历史记录
history -c
登录时清空命令历史
vi ~/.bashrc vi /etc/bashrc 三选一,作用范围不同 vi /etc/profile 添加 echo '' > ~/.bash_history 把家目录bash_history文件写空字符达到清除效果 或者 history -c 每次登录都临时清除
终端自动注销(很重要)
闲置600秒后自动注销
vi /etc/profile 按G到底添加,或是直接添加 export TMOUT=600 source /etc/profile 重新加载 source代表当前环境
使用su切换用户(很重要)
su 用户
root→用户 不验证密码
普通用户→普通用户 验证目标用户密码
使用PAM认证 限制使用su命令的用户(了解即可)
将允许使用su命令的用户加入wheel组
启用pam_wheel认证模块
vi /etc/pam.d/su
关注第二行和第六行的auth
第二行表示root用户可以免密切换用户
第六行代表只有wheel组用户才能进行认证操作
将第六行的注释去除(修改为只有wheel组用户才能认证)
用户加入、退出wheel组
gpasswd -a zhangsan wheel gpasswd -d lisi wheel
此时zhangsan可以进行认证,lisi不在组中无法认证
PAM认证原理(了解即可)
遵循的顺序
service(服务)→PAM(配置文件)→pam_*.so
- 首先要确定哪一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib64/security下)进行安全认证
- 用户访问服务器时,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证
- 不同的应用程序所对应的PAM模块是不同的
ls /etc/pam.d/ 查看pam支持的服务(是否存在pam配置文件)
vim /etc/pam.d/su 查看配置文件内的认证模块
ls /lib64/security 查看调用的认证模块的位置
PAM认证的构成(了解即可)
查看某程序是否支持PAM认证
ls /etc/pam.d | grep su 从目录中过滤su
查看su的PAM配置文件
cat /etc/pam.d/su
- 每一行都是一个独立的认证过程
- 每一行都可分三个字段
- 认证类型
- 控制类型
- PAM模块以及参数
第一列代表PAM认证模块类型
auth:对用户身份进行识别,如提示输入密码,判断是否为root
account: 对账号各项属性进行检查,如是否允许登录系统,帐号是否已经过期,是否达到最大用户数等。
password:使用用户信息来更新数据,如修改用户密码
session: 定义登录前以及退出后所要进行的会话操作管理,如登录连接信息,用户数据的打开和关闭,挂载文件系统。
第二列代表PAM控制标记
required:如果验证失败继续验证下一个选项,完成所有验证后才返回失败
requisite: 与required类似,但如果此模块验证失败,立刻返回失败sufficient: 如果此模块返回成功,则直接向程序返回成功。如果失败,也不影响,继续认证
optional:不进行成功与否的返回,一般不用于验证,只是显示信息(通常用于 session 类型)。
inciude:表示在验证过程中调用其他的M配置文件。比如很多应用通过完整调用/etc/pam.d/system-auth(主要负责用户登录系统的认证工作)来实现认证而不需要重新逐一去写配置项。
实例
auth required 模块1 auth sufficient 模块2 auth required 模块3
用户1 用户2 用户3 用户4 pass fail pass pass pass pass fail pass pass pass pass fail 结果 pass 结果 fail 结果 pass 结果 pass 第三列代表PAM模块,默认是在/lib64/securitv/目录下,如果不在此默认路径下,要填写绝对路径司一个模块,可以出现在不同的模块类型中,它在不同的举型中所执行的换作都不相同,这是中于每个模块针对不同的模中举型编制了不同的执行函数
第四列代表PAM模块的参数,这个需要根据所使用的模央来添加。传递给模块的参数。参数可以有多个,之间用空格分隔开
使用sudo提升权限(很重要)
以其他用户的身份执行授权的命令
sudo 授权命令
配置sudo授权
- visudo或者vi /etc/sudoers(无权限,root特权可写,但也需要强制保存)
- 记录格式
用户 主机名=命令程序列表 xue localhost=/sbin/ifconfig xue localhost=(zhangsan) /sbin/ifconfig #可以加上括号表示以zhangsan的身份运行 默认以root用户运行 %wheel ALL=NOPASSWD:ALL #组用户 NOPASSWD:不需要密码验证 用户xue可在本机执行网络配置 组wheel成员在所有设备(all)不需要密码就可以sudo操作 所有命令(all)
Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool Host_Alias MAILSERVERS = smtp, smtp2(主机名) User_Alias ADMINS = jsmith, mikem #设置别名 直接调用 ADMINS MAILSERVERS =NETWORKING
命令建议使用绝对路径,可以使用 which 命令 查看
不给lisi删除命令权限
which rm /bin/rm vim /etc/ lisi ALL=!/bin/rm ! 表示取反 ,不给权限
lisi删除自己的文件不影响,但是若遇到需要权限才能删除的文件,无法请求sudo rm命令。
zhangsan lisi可以使用所有命令 但是不能关机重启
[root@xue xue]# which reboot /usr/sbin/reboot [root@xue xue]# which poweroff /usr/sbin/poweroff [root@xue xue]# which init /usr/sbin/init [root@xue xue]# which shutdown /usr/sbin/shutdown [root@xue xue]# vim /etc/sudoers User_Alias WLFC = zhangsan,lisi Cmnd_Alias ADMIN = /sbin/*, !/usr/sbin/reboot, !/usr/sbin/poweroff, !/usr/sbin/init, !/usr/sbin/shutdown WLFC ALL=NOPASSWD: ADMIN #wlfz组(张三李四),所有主机上,不需要密码,可以执行所有命令除了关机重启 wq!
测试
which route /usr/sbin/route su -zhangsan sudo route add -net 10.0.0.0/24 gw 192.168.80.2 dev ens33 route -n #检查刚刚添加的路由 可以添加(是sbin里的命令) sudo reboot #没有权限 su -lisi sudo ifconfig ens33:1 192.168.80.124/24 ifconfig #检查刚刚添加的网卡地址 可以添加(是sbin里的命令) sudo init 6 #没有权限
sudo -l 查看当前用户有哪些sudo权限
sudo -l
启用sudo操作日志
vim /etc/sudoers Defaults logfile="/var/log/sudo" #默认日志文件路径/var/log/sudo
执行操作,产生日志
cat /var/log/sudo 查看日志
开关机安全控制(不多用)
调整BIOS引导设置
- 将第一引导设备作为当前系统所在硬盘
- 禁止从其他设备(光盘 U盘 网络)引导系统 上班不要随便用U盘!容易背锅!预先打报告!
- 将安全级别设为setup,设置管理员密码
GRUB限制
- 使用grub2-mkpasswd-pbkdf2生成秘钥
- 修改/etc/grub.d/00_header文件中,添加密码记录
- 生成新的grub.cfg文件
GRUB设置密码
grub2-mkpasswd-pbkdf2
备份旧的grub文件
cd /boot/grub2 cp grub.cfg grub.cfg.bak cd /etc/grub.d cp 00_header{,.bak}
修改/etc/grub.d/00_header文件
vim /etc/grub.d/00_header cat << EOF set superusers='root' password_pbkdf2 root grub.pbkdf2.sha512.10000.9414E82C48FE169E37667C7BD9968E3392F1A57472B5F15CA13C7BA76B8BD5DD0438BD237748A9F1D84DA01AC234DB89F7CA77FDDBA94F84620DF4802B1E07B2.D41C46D2AA711A0A7173DF4C2C578F80FDABF937622C8FF70909CD2A76BBA7E23EF6A3096C148322FCBA3E12346F4AD61DF5AA54C38D9CA9496310012D1311E2 EOF
生成新的带密码grub配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg
密码设置完成 再次来到grub菜单按e测试
需要密码才能更改grub配置
终端登录安全控制
限制root用户只能在安全终端登录(不常用 了解即可)
vim /etc/securetty
备注掉tty5.6 表示禁止从tty5 6终端登录root用户
ctrl+alt+F3 切换tty3 登录root,可以登陆 ctrl+alt+F5 切换tty5 登录root,无法登陆
禁止普通用户登录
建立/etc/nologin文件
删除nologin文件或重启后恢复正常
touch /etc/nologin rm -rf /etc/nologin #解除限制
系统弱口令检测
Joth the Ripper 简称JR (了解即可)
通过对shadow文件口令分析 根据字典暴力破解 可以检测密码强度
#解压压缩包 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
字典文件位置 /opt/john-1.8.0/run/password.lst 根据需求添加
#使用密码字典文件 > john.pot #清空已破解出的账户列表,以便重新分析 ./john --wordlist=./password.lst /opt/shadow.txt #使用指定的字典文件进行破解
网络端口扫描 NMAP (熟记 常用)
NMAP 强大的端口扫描工具 安全检测工具 支持 ping 扫描、多端口检测等多种技术。
http://nmap.org
centOS7.3 光盘中安装包nmap-6.40-7.el7.x86_64.rpm
可以yum配置本地源安装
安装 NMAP 软件包
rpm -qa | grep nmap yum install -y nmap
nmap命令常用的选项和扫描类型
-p: 指定扫描的端口。-n: 禁用反向 DNS 解析 (以加快扫描速度)
-sS TCP的SYN扫瞄(半开扫描),只向标发出S数据包,如果收到SYN/ACK响应包就认为目标端口正在监听,并立即断开连接:否则认为目标端口并未开放;
-sT:TCP连接扫描,这是完整的TP扫播方式(默认扫描类型),用来建立一个Tcp连接,如果成功则认为目标端口正在监听服务,否则认为目标端口并未开放
-sF:TCP的FIN扫描,开放的端口会忽略这种教据包,关闭的端口会回应RST数据包。许多防火墙只对SYN数据包进行简单过滤,而忽略了其他形式的 TCP攻击包。这种类型的扫描可间接检测防火墙的健壮性。
-sU: UDP 扫描,探测目标主机提供哪些 UDP 服务,UDP 扫描的速度会比较慢
-sP: ICMP 扫描,类似于 ping 检测,快速判断目标主机是否存活,不做其他扫描。
-P0:跳过ping检测,这种方式认为所有的目标主机是存活的,当对方不响应ICMP请求时,使用这种方式可以避免因无法 ping 通而放弃扫描
#分别查看本机开放的TCP端口、UDP端口nmap -sT 127.0.0.1 nmap -sU 127.0.0.1
#检测192.168.80.0/24网段有哪些主机提供HTTP服务nmap -p 80 192.168.80.0/24
#检测192.168.80.0/24网段有哪些存活主机nmap -n -sP 192.168.80.0/24
网络状态信息 netstat / ss
netstat命令常用选项 (ss与netstat相似 执行速度更快)
a:显示主机中所有活动的网络连接信息 (包括监听、非监听状态的服务端口)。n:以数字的形式显示相关的主机地址、端口等信息
t:查看 TCP相关的信息。u:显示 UDP协议相关的信息。
p:显示与网络连接相关联的进程号、进程名称信息 (该选项需要 root 权限)。
r:显示路由表信息。
l:显示处于监听状态的网络连接及端口信息。
netstat -natp 查看正在运行的使用TCP协议的网络状态信息 netstat -naup 查看正在运行的使用UDP协议的网络状态信息 netstat -natp | grep 80 过滤查看80端口进程 ss -natup 查看正在运行的使用TCP UDP协议的网络状态信息