23 个 CentOS 服务器强化安全提示 - 第 2 部分
继续上一篇关于如何保护和强化 CentOS 服务器的教程,在本文中,我们将讨论以下清单中列出的其他安全提示。
要求
- 20 个 CentOS 服务器强化安全提示 – 第 1 部分
21.禁用无用的SUID和SGID命令
如果在二进制程序上设置了 setuid 和 setgid 位,这些命令可以使用其他用户或组权限运行任务,例如 root 权限可能暴露严重的安全问题。
通常,缓冲区溢出攻击可以利用此类可执行二进制文件以 root 高级用户的权限运行未经授权的代码。
find / -path /proc -prune -o -type f \( -perm -4000 -o -perm -2000 \) -exec ls -l {} \;
要取消设置 setuid 位,请执行以下命令:
chmod u-s /path/to/binary_file
要取消设置 setgid 位,请运行以下命令:
chmod g-s /path/to/binary_file
22.检查无主文件和目录
必须删除不属于有效帐户的文件或目录,或为其分配用户和组的权限。
发出以下 find 命令来列出没有用户和组的文件或目录。
find / -nouser -o -nogroup -exec ls -l {} \;
23. 列出世界可写文件
在系统上保留全局可写的文件可能很危险,因为任何人都可以修改它们。执行以下命令以显示可字写入的文件,但符号链接除外,它们始终是全局可写的。
find / -path /proc -prune -o -perm -2 ! -type l –ls
24. 创建强密码
创建至少包含八个字符的密码。密码必须包含数字、特殊字符和大写字母。使用pwmake从/dev/urandom文件生成128位的密码。
pwmake 128
25.应用强密码策略
通过在 /etc/pam.d/passwd 文件中添加以下行来强制系统使用强密码。
password required pam_pwquality.so retry=3
添加上面这行,输入的密码不能包含超过 3 个单调序列的字符,例如 abcd,也不能包含超过 3 个相同的连续字符,例如 第1111章
要强制用户使用最小长度为 8 个字符(包括所有类别的字符)的密码,请对字符序列和连续字符进行强度检查,将以下行添加到 /etc/security /pwquality.conf 文件。
minlen = 8
minclass = 4
maxsequence = 3
maxrepeat = 3
26.使用密码时效
chage命令可用于用户密码老化。要将用户的密码设置为在 45 天后过期,请使用以下命令:
chage -M 45 username
要禁用密码过期时间,请使用以下命令:
chage -M -1 username
通过运行以下命令强制密码立即过期(用户必须在下次登录时更改密码):
chage -d 0 username
27. 锁定账户
可以通过执行 passwd 或 usermod 命令来锁定用户帐户:
passwd -l username
usermod -L username
要解锁帐户,请使用 passwd 命令的 -u
选项和 usermod 的 -U
选项。
28. 阻止帐户 Shell 访问
要防止系统帐户(普通帐户或服务帐户)访问 bash shell,请将 root shell 更改为 /usr/sbin/nologin 或 /bin/false通过发出以下命令来创建 /etc/passwd 文件:
usermod -s /bin/false username
要在创建新用户时更改 shell,请发出以下命令:
useradd -s /usr/sbin/nologin username
29. 使用 vlock 锁定虚拟用户控制台
vlock 是一款用于在 Linux 控制台上锁定多个会话的程序。安装程序并通过运行以下命令开始锁定终端会话:
yum install vlock
vlock
30.使用集中式系统来管理帐户和身份验证
使用集中式认证系统可以大大简化账户管理和控制。可以提供此类帐户管理的服务包括 IPA Server、LDAP、Kerberos、Microsoft Active Directory、Nis、Samba ADS 或 Winbind。
默认情况下,其中一些服务通过加密协议和对称密钥加密技术(例如 Kerberos)受到高度保护。
31. 强制以只读方式安装 USB 介质
使用blockdev实用程序,您可以强制将所有可移动媒体安装为只读。例如,在 /etc/udev/rules.d/ 目录中创建一个名为 80-readonly-usb.rules 的新 udev 配置文件包含以下内容:
SUBSYSTEM=="block",ATTRS{removable}=="1",RUN{program}="/sbin/blockdev --setro %N"
然后,使用以下命令应用规则:
udevadm control -reload
32. 通过 TTY 禁用 Root 访问
要防止 root 帐户通过所有控制台设备 (TTY) 执行系统登录,请以 root 身份在终端提示符下键入以下命令来删除 securetty 文件的内容。
cp /etc/securetty /etc/securetty.bak
cat /dev/null > /etc/securetty
请记住,此规则不适用于 SSH 登录会话
要阻止 root 通过 SSH 登录,请编辑文件 /etc/ssh/sshd_config 并添加以下行:
PermitRootLogin no
33.使用POSIX ACL扩展系统权限
访问控制列表不仅可以为单个用户或组定义访问权限,还可以指定程序、进程、文件和目录的权限。如果对目录设置 ACL,其后代将自动继承相同的权限。
例如,
setfacl -m u:user:rw file
getfacl file
34. 在强制模式下设置 SELinux
Linux 内核的 SELinux 增强功能实现了强制访问控制 (MAC) 策略,允许用户定义安全策略,为所有用户、程序、进程、文件和设备提供精细的权限。
内核的访问控制决策基于所有与安全相关的上下文,而不是基于经过身份验证的用户身份。
要获取 Selinux 状态并执行策略,请运行以下命令:
getenforce
setenforce 1
sestatus
35.安装SELinux附加实用程序
安装 policycoreutils-python 软件包,它提供了用于操作 SELinux 的附加 Python 实用程序:audit2allow、audit2why、chcat 和语义管理。
要显示所有布尔值以及简短说明,请使用以下命令:
semanage boolean -l
例如,要显示和设置httpd_enable_ftp_server的值,请运行以下命令:
getsebool httpd_enable_ftp_server
要使布尔值在重新启动后保持不变,请将 -P
选项指定为 setsebool,如以下示例所示:
setsebool -P httpd_enable_ftp_server on
36.使用集中式日志服务器
配置rsyslog守护进程将敏感实用程序日志消息发送到集中式日志服务器。另外,借助 logwatch 实用程序监视日志文件。
将日志消息发送到远程服务器可确保一旦系统受到损害,恶意用户就无法完全隐藏其活动,总是在远程日志文件上留下痕迹。
37.启用进程记帐
通过安装 psacct 实用程序启用进程记帐,并使用 lastcomm 命令显示系统记帐文件中记录的先前执行的命令的信息,并使用 sa 总结记录的先前执行的命令的信息在系统记帐文件中。
38. 强化/etc/sysctl.conf
使用以下内核参数规则来保护系统:
禁用源路由
net.ipv4.conf.all.accept_source_route=0
禁用 IPv4 转发
ipv4.conf.all.forwarding=0
禁用 IPv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
除非特别需要,否则禁用 ICMP 重定向数据包的接受和发送。
net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.all.secure_redirects=0
net.ipv4.conf.all.send_redirects=0
禁用反向路径转发
net.ipv4.conf.all.rp_filter=2
忽略所有 ICMP 回显请求(设置为 1 启用)
net.ipv4.icmp_echo_ignore_all = 0
39. 使用 VPN 服务通过不受保护的公共网络访问您的场所
运营商始终使用 VPN 服务通过互联网远程访问 LAN 场所。此类服务可以使用免费的开源解决方案(例如 OpenVPN)或使用专有解决方案(例如 Cisco VPN)进行配置(安装 Epel Repositories 提供的 vpnc 命令行实用程序)。
40. 执行外部系统扫描
使用特定工具通过 LAN 远程点扫描系统,评估系统安全性是否存在漏洞:
- Nmap – 网络扫描仪 29 Nmap 命令示例
- Nessus – 安全扫描器
- OpenVAS – 用于扫描漏洞和进行全面的漏洞管理。
- Nikto – 一款出色的通用网关接口 (CGI) 脚本扫描程序 扫描 Linux 中的 Web 漏洞
41. 内部保护系统
使用内部系统保护来防御病毒、rootkit、恶意软件,并且作为良好实践,安装可以检测未经授权的活动(DDOS 攻击、端口扫描)的入侵检测系统,例如:
- AIDE – 高级入侵检测环境 – http://aide.sourceforge.net/
- ClamAV – 防病毒扫描程序 https://www.clamav.net
- Rkhunter – Rootkit 扫描程序
- Lynis – Linux 安全审计和扫描工具
- Tripwire – 安全性和数据完整性 http://www.tripwire.com/
- Fail2Ban – 入侵网络防御
- OSSEC – (HIDS) 基于主机的入侵检测系统 http://ossec.github.io/
- Mod_Security – 保护暴力或 DDoS 攻击
42.修改用户环境变量
通过发出以下命令附加日期和时间格式来存储命令执行情况:
echo 'HISTTIMEFORMAT="%d/%m/%y %T "' >> .bashrc'
每次键入命令时强制立即记录HISTFILE(而不是注销):
echo ‘PROMPT_COMMAND="history -a"’ >> .bashrc
限制登录会话超时。当空闲时间段内没有执行任何活动时,自动拆除 shell。自动断开 SSH 会话非常有用。
echo ‘TMOUT=120’ >> .bashrc
通过执行以下命令应用所有规则:
source .bashrc
43. 备份数据
使用备份实用程序(例如 tar、cat、rsync、scp、LVM 快照等)来存储系统的副本(最好是异地存储),以防系统出现故障。
如果系统受到威胁,您可以从以前的备份中执行数据恢复。
最后,不要忘记,无论您采取多少安全措施和对策来保证系统安全,只要您的机器已插入电源并开机,您就永远不会 100% 完全安全。