[关闭]
@cdmonkey 2022-01-24T06:46:41.000000Z 字数 7870 阅读 1177

主机安全检查合规

系统安全


红帽安全手册:

https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux/7/html/Security_Guide/chap-Hardening_Your_System_with_Tools_and_Services.html
http://zkread.com/article/882248.html
http://0101x.blog.51cto.com/8639108/1365721
http://0101x.blog.51cto.com/8639108/1366043

账号安全

口令锁定策略

http://www.bubuko.com/infodetail_125048.html
http://gm100861.blog.51cto.com/1930562/932527

设定口令认证失败后的锁定策略。

  1. # 首先对操作的目标文件进行备份:
  2. [root@yum-server ~]# cp -a /etc/pam.d/system-auth /etc/pam.d/system-auth_bak
  1. [root@yum-server ~]# vim /etc/pam.d/system-auth
  2. #%PAM-1.0
  3. # This file is auto-generated.
  4. # User changes will be destroyed the next time authconfig is run.
  5. auth required pam_env.so
  6. auth required pam_tally2.so deny=5 onerr=fail no_magic_root unlock_time=180 # Add this line
  7. ...
  8. account required pam_unix.so
  9. account required pam_tally2.so # Add this line
  10. ...

于设定文件中新加上面两行,请一定注意书写位置。

TEST

我们使用app用户通过本地终端登录,连续六次输入错误的密码,提示被锁定:

  1. login: app
  2. Account locked due to 6 failed logins
  1. [root@cdmonkey ~]# pam_tally2 --user=app
  2. Login Failures Latest failure From
  3. app 6 02/24/17 16:22:09 tty1

注意:这个只是限制了用户从tty登录,而没有限制远程登录,如果想限制远程登录,需要改sshd文件。

可人工将计数器清零:

  1. pam_tally2 --user=app --reset

口令生存期

  1. # 首先对操作的目标文件进行备份:
  2. [root@yum-server ~]# cp -a /etc/login.defs /etc/login.defs_bak

主要是修改下面三行的内容:

  1. [root@yum-server ~]# vim /etc/login.defs
  2. ...
  3. PASS_MAX_DAYS 90 # 新建用户的密码最长使用天数不大于90天
  4. PASS_MIN_DAYS 10 # 新建用户的密码最短使用天数为10天
  5. PASS_WARN_AGE 7 # 新建用户的密码到期提前提醒天数为7天

口令复杂度

找不到太多关于该文件的具体说明,但是看文件名应该能够判断出该文件是用于控制系统认证的。其定义了许多PAM命令语句,其主要作用是提示普通用户输入根用户账号的密码并且包括所有用户个人的配置,我们能够于这里面修改限制登录次数并且锁定一段时间。

  1. [root@yum-server ~]# vim /etc/pam.d/system-auth
  2. # 于文件中找到如下内容:
  3. password requisite pam_cracklib.so try_first_pass retry=3 type=

将上面的这行修改为下面的内容:

  1. # 至少包含一个数字、一个小写字母、一个大写字母、一个特殊 字符,并且密码长度要大于等于8
  2. password requisite pam_cracklib.so try_first_pass retry=3 dcredit=-1 lcredit=-1 ucredit=-1 ocredit=-1 minlen=8

上面的cracklib模块能提供额外的密码检查能力,对于密码的复杂度进行详细控制就需要借助于该模块。

删除无关帐号

下面的系统自带的账号应该移除或锁定。这类用户的密码列不是用*或者!!开头的。

lp sync halt news uucp operator games gopher smmsp nfsnobody nobody

三类用户:

如果上面的这些用户没有被删除或锁定,可选用如下的三种操作:

1、直接将用户移除掉

  1. userdel username

2、若不想将上述用户移除,也可将其进行锁定

  1. passwd -l username # 锁定用户,只有具备超级用户权限的使用者方可使用。
  2. passwd d username # 解锁用户,解锁后原有密码失效,登录设置新密码才能登录。
  3. passwd -u username # 解锁用户后,原密码仍然有效。

3、还可修改用户的shell/bin/false

  1. usermod -s /bin/false username

执行下面的指令将上述用户进行锁定,并且将shell设定为/bin/false

  1. for a in lp sync halt news uucp operator games gopher smmsp nfsnobody nobody;do passwd -l $a;done
  2. ----------------
  3. for a in lp sync halt news uucp operator games gopher smmsp nfsnobody nobody;do usermod -s /bin/false $a;done

口令重复次数限制

对于采用静态口令认证技术的设备,应配置设备,使用户不能重复使用最近五次(含五次)内已使用的口令。

  1. [root@yum-server ~]# vim /etc/pam.d/system-auth
  2. # 找到这一行:
  3. password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok

将上面的这行密码控制语句改为:

  1. # 只需于该行的末尾加上 remember=5 参数即可:
  2. password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5

注意:NIS系统无法生效,非NIS系统或NIS+系统能够生效。

