Home | 简体中文 | 繁体中文 | 杂文 | 知乎专栏 | Github | OSChina 博客 | 云社区 | 云栖社区 | Facebook | Linkedin | 视频教程 | 打赏(Donations) | About
知乎专栏多维度架构 微信号 netkiller-ebook | QQ群:128659835 请注明“读者”

第 18 章 Linux 系统安全与优化配置

目录

18.1. Openssh 安全配置
18.1.1. 禁止root用户登录
18.1.2. 限制SSH验证重试次数
18.1.3. 禁止证书登陆
18.1.4. 使用证书替代密码认证
18.1.5. 图形窗口客户端记忆密码的问题
18.1.6. 关闭 GSSAPI
18.1.7. 禁止SSH端口映射
18.1.8. IP地址限制
18.1.9. 禁止SSH密码穷举
18.2. Shell 安全
18.2.1. .history 文件
18.2.2. sudo 安全问题
18.2.3. 临时文件安全
18.2.4. 执行权限
18.3. 防火墙
18.3.1. 策略
18.3.2. 防止成为跳板机
18.3.3. 端口安全
18.3.4. 封锁特定字符串
18.4. Linux 系统资源调配
18.4.1. /etc/security/limits.conf
18.4.2. 关闭写磁盘I/O功能
18.5. PAM 插件认证加固配置
18.5.1. pam_tally2.so
18.5.2. pam_listfile.so
18.5.3. pam_access.so
18.5.4. pam_wheel.so

18.1. Openssh 安全配置

这节主要讲与SSH有关的安全配置

18.1.1. 禁止root用户登录

只允许普通用户登陆,然后通过su命令切换到root用过。后面还会将怎样限制su命令

			
PermitRootLogin no
			
			

18.1.2. 限制SSH验证重试次数

超过3次socket连接会断开,效果不明显,有一点点用。

			
MaxAuthTries 3
			
			

18.1.3. 禁止证书登陆

证书登陆非常安全,但是很有可能正常用户在你不知道情况下,给你安装了一个证书,他随时都可能进入你的系统

任何一个有权限的用户都能很方便的植入一个证书到 .ssh/authorized_keys 文件中

			
PubkeyAuthentication no
AuthorizedKeysFile /dev/null
			
			

18.1.4. 使用证书替代密码认证

是不是自相矛盾? 这个跟上面讲的正好相反,这里只允许使用key文件登陆。

			
PasswordAuthentication no
			
			

这种方式比起密码要安全的多,唯一要注意的地方就是证书被拷贝 ,建议你给证书加上 passphrase。

证书的 passphrase 是可以通过openssl工具将其剥离的,SSH证书我没有试过,但是原理都差不多。

18.1.5. 图形窗口客户端记忆密码的问题

当你使用XShell, Xftp, WinSCP, SecureCRT, SecureFX ......等等软件登录时,该软件都提供记住密码的功能,使你下次再登陆的时候无须输入密码就可以进入系统。这样做的确非常方便,

但是你是否想过你的电脑一旦丢失或者被其他人进入,那有多么危险。我之前每天背着笔记本电脑上班,上面安装着XShell并且密码全部记忆在里面。这使我意识到一点电脑丢失,有多么可怕。

禁止SSH客户端记住密码,你不要要求别人那么做。你也无法控制,最终我找到了一种解决方案。

			
ChallengeResponseAuthentication yes
			
			

每次登陆都回提示你输入密码。密码保存也无效。

18.1.6. 关闭 GSSAPI

			
GSSAPIAuthentication no
#GSSAPIAuthentication yes
#GSSAPICleanupCredentials yes
#GSSAPICleanupCredentials yes
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no
			
			

18.1.7. 禁止SSH端口映射

禁止使用SSH映射Socks5翻墙等等

			
AllowTcpForwarding no
			
			

18.1.8. IP地址限制

只允许通过192.168.2.1,192.168.2.2 访问本机

			
# vim /etc/hosts.allow
sshd:192.168.2.1,192.168.2.2
			
			

禁止所有人访问本机

			
# vim /etc/hosts.deny
sshd:ALL
			
			

上面使白名单策略,你也可以采用黑名单策略。

18.1.9. 禁止SSH密码穷举

骇客常常使用骇客字典穷举你的SSH密码,使用下面脚本可以封杀频繁链接的IP地址

			
#!/bin/bash
########################################
# Homepage: http://netkiller.github.io
# Author: neo <netkiller@msn.com>
########################################
PIPE=/var/tmp/pipe
pidfile=/var/tmp/$0.pid
BLACKLIST=/var/tmp/black.lst
WHITELIST=/var/tmp/white.lst

LOGFILE=/var/log/secure
DAY=5
########################################

if [ -z "$( egrep "CentOS|7." /etc/centos-release)" ]; then
	echo 'Only for CentOS 7.x'
	exit
fi

if [ -f $BLACKLIST ]; then
	find $BLACKLIST -type f -mtime +${DAY} -delete
fi

if [ ! -f ${BLACKLIST} ]; then
    touch ${BLACKLIST}
fi

if [ ! -f ${WHITELIST} ]; then
    touch ${WHITELIST}
fi

for ipaddr in $(grep rhost ${LOGFILE} | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | sort | uniq -c | sort -r -n | head -n 10| awk '{print $2}')
do

    if [ $(grep -c $ipaddr ${WHITELIST}) -gt 0 ]; then
		continue
    fi

    if [ $(grep -c $ipaddr ${BLACKLIST}) -eq 0 ] ; then
		echo $ipaddr >> ${BLACKLIST}
        iptables -I INPUT -p tcp --dport 22 -s $ipaddr -j DROP
        #iptables -I INPUT -s $ipaddr -j DROP
    fi
done