10、操作系统安全加固-Linux加固
1.账号管理与认证授权
1.1.为不同的管理员分配不同的账号
目的:根据不同用途设置不同账户账号,提高安全层级
实施方法:
1.设置高风险文件为最小权限,如:passwd、shadow、group、securetty、services、grub.conf等
2.使用 sudo 命令设置命令执行权限和禁止敏感操作权限
3.检查其他权限过高的文件
创建多用途账号: useradd username passwd username 修改目录权限:(实施风险高,有可能权限不够造成服务启不来) chmod 750 directory chown username:groupname directory 普通账户使用特定授权命令: sudo ifconfig
修改 sudo 的提权应用
visduo
username host=shell
eg:admin 可以在本地使用 useradd 命令
admin localhost=/usr/sbin/useradd(多个命令用逗号隔开)
拒绝权限
admin localhost=/usr/sbin/useradd,/usr/bin/vi,!/usr/bin/vi /etc/hosts(可以使用 vi,但禁止编辑hosts文件)
检查高权限文件(应急响应的时候用得多)
过高的权限或在不应该时间段创建或修改的文件(查出来的是在最后一位为7权限的文件) find / -type f \( -perm -00007 \) -a -ctime -1 -exec ls -lg {} \; ctime:属性变更的时间 mtime:内容修改的时间 atime:被访问的时间
-1:1天之内
也可以使用:find / -type f \( -perm -00007 \) -a -ctime -1 | xargs -I {} ls -lh {}
1.2.去除不需要的账号、修改默认账号 shell 环境
目的:删除系统不需要的默认账号、更改危险账号的默认 shell 变量,降低被利用的可能性
实施方法:
删除/锁定多余用户与组: userdel -r username groupdel groupname passwd -l username 修改程序账户的登录 shell usermod -s /sbin/nologin username
1.3.限制超级管理员远程登录
目的:限制具备超级权限的用户远程登录
实施方法:
修改远程管理程序 ssh 的配置文件 vi /etc/ssh/sshd_config PermitRootLogin yes -> PermitRootLogin no 重启 sshd 服务 systemctl restart sshd
1.4.删除 root 以外 UID 为 0 的用户
目的:减少被越权使用的可能性
实施方法:
检查哪些账户的 UID 为 0: awk -F: '($3 == 0) { print $1 }' /etc/passwd #以 : 分隔,第三列值为 0 的用户(grep :0:) 删除账户: userdel -r username 或者编辑 passwd 与 shadow 文件
1.5.不应存在位于高权限组的账户
目的:检查是否有账户获取过高权限
实施方法:
检查哪些账户属于其他组: grep -v ^# /etc/login.defs |grep "^GID_MIN" |awk '{ print $2 }' #筛选出GID的最小值 awk -F: '$3 > 500 { print $1 }' /etc/passwd | xargs -I {} grep {} /etc/group #找高权限组的账户 grep -v "/sbin/nologin" /etc/passwd | awk -F: '{ print $1 }' | xargs -I {} grep {} /etc/group
1.6.缩短默认密码生成周期
目的:对于采用静态密码认证的设备,账户密码的生存周期不长于 90 天
实施方法:
修改文件密码策略文件:
vi /etc/login.defs
PASS_MAX_DAYS 90 #最长使用期限
PASS_MIN_DAYS 0 #最短使用期限
PASS_MIN_LEN 8 #密码最小长度
PASS_WARN_AGE 7 #最长期限到期前 7 天提醒更改密码
1.7.设置密码强度策略
目的:规范使用高强度密码,延迟被爆破的时间
实施方法:
修改 pam 认证文件 /ect/pam.d/system-auth 添加/修改内容
password requisite pam_cracklib.so try_first_pass retry=3 dcredit=-1 lcredit=-1 ucredit=-1 ocredit=-1 minclass=3 minlen=8
高版本可使用以下命令:/etc/security/pwquality.conf
authconfig --passminlen=8 --update #密码最短8位
authconfig --enablereqlower --update #包含一个小写
authconfig --enablerequpper --update #包含一个大写
authconfig --enablereqdigit --update #包含一个数字
authconfig --enablereqother --update #包含一个字符
1.8.设置强制密码历史
目的:防止被社工字典破解
实施方法:
修改 pam 认证文件:/etc/pam.d/system-auth 添加/修改内容 password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5
1.9.设置账户锁定策略
目的:防止被连续试探密码,降低爆破可能性
实施方法:
修改 pam 认证文件: /etc/pam.d/system-auth /etc/pam.d/sshd /etc/pam.d/login
添加/修改内容
auth required pam_tally2.so deny=6 unlock_time=300 even_deny_root root_unlock_time=60
解锁:pam_tally2 --user username --reset
1.10.设置关键目录的权限
目的:在设备权限配置能力内,根据用户的企业需要,配置其所需的最小权限,以减少被非法访问的可能性
实施方法:
更改账户组文件的权限设置 chmod 644 /etc/passwd chmod 600 /etc/shadow chmod 644 /etc/group 去除多余的写入操作,如: chmod -R go-w /etc
1.11.修改 umask 值
目的:修改创建文件或目录时的默认权限,防止属于该组的其他用户级别组的用户修改该用户的文件
实施方法:
修改启动脚本文件 /etc/profile
/etc/csh.login /etc/csh.cshrc /etc/bashrc 在文件末尾加入 umask 值 umask 027
1.12.限制硬件资源
目的:限制用户对系统资源的使用,减缓 DDOS 等攻击
实施方法:
修改限制文件 vi /etc/security/limits.conf 加入下列内容 * soft core 0 * hard core 0 * hard rss 5000 * hard nproc 20
*:所有用户
soft:软连接
hard:硬链接
core 0:表示禁止创建 core 文件
nproc 20:把最多进程数限制到 20
rss 5000:表示除了 root 外,其他用户都最多只能用 5M 内存
1.13.禁止任何人 su 切换 root 账户
目的:避免任何人使用 su 切换到 root,减少提权风险
实施方法:
修改 su 的配置文件:/etc/pam.d/su auth sufficient /lib/security/pam_rootok.so auth required /lib/security/pam_wheel.so group=wheel 如果需要 su 切换,将用户加入 wheel 组 gpasswd -a username wheel
1.14.去掉所有 SUID 和 SGID
目的:防止被利用提权
实施方法:
查找具有 SUID 和 SGID 的对象 find / -type f \( -perm -04000 -o -perm -02000 \) -exec ls -lh {} \; chmod ugo-s 文件
1.15.重要日志权限不应该高于640
防止日志泄露敏感信息
ls -la /var/log/
chmod -R 640 /var/log
1.16.设置关键文件底层属性
目的:增强关键文件的底层属性,降低篡改风险
实施方法:
修改关键文件和日志的底层属性 chattr +a /var/log/messages
chattr +i /var/log/messages.*
chattr +i /etc/shadow
chattr +i /etc/passwd
chattr +i /etc/group
不只限于上述文件,可用 lsattr 查看更改结果
2.通讯协议
2.1.关闭非加密远程管理 telnet
目的:降低被抓包后获取系统关键信息
实施方法:
修改 telnet 配置文件 vi /etc/xinetd.d/telnet 确认/修改内容为 disable=yes
2.2.使用加密的远程管理 ssh
目的:使用安全套接字层加密传输信息,避免被侦听敏感信息
实施方法:
修改配置文件 vi /etc/ssh/sshd_config 禁止 root 登录,修改默认端口,开启 v2 版本 PermitRootLogin no Port 20202 Protocol 2 重启服务:systemctl restart sshd
2.3.设置访问控制列表
如果公网直连,此项没用;一般用作跳板机
目的:设置访问控制白名单,减少被入侵的风险
实施方法:
修改拒绝策略 vi /etc/hosts.deny 加入信息 ALL:ALL 修改允许策略 vi /etc/hosts.allow 加入信息 sshd:来访者IP地址
2.4.不响应 ICMP 请求
修改网络策略布尔值
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
2.5.关闭无用服务
检查有哪些自启动服务,并记录列表
systemctl list-unit-files |grep enabled
禁用无用服务
3.补丁管理
使用 yum 更新:yum update(不推荐)
使用 rpm 安装:rpm -Fvh rpm包
所有补丁需要在测试环境下测试不影响业务服务后才可更新,下载补丁时,一定要对文件进行签名核实
4.服务进程与启动
建议关闭的服务(如无需要,建议关闭或卸载)
rpm -qa | grep -E "^amanda|^chargen|^chargen-udp|^cups|^cups-lpd|^daytime|^daytime-udp|^echo|^echo-udp|^eklogin|^ekrb5-telnet|^finger|^gssftp|^imap|^imaps|^ipop2|^ipop3|^klogin|^krb5-telnet|^kshell|^ktalk|^ntalk|^exec|^rlogin|^rsh|^rsync|^talk|^tcpmux-server|^telnet|^tftp|^time-dgram|^time-stream|^uucp"
5.banner 与自动注销
5.1.隐藏系统提示信息
避免通过系统提示信息获取系统状态
查看登录 banner 信息:cat /etc/issue
清空 banner 文件:echo > /etc/issue
5.2.设置登录超时注销
防止疏忽导致命令行被他人使用
修改 /etc/profile
在 HISTFILESIZE 下面加入:TMOUT=180
生效:source /etc/profile
5.3.减少history 历史数量
降低之前操作被窃取的风险
修改 /etc/profile
修改信息:HISTFILESIZE=50
source /etc/profile
5.4.跳过 grup 菜单
防止在 grup 菜单对引导过程进行修改
修改 grup 配置文件:vi /boot/grup2/grup.cfg
修改超时时间:set timeout=8
5.5.关闭 ctrl+alt+del 重启功能
防止误操作重启服务器
修改配置文件:vi /usr/lib/systemd/system/ctrl-alt-del.target
注释所有内容