禁止管理组之外的用户su为根用户

  1. [root@yum-server ~]# vim /etc/pam.d/su
  2. # 于文件开头加入下面两行(有则修改,没有则新加)
  3. auth sufficient pam_rootok.so
  4. auth required pam_wheel.so use_uid

注意:authsufficient之间由两个tab建隔开,sufficient与动态库路径之间使用一个tab建隔开。

http://blog.csdn.net/cbbbc/article/details/51712913

通常情况下,一般用户通过执行su -命令,输入正确的根用户密码,就能登录成为根用户。但是,为了更进一步加强安全性,有必要创建一个管理员组,只允许该组的用户来执行su -命令登录为根用户,而使得其他组的用户即使是执行了该指令、输入了正确的密码,也无法登录为根用户。这个组的名称通常为wheel

按照上面的方法修改后,普通用户无法登录为根用户:

  1. [app@yum-server ~]$ su -
  2. Password:
  3. su: incorrect password # 总是会提示密码错误,即便输入了正确的密码。

若希望该普通用户能够登录为根用户,需要将其加入到wheel组中:

  1. [root@yum-server ~]# usermod -G wheel app

文件与目录权限

文件与目录缺省权限控制

首先要对操作的目标文件进行备份:

  1. [root@yum-server ~]# cp /etc/profile /etc/profile.bak
  1. [root@yum-server ~]# echo "umask 027" >> /etc/profile
  2. [root@yum-server ~]# source /etc/profile

配置用户最小授权

  1. chmod 644 /etc/passwd
  2. chmod 400 /etc/shadow
  3. chmod 644 /etc/group
  4. chmod 644 /etc/services
  5. chmod 600 /etc/xinetd.conf
  6. chmod 600 /etc/security

设置关键文件的属性

使用命令查看messages文件是否只可追加不可修改:

  1. [root@yum-server ~]# lsattr /var/log/messages
  2. -------------e- /var/log/messages
  1. [root@yum-server ~]# chattr +a /var/log/messages
  2. [root@yum-server ~]# lsattr /var/log/messages
  3. -----a-------e- /var/log/messages

日志安全

记录安全事件日志

  1. [root@yum-server ~]# mkdir -pv /var/adm/
  2. [root@yum-server ~]# touch /var/adm/messages
  3. [root@yum-server ~]# chmod 666 /var/adm/messages
  4. [root@yum-server ~]# echo '*.err;kern.debug;daemon.notice /var/adm/messages' >> \
  5. /etc/rsyslog.conf
  6. [root@yum-server ~]# /etc/init.d/rsyslog restart

日志文件安全

对权限>640的日志文件设定为640的权限。

  1. LOGDIR=`cat /etc/rsyslog.conf | grep -v "^[[:space:]]*#"|awk '{print $2}'|sed 's/^-//g'|grep '^\s*\/'`
  2. ls -l $LOGDIR 2>/dev/null|grep -v "[r-][w-]-[r-]-----"|awk '{print $1" "$8" "$9}'
  3. -rw-rw-rw- 11:24 /var/adm/messages
  4. -rw-r--r-- 2016 /var/log/boot.log

找到这些权限有问题的日志文件后,对其进行修改权限的操作:

  1. [root@yum-server ~]# chmod 640 /var/adm/messages
  2. [root@yum-server ~]# chmod 640 /var/log/boot.log

系统服务

限制根用户SSH远程登录

登陆超时时间设置

如果/etc/profile中有下面的两行则按需要进行修改,没有这两行则写入这两行:

  1. [root@yum-server ~]# echo "TMOUT=300" >> /etc/profile
  2. [root@yum-server ~]# echo "export TMOUT" >> /etc/profile
  3. [root@yum-server ~]# source /etc/profile

清除潜在危险文件

要求系统中不能有这三个文件:.rhosts.netrchosts.equiv。如果使用rlogin进行远程登录,就会需要这三个文件。通常情况下是没有这三个文件的,因而该远程登录方法很少使用了。

使用如下命令查看是否有这三个文件:

  1. find / -maxdepth 3 -name .netrc 2>/dev/null|wc -l
  2. find / -maxdepth 3 -name .rhosts 2>/dev/null|wc -l
  3. find / -maxdepth 3 -name hosts.equiv 2>/dev/null|wc -l

SSH TELNET RLOGIN

Service Explain
Telnet 就是远程登陆,通讯的数据是明文传输,因而不太安全。
SSH 安全的shell,主机间的通讯是加密传输的,这样别人要用网络工具什么来截取包获得信息就困难了。
Rlogin 主机之间的信任关系,如果条件满足,可不用输密码而登陆远程主机。

配置NFS服务限制

如需要nfs服务,则需要设置限制能够访问服务的IP范围。

  1. echo "nfs:"

该安全配置暂时先不执行。

