一、禁止ROOT用户远程登录
linux中root用户是超级管理员,可以针对root用户暴力破解密码,这样很不安全,工作中我们一般禁止root用户直接远程登陆,开设一个或多个普通用户,只允许登陆普通用户,如果有需要用root用户,可以su切换root 或者sudo来拥有root权限执行命令。
1、需要编辑/etc/ssh/sshd_config。
vim /etc/ssh/sshd_config
2、找到 PermitRootLogin
改为 PermitRootLogin no
3、保存退出配置文件后,重启sshd服务
systemctl restart sshd.service
二、设置只有指定用户组才能使用su命令切换到root用户
1、新建普通用户,比如baby
useradd baby
2、修改密码
passwd baby
3、将帐号加入wheel组
usermod -G wheel baby
4、设置只允许这个组的帐号,使用su命令切换到root
vi /etc/pam.d/su
找到#auth required pam_wheel.so use_uid
去掉行首的注释符 # 保存退出;
接着vi /etc/login.defs
在最末添加SU_WHEEL_ONLY yes 保存退出即可。
或者执行
echo "SU_WHEEL_ONLY yes">>/etc/login.defs
现在,再建立新的普通帐号,是无法使用su命令切换到root组了。
三、对一些关键文件进行保护
有时候你发现用root权限都不能修改某个文件,大部分原因是曾经用chattr命令锁定该文件了。
chattr命令的作用很大,其中一些功能是由Linux内核版本来支持的,不过现在生产绝大部分跑的linux系统都是2.6以上内核了。
通过chattr命令修改属性能够提高系统的安全性,但是它并不适合所有的目录。
chattr命令不能保护/、/dev、/tmp、/var目录。
lsattr命令是显示chattr命令设置的文件属性。与chmod这个命令相比,chmod只是改变文件的读写、执行权限,更底层的属性控制是由chattr来改变的。
1、防止系统中某个关键文件被修改
chattr +i /etc/passwd /etc/group /etc/shadow /etc/gshadow
如果需要改动时可以使用
chattr -i /etc/passwd /etc/group /etc/shadow /etc/gshadow
2、让某个文件只能往里面追加数据,但不能删除,适用于各种日志文件
chattr +a /var/log/messages
四、设置密码过期时间、修改间隔时间、到期警告时间
对于新添加的用户,用户密码过期时间是从/etc/login.defs中PASS_MAX_DAYS提取的,普通系统默认就是99999,而安全操作系统4.0是90。更改此处,只是让新建的用户默认密码过期时间变化,已有用户密码过期时间仍然不变。
chage [options] user
chage:密码失效是通过此命令来管理的。
参数意思:
-m 密码可更改的最小天数。为零时代表任何时候都可以更改密码。
-M 密码保持有效的最大天数。
-W 用户密码到期前,提前收到警告信息的天数。
-E 帐号到期的日期。过了这天,此帐号将不可用。
-d 上一次更改的日期
-i 停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。
-l 例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。
个人设置的参数:过期时间:90;修改间隔:7;到期警告时间:7
五、安装DenyHosts
当你的linux服务器暴露在外网当中时,服务器就极有可能会遭到互联网上的扫描软件进行扫描,然后试图连接ssh端口进行暴力破解(穷举扫描)。如果遇到这个问题,一款非常有用的工具DenyHosts可以阻止试图猜测SSH登录口令。DenyHosts是用Python写的一个程序,它会分析SSHD的日志文件(Redhat为/var/log/secure等),当发现同一IP在进行多次SSH密码尝试时就会记录IP到/etc/hosts.deny文件,从而达到自动屏蔽该IP的目的。
1、检查安装环境:
1) 判断系统安装的sshd是否支持tcp_wrappers(默认都支持),命令如下:
ldd /usr/sbin/sshd |grep libwrap.so.0
如果有输出:libwrap.so.0 => /lib64/libwrap.so.0 则为支持
2)判断是否有python(centos默认都有):
python -V
只要系统Python版本不小于2.3版本即可(本机版本为Python 2.6.5)。
2、安装DenyHosts
1)下载DenyHosts-2.6.tar.gz并上传到服务器,
wget http://imcat.in/down/DenyHosts-2.6.tar.gz
2)安装
①解压
tar -zxvf DenyHosts-2.6.tar.gz
②安装
cd DenyHosts-2.6 python setup.py install
程序脚本自动安装在:/usr/share/denyhosts目录
库文件安装在:/usr/lib/python2.6/site-packages/DenyHosts目录下
denyhosts.py默认安装在:/usr/bin/目录下
3)设置启动脚本
cd /usr/share/denyhosts/ cp daemon-control-dist daemon-control chown root daemon-control chmod 700 daemon-control
##将denyhosts.cfg-dist中不是以"#"开头的行,写入denyhosts.cfg文件
grep -v "^#" denyhosts.cfg-dist > denyhosts.cfg
编辑denyhosts.cfg
vi denyhosts.cfg
具体配置项可参考以下的配置:
############ THESE SETTINGS ARE REQUIRED ############ ##分析源文件 SECURE_LOG = /var/log/secure ##禁止sshd登陆的IP存放文件 HOSTS_DENY = /etc/hosts.deny ##过多久后清除已经禁止的IP PURGE_DENY = 1d ##监控的服务名 BLOCK_SERVICE = sshd ##表示允许无效用户登录失败的次数 DENY_THRESHOLD_INVALID = 3 ##表示允许普通用户登录失败的次数 DENY_THRESHOLD_VALID = 3 ##表示允许root用户登录失败的次数 DENY_THRESHOLD_ROOT = 3 DENY_THRESHOLD_RESTRICTED = 1 WORK_DIR = /usr/share/denyhosts/data SUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YES ##是否做域名反解 HOSTNAME_LOOKUP=NO LOCK_FILE = /var/lock/subsys/denyhosts
4)将denyhosts添加到系统服务并自动启动
①自启动
vi /etc/rc.local
在末尾添加以下行
/usr/share/denyhosts/daemon-control start
②添加至系统服务
ln -s /usr/share/denyhosts/daemon-control /etc/init.d/denyhosts chkconfig --add denyhosts chkconfig --level 345 denyhosts on
5)启动denyhosts
service denyhosts start
6)查看denyhosts是否运行成功
service denyhosts status
显示:DenyHosts is running with pid = XXXX,即运行成功。
7)至此,denyhosts也就配置完成了;此外将sshd的默认端口修改掉,再结合denyhosts可以防止大部分sshd的暴力破解了。
六、禁止系统响应任何从外部/内部来的ping请求
攻击者一般首先通过ping命令检测此主机或者IP是否处于活动状态 ,如果能够ping通 某个主机或者IP,那么攻击者就认为此系统处于活动状态,继而进行攻击或破坏。如果没有人能ping通机器并收到响应,那么就可以大大增强服务器的安全性,linux下可以执行如下设置,禁止ping请求:
修改文件 /etc/sysctl.conf,在文件末尾增加一行:
net.ipv4.icmp_echo_ignore_all = 1
如果已经有 net.ipv4.icmp_echo_ignore_all 这一行了,直接修改 = 号后面的值即可的 0 表示允许,1 表示禁止。
修改完成后执行 sysctl -p 使新配置生效(重要)。