SSH Banner

  1. # Create ssh banner file:
  2. [root@yum-server ~]# touch /etc/ssh_banner
  3. [root@yum-server ~]# chown bin:bin /etc/ssh_banner
  4. [root@yum-server ~]# chmod 644 /etc/ssh_banner
  5. [root@yum-server ~]# echo "Authorized only. All activity will be monitored and reported" > \
  6. /etc/ssh_banner
  7. [root@yum-server ~]# echo "Banner /etc/ssh_banner" >> /etc/ssh/sshd_config
  8. # Restart the service:
  9. [root@yum-server ~]# nohup /etc/init.d/sshd restart &

其中的警告信息可根据实际需要进行修改。还有一处,依据安全扫描标准也需要进行修改:

  1. touch /etc/motd
  2. echo "Authorized users only. All activity may be monitored and reported" > /etc/motd

文件权限

删除任何人都有写权限的文件及目录的写权限

  1. # 查找任何用户都有写权限的文件:
  2. for PART in `grep -v ^# /etc/fstab | awk '($6 != "0") {print $2 }'`;do find $PART -xdev -type f \( -perm -0002 -a ! -perm -1000 \) -xdev -exec ls -ld {} \; 2>/dev/null;done

去掉上面输出文件的其他用户的写权限:

  1. chmod o-w <filename>
  1. # 查找任何用户都有写权限的目录:
  2. for PART in `grep -v ^# /etc/fstab | awk '($6 != "0") {print $2 }'`;do find $PART -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -xdev -exec ls -ld {} \; 2>/dev/null;done

去掉上面输出目录的其他用户的写权限:

  1. chmod o-w <directory>

系统core dump状态

  1. [root@yum-server ~]# echo "* soft core 0" >> /etc/security/limits.conf
  2. [root@yum-server ~]# echo "* hard core 0" >> /etc/security/limits.conf

网络安全

禁止IP源路由

源路由是一种互联网协议机制,可许可IP数据包携带地址列表的信息,以此分辨数据包沿途经过的路由器。通过某一路径时,会出现一可选项,记录为中间路径。所列出的中间路径,即路径记录,可提供返回至源路由路径上的目的地。这就允许源路由可指定某一路径,无论是严格的还是松散的,可忽略路径列表上的一些或全部路由器。它可允许用户恶意重定向网络流量。因而,应禁用源路由。

  1. [root@yum-server ~]# /sbin/sysctl -w net.ipv4.conf.all.accept_source_route=0

控制远程访问的IP地址

首先执行备份:

  1. cp -p /etc/hosts.allow /etc/hosts.allow_bak
  2. cp -p /etc/hosts.deny /etc/hosts.deny_bak
  1. echo "sshd:192.168.1.*:allow" >> /etc/hosts.allow
  2. echo "all:all" >> /etc/hosts.deny # 拒绝一切远程访问配合文件 hosts.allow 使用。

注意:执行该安全配置时千万小心,防止将正常的业务访问阻拦掉。

禁止ICMP重定向

为何要关闭该功能,因为其会导致ICMP重定向攻击,即利用ICMP路由公告功能,攻击者使用该功能可改变攻击目标的路由配置(可造成主机的网络连接异常,被用于流量攻击等严重后果)。

  1. [root@yum-server ~]# echo "net.ipv4.conf.all.accept_redirects = 0" >> /etc/sysctl.conf
  2. [root@yum-server ~]# sysctl -p

更改主机解析地址的顺序

  1. [root@yum-server ~]# vim /etc/host.conf
  2. order hosts, bind
  3. multi on # 指定是否hosts文件中指定的主机能够有多个IP。
  4. nospoof on # 不允许对该服务器进行IP地址欺骗。

历史命令设置

  1. [root@yum-server ~]# vim /etc/profile
  2. # 这两行有则修改,没有则新加:
  3. HISTFILESIZE=5
  4. HISTSIZE=5
  5. # 检查上面两个变量是否被声明为环境变量:
  6. export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL HISTFILESIZE
Entry Expalin
HISTFILESIZE 定义了于.bash_history中保存命令的记录总数,可理解为该文件中最多只有多少行。
HISTSIZE 定义了history命令输出的记录数,即输出.bash_history文件中的最后多少行。
  1. # 执行下面的命令让配置生效:
  2. [root@yum-server ~]# source /etc/profile

设置屏幕锁定

该安全设定只适用于具有图形界面的主机。需要使用gconftool-2指令。

对root为ls、rm设置别名

  1. [root@yum-server ~]# vim .bashrc
  2. # 这两行有则修改,没有则新加:
  3. alias ls='ls -aol'
  4. alias rm='rm -i'

Update bash

请确认bash的版本:

  1. [root@yum-server ~]# bash --version
  2. bash --version
  3. GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
  4. Copyright (C) 2009 Free Software Foundation, Inc.
  5. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
  6. ...

可直接使用Yum进行升级,但并不是最新的版本,若要升级到最新的版本,请进行编译安装升级。

  1. [root@svn-test ~]# cd tools/bash-4.4
  2. [root@svn-test bash-4.4]# ./configure
  3. make && make install
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注