linux安全基线自查手册

1.Redhat/CentOS 7.x配置模板

1.1 帐号管理

1.1.1 检查是否设置除root之外UID为0的用户
  • 严重级别:中危

  • 理论依据:任何UID为0的帐户都具有系统上的超级用户特权,只有root账号的uid才能为0

  • 配置要求: 除root之外的其他账号UID不能为0

  • 检查步骤
    执行以下命令查看系统中uid为0的账号

    #/bin/cat /etc/passwd | /bin/awk -F: '($3 == 0) { print $1 }'
    

    合规标准
    除root外无其他uid为0的账号则合规,否则不合规。

  • 查看原始结果

    echo "uid0_user=`cat /etc/passwd|grep -iv '^\s*root'|awk -F: '($3 == 0) {print $1}'`"
    
  • 加固方案

    1、执行备份
    #cp –p /etc/passwd /etc/passwd.bak
    #cp –p /etc/shadow /etc/shadow.bak
    #cp –p /etc/group /etc/group.bak
    2、删除除root外其他uid为0的账号【删除之前应确保账号未被其他业务使用】
    #userdel username
    
  • 加固风险等级:无害

1.1.2 检查是否按用户分配账号
  • 严重级别:中危

  • 理论依据:应按照不同的用户分配不同的账号,避免不同用户间共享账号,避免用户账号和设备间通信使用的账号共享。

  • 检查步骤

  • 1、使用如下命令查看文件/etc/login.defs,确认文件中变量UID_MIN和UID_MAX的值:
    #grep -v ^# /etc/login.defs |grep "^UID_MIN"|awk '($1="UID_MIN"){print $2}'
    #grep -v ^# /etc/login.defs |grep "^UID_MAX"|awk '($1="UID_MAX"){print $2}'
     2、使用以下命令查看系统中是否存在用户id>=UID_MIN且<=UID_MAX的用户:
    #up_uidmin=`(grep -v ^# /etc/login.defs |grep "^UID_MIN"|awk '($1="UID_MIN"){print $2}')`
    #up_uidmax=`(grep -v ^# /etc/login.defs |grep "^UID_MAX"|awk '($1="UID_MAX"){print $2}')`
    #echo "users="`cat /etc/passwd|awk -F: '{if( $3>='$up_uidmin' && $3<='$up_uidmax' ) {print $1":"$3}}'`
    
  • 合规标准:存在用户id>=UID_MIN且<=UID_MAX的用户则合规,否则不合规。

  • 加固方案:

    创建用户
    #useradd username    #创建账号
    #passwd  username    #设置密码修改权限
    

加固风险等级:无害

1.1.3检查是否删除与设备运行、维护等工作无关的账号
  • 严重级别:信息

  • 理论依据:应删除或锁定与设备运行、维护等工作无关的账号。

  • 检查步骤:

    执行如下命令查看系统未锁定的账号:
    #cat /etc/shadow|sed '/^\s*#/d'|awk -F: '($2!~/^*/) && ($2!~/^!!/) {print $1}'
    
  • 合规标准:人工确认项,用户依据实际情况判断未锁定的账号是否存在与设备运行、维护工作无关的账号。

  • 加固方案

1、删除用户:
#userdel username
2、锁定用户:
#passwd -l username      #锁定用户,只有具备超级用户权限的使用者方可使用。
#passwd –d username      #解锁用户,解锁后原有密码失效,登录设置新密码才能登录。
#passwd -u username      #解锁用户后,原密码仍然有效。
3、修改用户shell域为/bin/false
#usermod -s /bin/false username  #命令来更改相应用户的shell为/bin/false,其中[name]为要修改的具体用户名。
  • 加固风险等级:无害

1.2 口令策略

1.2.1 检查是否设置口令生存周期
  • 严重级别:高危

  • 理论依据:攻击者利用网络暴力攻击的机会,通过网络暴力攻击的机会窗口,受到密码生存周期的限制。因此,减少密码的最大年龄也会减少攻击者的机会窗口。

  • 配置要求:建议将PASS_MAX_DAYS参数设置为小于或等于90天。

  • 检测步骤:

     查看文件/etc/login.defs,检查如下参数值是否满足要求:
     PASS_MAX_DAYS
    
     合规标准:
     PASS_MAX_DAYS不大于90则合规,否则不合规。
    
  • 加固方案

1、执行备份:
#cp -p /etc/login.defs /etc/login.defs_bak
2、修改策略设置,编辑文件/etc/login.defs,在文件中加入如下内容(如果存在则修改,不存在则添加):
PASS_MAX_DAYS 90
  • 加固风险等级:无害
  • 加固风险说明:如果密码最长使用期限设置过低,用户就需要经常更改密码。这样的配置会减少组织中的安全性,因为用户可能会在一个不安全的位置写下他们的密码,或者丢失他们的密码。如果该策略设置的值过高,则会降低组织内的安全级别,因为它允许潜在的攻击者有更多的时间来发现用户密码或使用受攻击的帐户。
1.1.2 检查是否设置口令更改最小间隔天数
  • 严重级别:高危

  • 理论依据:通过限制密码更改的频率,管理员可以防止用户重复更改密码,从而避免密码重用控制。

  • 配置要求:建议将参数PASS_MIN_DAYS设置为不小于7天。

  • 检测步骤:

     查看文件/etc/login.defs,检查如下参数值是否满足要求:
     PASS_MIN_DAYS
    
     合规标准:
     PASS_MIN_DAYS不小于7天则合规,否则不合规。
    
  • 加固方案

    1、执行备份:
    #cp -p /etc/login.defs /etc/login.defs_bak
    2、修改策略设置,编辑文件/etc/login.defs,在文件中加入如下内容(如果存在则修改,不存在则添加):
    PASS_MIN_DAYS 7
    
  • 加固风险等级:无害

1.2.3 检查设备密码复杂度策略
  • 严重级别:高危

  • 理论依据:强大的密码保护系统不被暴力破解。

  • 配置要求:
    pam_cracklib模块检查密码的强度。它执行检查,例如确保密码不是字典单词,它是一定长度的,包含字符的混合(如字母、数字、其他)等
    retry= 3 -在返回失败前允许3次尝试。
    minlen = 14 -密码必须是14个字符或更多
    dcredit = - 1 -提供至少1位数字
    ucredit = - 1 -提供至少一个大写字符
    ocredit = - 1 -提供至少一个特殊字符
    lcredit = - 1 -提供至少一个小写字符

  • 检测步骤: 查看文件/etc/pam.d/system-auth,确认密码强度校验配置。

  • 合规标准: 密码长度>=8,且至少包含大写字母、小写字母、数字、特殊字符中的3类则合规,否则不合规。

  • 加固方案

    1、配置文件备份
    #cp /etc/pam.d/system-auth /etc/pam.d/system-auth.bak
    2、编辑配置文件/etc/pam.d/system-auth,在文件中找到开头为如下字样的内容:
    password requisite  pam_cracklib.so
    将其修改为:
    password requisite  pam_cracklib.so try_first_pass retry=3 minlen=8 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1 #口令长度不小于8,至少包含1位数字、大写字母、特殊字符、小写字母。
    
  • 加固风险等级:无害

1.2.4 检查是否设置口令过期前警告天数
  • 严重级别:高危

  • 理论依据:提供一个预先警告,密码将会到期给用户时间来考虑一个安全的密码。不知情的用户可能会选择一个简单的密码,或者把它写在可能被发现的地方。

  • 配置要求:建议将参数PASS_WARN_AGE设置为7天。

  • 检测步骤:

    检测步骤:
    查看文件/etc/login.defs,检查如下参数值是否满足要求:
    PASS_WARN_AGE
    
  • 合规标准:PASS_WARN_AGE等于7天则合规,否则不合规。

  • 加固方案

    1、执行备份:
    #cp -p /etc/login.defs /etc/login.defs_bak
    2、修改策略设置,编辑文件/etc/login.defs,在文件中加入如下内容(如果存在则修改,不存在则添加):
    PASS_WARN_AGE 7
    
  • 加固风险等级:无害

1.2.5 检查是否存在空口令账号
  • 严重级别:高危
  • 理论依据:所有帐户都必须有密码以防止帐户被未经授权的用户使用。
  • 配置要求:不允许存在空口令的账号。
  • 检查步骤
执行以下命令查看系统中是否存在空口令账号
#/bin/cat /etc/shadow | /bin/awk -F: '($2 == "" ) { print "user " $1 " does not have a password "}'
  • 合规标准:不存在空口令的账号则合规,否则不合规。

  • 加固方案

    1、执行备份
    #cp -p /etc/passwd /etc/passwd.bak
    #cp -p /etc/shadow /etc/shadow.bak
    2、为帐户设置满足密码复杂度的密码
    #passwd username
    
  • 加固风险等级:无害

1.2.6 检查密码重复使用次数限制
  • 严重级别:中危
  • 理论依据:强迫用户不重用他们过去的5个密码就不太可能让攻击者猜出密码。请注意,这些更改只适用于在本地系统上配置的帐户。
  • 配置要求:对于采用静态口令认证技术的设备,应配置设备,使用户不能重复使用最近5次(含5次)内已使用的口令。
  • 检查步骤: 查看文件/etc/pam.d/system-auth,是否有配置口令重复使用次数限制。
  • 合规标准:口令重复使用次数限制不小于5次则合规,否则不合规。
  • 加固方案
1、配置文件备份
#cp -p /etc/pam.d/system-auth /etc/pam.d/system-auth.bak
2、创建文件/etc/security/opasswd用于存储旧密码,并设置权限。
#touch /etc/security/opasswd
#chown root:root /etc/security/opasswd
#chmod 600 /etc/security/opasswd
3、编辑文件/etc/pam.d/system-auth,找到类似行password  sufficient pam_unix.so,在行末尾增加remember=5,中间以空格隔开.如果没有则新增。
password sufficient pam_unix.so remember=5
  • 加固风险等级:无害
1.2.7 检查账户认证失败次数限制

严重级别:中危

配置要求:对于采用静态口令认证技术的设备,应配置当用户连续认证失败次数超过6次(不含6次),锁定该用户使用的账号。

检查步骤

查看文件/etc/pam.d/system-auth,检查是否存在如下内容:
 auth required pam_tally2.so deny=5 onerr=fail no_magic_root unlock_time=180
 account required pam_tally2.so

合规标准:用户连续认证失败次数设置为5则合规,否则不合规。

加固方案

参考配置操作
1、执行备份
#cp -p /etc/pam.d/system-auth /etc/pam.d/system-auth_bak
2、修改策略设,编辑文件/etc/pam.d/system-auth增加如下内容:
auth required pam_tally2.so deny=5 onerr=fail no_magic_root unlock_time=180
#unlock_time单位为秒
account  required  pam_tally2.so     #(redhat5.1以上版本支持 pam_tally2.so,其他版本使用pam_tally.so)
  • 加固风险等级:无害

1.3 认证授权

严重级别:高危

理论依据:为umask设置一个非常安全的默认值,确保用户对其文件权限做出一个有意识的选择。

配置要求:控制用户缺省访问权限,当在创建新文件或目录时,应屏蔽掉新文件或目录不应有的访问允许权限,防止同属于该组的其它用户及别的组的用户修改该用户的文件或更高限制。

检查步骤:查看文件/etc/profile,是否设置文件目录缺省权限。

合规标准:/etc/profile文件末尾存在umask 027,则合规,否则为不合规。

加固方案

1、执行备份
#cp /etc/profile /etc/profile.bak
2、编辑文件/etc/profile,在文件末尾加上如下内容:
umask 027
3、执行以下命令让配置生效:
#source  /etc/profile

加固风险等级:无害

1.3.2 检查是否设置SSH登录前警告Banner
  • 严重级别:中危
  • 理论依据:横幅被用来警告用户连接特定站点的策略。咨询你的法律部门,为你的网站提供适当的警告横幅。
  • 配置要求:SSH登录时显示警告信息,在登录成功前不泄漏服务器信息。
  • 检查步骤:查看文件/etc/ssh/sshd_config,检查是否存在如下配置:banner <file_path>,且<file_path>内容不为空。
  • 合规标准: ssh服务器未启用或者服务启用但设置了SSH banner警示信息则合规,否则不合规。
  • 加固方案
1、编辑文件/etc/ssh/sshd_config文件,修改Banner参数的值如下(如不存在则新增):
Banner /etc/ssh_banner
2、执行如下命令创建SSH banner警示信息文件:
#touch /etc/ssh_banner
#chmod 644 /etc/ssh_banner
#echo "Authorized only. All activity will be monitored and reported" > /etc/ssh_banner
可根据实际需要修改该文件的内容。
3、重启sshd服务:
#/etc/init.d/sshd restart

1.4 日志审计

1.4.1 检查是否对登录进行日志记录
  • 严重级别:高危

  • 配置要求:设备应配置日志功能,对用户登录进行记录,记录内容包括用户登录使用的账号,登录是否成功,登录时间,以及远程登录时,用户使用的IP地址。

  • 检查步骤

     查看文件/etc/rsyslog.conf,是否存在如下类似配置:
     authpriv.* /var/log/secure或者 authpriv.info /var/log/secure
    
  • 合规标准:配置记录了登录日志则合规,否则不合规。

  • 加固方案

    1、编辑文件/etc/rsyslog.conf,增加如下配置(有则修改,无则添加):
    authpriv.*   /var/log/secure或者authpriv.info      /var/log/secure
    2、创建日志文件,并赋予其权限
    #touch /var/log/secure
    #chmod 600 /var/log/secure
    3、重启syslog服务
    #/etc/init.d/rsyslog restart
    
  • 加固风险等级:无害

1.4.2 检查是否启用cron行为日志功能
  • 严重级别:信息

  • 配置要求:启用记录cron行为日志功能。

  • 检查步骤

     查看文件/etc/rsyslog.conf,是否存在如下类似配置:
     cron.* /var/log/cron
    
  • 合规标准:配置记录了cron日志则合规,否则不合规。

  • 加固方案

    1、编辑文件/etc/rsyslog.conf,增加如下配置(有则修改,无则添加):
    cron.*  /var/log/cron
    2、创建日志文件,并赋予其权限
    #touch /var/log/cron
    #chmod 600 /var/log/cron
    3、重启syslog服务
    #/etc/init.d/rsyslog restart
    
  • 加固风险等级:无害

1.4.3 检查是否配置远程日志功能
  • 严重级别:信息

  • 理论依据:在远程主机上存储日志数据保护日志完整性免受本地攻击。如果攻击者在本地系统上获得根访问权,他们可以篡改或删除存储在本地系统上的日志数据

  • 检查步骤

    查看文件/etc/rsyslog.conf,检查是否存在类似配置:
     *.* @<LogServer_address>
    
  • 合规标准:配置了远程日志服务器则合规,否则不合规。

  • 加固方案

    1、编辑文件/etc/rsyslog.conf,添加如下配置:
    *.*  @<LogServer_address>
    2、重启syslog服务
    #/etc/init.d/rsyslog restart
    
  • 加固风险等级:无害

1.4.4 检查是否配置su命令使用情况记录
  • 严重级别:信息

  • 配置要求:启用syslog系统日志审计功能。

  • 检查步骤

    查看文件/etc/rsyslog.conf,是否存在如下类似配置:
    authpriv.* /var/log/secure或者authpriv.info /var/log/secure
    
  • 合规标准:配置记录了su命令使用情况则合规,否则不合规。

  • 加固方案

1、编辑文件/etc/rsyslog.conf,增加如下配置(有则修改,无则添加):
authpriv.*   /var/log/secure或者authpriv.info      /var/log/secure
2、创建日志文件,并赋予其权限
#touch /var/log/secure
#chmod 600 /var/log/secure
3、重启syslog服务
#/etc/init.d/rsyslog restart
  • 加固风险等级:无害
1.4.5 检查日志文件权限设置
  • 严重级别:中危

  • 配置要求:设备应配置权限,控制对日志文件读取、修改和删除等操作

  • 检查步骤:

     1、 查看/etc/rsyslog.conf中设置的日志存放文件,
     /var/log/messages 系统日志
     /var/log/maillog  邮件系统日志
     /var/log/secure  安全信息,系统登录与网络连接的信息
     /var/log/dmesg  核心启动日志
     /var/log/wtmp   登录记录
     /var/log/cron   cron(定制任务日志)日志
     2、 查看日志文件的权限:
    #ls -la /var/log/messages
    #ls -la /var/log/dmesg
    #ls -la /var/log/maillog
    #ls -la /var/log/secure
    #ls -la /var/log/wtmp
    #ls -la /var/log/cron
    
  • 合规标准:
    /var/log/messages、/var/log/secure、/var/log/maillog、/var/log/cron文件权限不大于600
    /var/log/dmesg文件权限不大于644
    /var/log/wtmp文件权限不大于664
    以上日志文件权限均满足要求则合规,否则不合规

  • 加固方案

    1、备份需要修改权限的日志文件
    2、设置文件权限
    #chmod 600 /var/log/messages
    #chmod 644 /var/log/dmesg
    #chmod 600 /var/log/maillog
    #chmod 600 /var/log/secure
    #chmod 664 /var/log/wtmp
    #chmod 600 /var/log/cron
    
  • 加固风险等级:无害

1.4.6 检查安全事件日志配置
  • 严重级别:信息

  • 配置要求:设备应配置日志功能,记录对与设备相关的安全事件。

  • 检查步骤

    查看文件etc/rsyslog.conf,检查文件中是否存在如下内容:
    *.err;kern.debug;daemon.notice /var/adm/messages
    
  • 合规标准:配置了记录安全事件日志则合规,否则不合规。

  • 加固方案

    1、编辑etc/rsyslog.conf,在文件中加入如下内容:
    *.info;mail.none;authpriv.none;cron.none                /var/log/messages
    其中/var/log/messages为日志文件,如果该文件不存在,则创建该文件,命令为:
    #touch /var/log/messages
    2、修改权限为600,命令为:
    #chmod 600 /var/adm/messages
    3、重启日志服务:
    #/etc/init.d/syslog restart
    
  • 加固风险等级:无害

1.5 文件权限

1.5.1 检查FTP用户上传的文件所具有的权限
  • 严重级别:中危

  • 配置要求: 设置FTP用户登录后对文件目录的存取权限。

  • 检查步骤:
    查看配置文件/etc/vsftpd/vsftpd.conf,查看是否存在控制用户上传文件权限的配置。
    local_umask #控制用户上传文件权限参数
    anon_umask #控制匿名用户上传文件权限参数

  • 合规标准
    1、FTP进程不存在。
    2、ftp用户和匿名用户上传文件的权限为022.
    以上2个条件同时满足则合规,否则不合规。

  • 加固方案

    1、编辑文件:/etc/vsftpd/vsftpd.conf,对如下两个参数的值进行修改,如果参数不存在则手工添加。
    local_umask=022      #设置用户上传文件的权限
    anon_umask=022       #设置匿名用户上传文件的权限
    2、重启ftp服务
    #service vsftpd restart
    
  • 加固风险等级:无害

1.5.2 检查重要目录或文件权限设置
  • 严重级别:中危

  • 配置要求:在设备权限配置能力内,根据用户的业务需要,配置其所需的最小权限。

  • 检查步骤

    使用以下命令查看如下文件的权限设置:
    #ls -lL /etc/passwd 2>/dev/null
    #ls -lL /etc/shadow 2>/dev/null
    #ls -lL /etc/group 2>/dev/null
    
  • 合规标准
    1、/etc/passwd文件的权限小于等于644
    2、/etc/shadow文件的权限小于等于400
    3、/etc/group文件的权限小于等于644
    以上条件同时满足则合规,否则不合规。

  • 加固方案

    1、赋予用户相关账号文件最小权限
    #chmod 644 /etc/passwd
    #chmod 400 /etc/shadow
    #chmod 644 /etc/group
    

1.6 网络通信

1.6.1 检查是否禁止root用户远程登录
  • 严重级别:高危

  • 理论依据:在SSH上不允许root登录,需要服务器管理员使用自己的帐户进行身份验证,然后通过sudo或su升级到根,这反过来限制了不可抵赖的机会,并在发生安全事件时提供了清晰的审计线索.

  • 配置要求:限制具备超级管理员权限的用户远程登录,远程执行管理员权限操作,应先以普通权限用户远程登录后,再切换到超级管理员权限账号后执行相应操作。

  • 检查步骤
    1、查看文件/etc/ssh/sshd_config,是否存在拒绝root用户通过SSH协议远程登录的配置。
    2、执行以下命令查看ssh协议版本是否为2。
    #grep -v "[1]*#" /etc/ssh/sshd_config|grep -i "^protocol"

  • 合规标准
    ssh协议拒绝root用户远程登录,且使用的是协议SSH 2则合规,否则不合规。

  • 加固方案

    1、执行备份:
    #cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config_bak
    2、新建一个普通用户并设置高强度密码(防止设备上只存在root用户可用时,无法远程访问):
    #useradd username
    #passwd username
    3、禁止root用户远程登录系统
    编辑文件/etc/ssh/sshd_config,修改PermitRootLogin值为no并去掉注释。
    PermitRootLogin no
    4、重启SSH服务
    #/etc/init.d/sshd restart
    
  • 加固风险等级:无害

1.6.2 检查使用IP协议远程维护的设备是否配置SSH协议,禁用Telnet协议
  • 严重级别:高危

  • 配置要求:对于使用IP协议进行远程维护的设备,设备应配置使用SSH等加密协议,并安全配置SSHD的设置。

  • 检查步骤
    使用以下命令查看telnet和ssh服务状态:
    #chkconfig --list |grep "telnet|ssh"

  • 判定条件
    SSH服务启用,Telnet服务关闭则合规,否则不合规。

  • 加固方案

    1、关闭Telnet服务:
    1)、备份
    #cp -p /etc/xinetd.d/telnet /etc/xinetd.d/telnet_bak
    2)、编辑文件/etc/xinetd.d/telnet,把disable项改为yes.
    3)、执行以下命令重启xinetd服务。
    #service xinetd restart
    2、开启SSH服务:
    #/etc/init.d/sshd start
    
  • 加固风险等级:无害

1.6.3 检查是否修改SNMP默认团体字
  • 严重级别:中危

  • 配置要求:
    如果没有必要,需要停止SNMP服务,如果确实需要使用SNMP服务,需要修改SNMP Community。

  • 检查步骤
    1、查看snmpd进程是否存在。
    #ps -ef|grep "snmpd"|grep -v "grep"
    2、查看文件/etc/snmp/snmpd.conf,检查SNMP团体名配置。

  • 合规标准
    SNMP服务未开启或者修改了默认的团体名则合规,否则不合规。

  • 加固方案

    参考配置操作
    1、修改snmp配置文件/etc/snmp/snmpd.conf找到类似如下配置,修改默认团体名public为其他用户自己可识别的字符串。
    com2sec notConfigUser  default  public   #<notConfigUser>为连接snmp的用户名 <default>为可以连接snmp的地址范围 <public>为团体名
    2、重启snmp服务
    #service snmpd restart
    
  • 加固风险等级:无害

1.6.4 检查是否禁止root用户登录FTP
  • 严重级别:中危

  • 配置要求:
    控制FTP进程缺省访问权限,当通过FTP服务创建新文件或目录时应屏蔽掉新文件或目录不应有的访问允许权限。

  • 检查步骤:
    查看配置文件/etc/pam.d/vsftpd,检查是否禁止root账号登录ftp服务器。

  • 合规标准:
    ftp服务未启用或者禁止了root账号登录ftp服务器则合规,否则不合规。

  • 加固方案

    加固方案	1、修改ftpusers文件,增加不能通过FTP登录的用户
    1)、首先需确定ftpusers文件位置,可以通过以下命令知道
    #cat /etc/pam.d/vsftpd
    auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd.ftpusers onerr=succeed
    #其中file=/etc/vsftpd/ftpusers即为当前系统上的ftpusers文件.
    2)、修改file对应的文件在文件中增加以下用户,则该用户均不允许通过FTP登录(每隔用户占一行):
    root
    2、重启FTP服务
    #service snmpd restart
    
1.6.5 检查是否使用PAM认证模块禁止wheel组之外的用户su为root
  • 严重级别:高危

  • 配置要求:使用PAM禁止任何人su为root。

  • 检查步骤
    执行命令cat /etc/pam.d/su,查看文件中是否存在如下配置:
    auth sufficient pam_rootok.so
    auth required pam_wheel.so group=wheel

  • 合规标准
    只允许wheel组的用户才能su为root则合规,否则不合规。

  • 加固方案

    1、编辑文件/etc/pam.d/su
    在文件开头加入如下两行(有则修改,没有则添加):
    auth            sufficient      pam_rootok.so
    auth            required        pam_wheel.so use_uid
    #注意auth与sufficient之间由两个tab建隔开,sufficient与动态库路径之间使用一个tab建隔开
    说明:(这表明只有wheel组中的用户可以使用su命令成为root用户。你可以把用户添加到wheel组,以使它可以使用su命令成为root用户。)
    添加方法:
    #usermod -G wheel username            #username为需要添加至wheel组的账户名称。
    
  • 加固风险等级:无害

1.7 其他配置

1.7.1 检查是否禁止匿名用户登录FTP
  • 严重级别:高危
  • 配置要求:禁止匿名用户登录FTP服务器。
  • 检查步骤:
    查看配置文件/etc/vsftpd/vsftpd.conf,是否存在匿名账号登录ftp服务器的配置。
  • 合规标准:
    FTP服务未启用或者限制了匿名账号登录ftp服务器则合规,否则不合规。
  • 加固方案
加固方案	1、编辑文件/etc/vsftpd/vsftpd.conf,修改参数anonymous_enable的值为NO:
anonymous_enable=NO
2、重启FTP服务
  • 加固风险等级:无害
1.7.2 检查是否删除了潜在危险文件
  • 严重级别:高危
  • 理论依据:
    限制.rhosts、.netrc和/etc/hosts.equiv文件的使用。r系列命令使用这些文件来访问系统。
  • 配置要求:
    .rhosts,.netrc,hosts.equiv等文件都具有潜在的危险,如果没有应用,应该删除。
  • 检查步骤:
    使用locate命令查看系统是否存在如下文件".rhost、.netrc、hosts.equiv"
    #locate .rhost
    #locate .netrc
    #locate hosts.equiv
  • 合规标准:
    系统不存在".rhost、.netrc、hosts.equiv"这三个文件则合规,否则不合规。
  • 加固方案
此项检查若不合规,请使用rm命令删除如下三个文件:
.rhost、.netrc、hosts.equiv
  • 加固风险等级:无害
1.7.3 检查是否设置命令行界面超时退出
  • 严重级别:高危
  • 理论依据:
    对于具备字符交互界面的设备,应配置定时帐户自动登出,避免管理员忘记注销登录,减少安全隐患。
  • 配置要求:
    设置命令行界面登录后300s内无任何操作自动登出。
  • 检查步骤
    查看/etc/profile文件中是否配置超时设置:
    #cat /etc/profile |grep -i TMOUT
  • 合规标准
    命令行界面超时自动登录时间设置为不大于300s则合规,否则不合规。
  • 加固方案
1、执行备份
#cp -p /etc/profile /etc/profile_bak
2、在/etc/profile文件中增加如下两行(存在则修改,不存在则添加):
TMOUT=300
export TMOUT
3、执行以下命令使TMOUT参数立即生效
#source /etc/profile
  • 加固风险等级:无害
1.7.4 检查系统是否禁用Ctrl+Alt+Delete组合键

严重级别:中危

配置要求:
禁止Ctrl+Alt+Delete,防止非法重新启动服务器。

检查步骤
查看文件/usr/lib/systemd/system/ctrl-alt-del.target,是否存在使用组合键Ctrl+Alt+Delete控制系统重启的配置。
Alias=ctrl-alt-del.target

合规标准
禁用了使用组合键Ctrl+Alt+Delete重启系统则合规,否则不合规。

加固方案

编辑文件/usr/lib/systemd/system/ctrl-alt-del.target,将如下行删除或注释:
Alias=ctrl-alt-del.target
1.7.5 检查root用户的path环境变量
  • 严重级别:中危

  • 配置要求:
    root用户环境变量的安全性。

  • 检查步骤
    使用命令echo $PATH查看PATH环境变量的值,确认PATH环境变量中是否存在.或者..的路径:
    .:/usr/bin:..:/usr/sbin

  • 合规标准
    $PATH环境变量中不存在.或者..的路径则合规,否则不合规。

  • 加固方案

    1、修改文件/etc/profile或/root/.bash_profile
    修改环境变量$PATH,删除环境变量值包含的(.和..)的路径。
    
  • 加固风险等级:无害

1.7.6 检查历史命令设置
  • 严重级别:中危
  • 配置要求:
    保证bash shell保存少量的(或不保存)命令,保存较少的命令条数,减少安全隐患。
  • 检查步骤
    编辑文件/etc/profile查看是否存在如下内容:
    HISTFILESIZE=5
    HISTSIZE=5
  • 合规标准
    HISTFILESIZE和HISTSIZE的值小于等于5则合规,否则不合规。
  • 加固方案
1、编辑文件/etc/profile,在文件中加入如下两行(存在则修改):
HISTFILESIZE=5  #HISTFILESIZE 定义了在 .bash_history 中保存命令的记录总数,可以理解为.bash_history文件中最多只有HISTFILESIZE行
HISTSIZE=5      #定义了 history 命令输出的记录数,即输出.bash_history文件中的最后HISTSIZE行

2、执行以下命令让配置生效
#source /etc/profile
  • 加固风险等级:无害
1.7.7 检查是否设置SSH成功登录后Banner
  • 严重级别:低危

  • 配置要求:
    用户通过网络或者本地成功登录系统后,显示一些警告信息。

  • 检查步骤
    1、执行以下命令验证SSH服务是否开启
    #/etc/init.d/sshd status
    2、如果SSH服务开启,请查看文件/etc/motd中是否设置banner信息。

  • 合规标准
    1、SSH服务未开启
    2、SSH开启,且文件/etc/motd不为空
    二者满足其一则合规,否则不合规。

  • 加固方案

    1、修改文件/etc/motd的内容,如没有该文件,则创建它:
    #touch /etc/motd
    2、使用如下命令在文件/etc/motd中添加banner信息。
    #echo " Authorized users only. All activity may be monitored and reported " > /etc/motd
    可根据实际需要修改该文件的内容。
    
  • 加固风险等级:无害

1.7.8 检查是否限制FTP用户登录后能访问的目录
  • 严重级别:低危
  • 配置要求:
    应该从应用层面进行必要的安全访问控制,比如FTP服务器应该限制FTP可以使用的目录范围。
  • 检查步骤
    查看配置文件/etc/vsftpd/vsftpd.conf,检查是否限制用户登录后能够访问的目录范围。
    chroot_local_user=NO
    chroot_list_enable=YES
    chroot_list_file=/etc/vsftpd/chroot_list
    备注:
    chroot_local_user是否将所有用户限制在主目录,YES为启用 NO禁用.(该项默认值是NO,即在安装vsftpd后不做配置的话,ftp用户是可以向上切换到要目录之外的)
    chroot_list_enable是否启动限制用户的名单 YES为启用 NO禁用(包括注释掉也为禁用)
    chroot_list_file是否限制在主目录下的用户名单,至于是限制名单还是排除名单,这取决于chroot_local_user的值,我们可以这样记忆: chroot_local_user总是一个全局性的设定,其为YES时,全部用户被锁定于主目录,其为NO时,全部用户不被锁定于主目录。那么我们势必需要在全局设定下能做出一些“微调”,即,我们总是需要一种“例外机制",所以当chroot_list_enable=YES时,表示我们“需要例外”。而”例外“的含义总是有一个上下文的,即,当”全部用户被锁定于主目录“时(即chroot_local_user=YES),"例外"就是:不被锁定的用户是哪些;当"全部用户不被锁定于主目录"时(即chroot_local_user=NO),"例外"“就是:要被锁定的用户是哪些。这样解释和记忆两者之间的关系就很清晰了!
  • 合规标准
    1、ftp服务未运行
    2、ftp服务运行,启用了所有用户限制在主目录
    3、ftp服务运行同时未启用所有用户限制在主目录,则应该启用限制用户的名单,同时将要限制在主目录的用户列表添加到参数chroot_list_file对应的文件中。格式:每行一个用户名。
    以上三个条件满足其中一个则合规,否则不合规。
  • 加固方案
有两种方法:
方法1)
1、编辑配置文件/etc/vsftpd/vsftpd.conf,修改参数chroot_local_user的值为YES
chroot_local_user=YES
2、重启ftp服务
#/etc/init.d/vsftpd restart

方法2)
1、编辑配置文件/etc/vsftpd/vsftpd.conf,修改参数chroot_list_enable的值YES
chroot_list_enable=YES
2、同时将chroot_list_file所在行注释去掉
chroot_list_file=/etc/vsftpd/chroot_list
3、如果文件/etc/vsftpd/chroot_list不存在则创建:
touch /etc/vsftpd/chroot_list
4、将需要把活动目录限制在主目录的ftp用户添加到文件/etc/vsftpd/chroot_list中,每行一个用户名。
5、重启ftp服务
#/etc/init.d/vsftpd restart
  • 加固风险等级:无害
1.7.9 检查是否限制远程登录IP范围
  • 严重级别:信息

  • 配置要求:
    对于通过IP协议进行远程维护的设备,设备应支持对允许登录到该设备的IP地址范围进行设定。

  • 检查步骤
    查看/etc/hosts.allow和/etc/hosts.deny两个文件中是否设定了IP范围限制:
    #cat /etc/hosts.allow
    #cat /etc/hosts.deny

  • 合规标准
    1、/etc/hosts.allow中设置了允许访问的IP地址范围。
    2、/etc/hosts.deny中设置了拒绝所有远程访问。
    两者同时满足则合规,否则不合规。

  • 加固方案

    1、执行备份:
    #cp -p /etc/hosts.allow /etc/hosts.allow_bak
    #cp -p /etc/hosts.deny /etc/hosts.deny_bak
    2、编辑/etc/hosts.allow文件,增加一行 service: 允许访问的IP(service为服务,例如sshd),举例如下:all:192.168.4.44:allow    #允许单个IP访问所有服务进程
    sshd:192.168.1.*:allow    #允许192.168.1.0的整个网段访问SSH服务进程
    #编辑文件/etc/hosts.deny增加一行(deny优先级高于allow)
    all:all                        #拒绝一切远程访问配合文件hosts.allow使用。
    注:以上内容仅供参考,请根据实际网段和需求进行实施。
    
  • 加固风险等级:无害

1.7.10 检查是否关闭数据包转发功能
  • 严重级别:信息

  • 配置要求:
    对于不做路由功能的系统,应该关闭数据包转发功能。

  • 检查步骤
    使用如下命令查看net.ipv4.ip_forward的值:
    #sysctl -n net.ipv4.ip_forward

  • 合规标准
    net.ipv4.ip_forward的值为0表示合规,否则不合规。

  • 加固方案

    1、备份文件:
    #cp -p /etc/sysctl.conf /etc/sysctl.conf_bak
    2、编辑文件sysctl.conf加上
    net.ipv4.ip_forward=0
    3、使配置文件生效
    #sysctl -p
    
  • 加固风险等级:无害

1.7.11 检查别名文件/etc/aliase
  • 严重级别:信息

  • 配置要求:
    为ls设置别名使得root可以清楚的查看文件的属性(包括不可更改等特殊属性),为rm设置别名使得root在删除文件时进行确认,避免误操作。

  • 检查步骤
    执行以下操作查看系统是否为root设置rm和ls别名设置:
    #echo $SHELL
    1)、如果输出csh:
    #vi ~/.cshrc 是否存在如下内容:
    alias ls='ls -aol'
    alias rm='rm -i'

    2)、如果输出bash:
    # vi ~/.bashrc查看是否存在如下内容:
    alias ls='ls -aol'
    alias rm='rm -i'

  • 合规标准
    给root用户配置了ls和rm命令别名则合规,否则不合规。

  • 加固方案

    1、#echo $SHELL
    1)、如果输出csh:
    #vi ~/.cshrc 在文件末尾增加如下两行
    alias ls='ls -aol'
    alias rm='rm -i'
    2)、如果输出bash:
    # vi ~/.bashrc在文件末尾增加如下两行
    alias ls='ls -aol'
    alias rm='rm -i'
    
  • 加固风险等级:无害

1.7.12 检查是否使用NTP(网络时间协议)保持时间同步
  • 严重级别:信息

  • 理论要求:
    建议将缺乏直接访问物理主机时钟的物理系统和虚拟客户机配置为NTP客户机来同步它们的时钟(特别是支持像Kerberos这样的时间敏感安全机制)。这也确保日志文件在整个企业中都有一致的时间记录,这有助于问题排查.

  • 配置要求:
    如果网络中存在信任的NTP服务器,应该配置系统使用NTP服务保持时间同步。

  • 检查步骤
    1、执行以下命令验证NTP服务是否开启
    #ps -ef|egrep "ntp|ntpd"|grep -v grep
    2、如果NTP服务未开启,执行以下命令启动服务
    #/etc/init.d/ntpd start
    3、查看文件/etc/ntp.conf中是否有类似server <ip_address>的行:
    server <ip_address>

  • 合规标准
    1、NTP服务处于开启状态
    2、设置了NTP时间同步服务器
    两者需要同时满足则合规,否则不合规。

  • 加固方案

    1、编辑ntp配置文件,在server一行添加ntp服务器的IP地址
    server <ip_address>
    2、启动ntpd服务:
    #/etc/init.d/ntpd start
    
  • 加固风险等级:无害

1.7.13 检查NFS(网络文件系统)服务配置
  • 严重级别:信息

  • 配置要求:
    NFS服务:如果没有必要,需要停止NFS服务;如果需要NFS服务,需要限制能够访问NFS服务的IP范围。

  • 检查步骤
    1、查看系统是否存在如下NFS守护进程:rpc.lockd, rpc.nfsd, rpc.statd, rpc.mountd
    2、查看NFS服务状态:
    # chkconfig --list |grep nfs
    nfs 0:off 1:off 2:off 3:off 4:off 5:off 6:off
    nfslock 0:off 1:off 2:off 3:on 4:on 5:on 6:off
    3、查看是否对NFS服务访问做限制:
    #more /etc/hosts.allow
    #more /etc/hosts.deny

  • 合规标准
    1、不存在与NFS有关的守护进程
    2、如果存在NFS守护进程,但/etc/hosts.allow设置了允许访问nfs的远程地址且/etc/hosts.deny设置了拒绝所有访问NFS的远程地址。
    二者满足其中之一则合规,否则不合规。

  • 加固方案

    加固方案	1、杀掉如下NFS进程:rpc.lockd, rpc.nfsd, rpc.statd, rpc.mountd
    2、禁用NFS
    #chkconfig --level 235 nfs off
    3、如需要nfs服务,设置限制能够访问NFS服务的IP范围:
    1).编辑文件/etc/hosts.allow增加一行:
    nfs:允许访问的IP
    2).编辑文件/etc/hosts.deny增加一行:
    nfs:all或者all:all
    
  • 加固风险等级:无害

1.7.14 检查是否配置定时自动屏幕锁定
  • 严重级别:信息

  • 配置要求:
    对于具备图形界面(含WEB界面)的设备,应配置定时自动屏幕锁定。

  • 检查步骤
    使用如下命令查看屏幕锁定配置:
    #gconftool-2 -g /apps/gnome-screensaver/idle_activation_enabled
    #gconftool-2 -g /apps/gnome-screensaver/lock_enabled
    #gconftool-2 -g /apps/gnome-screensaver/mode
    #gconftool-2 -g /apps/gnome-screensaver/idle_delay

  • 合规标准
    1、idle_activation_enabled的值为true #启用空闲激活
    2、lock_enabled的值为true #启用屏幕锁定
    3、/apps/gnome-screensaver/mode的值为blank-only #屏保模式
    4、idle_delay的值<=15 #空闲激活时间
    四个条件同时满足则合规,否则不合规。

  • 加固方案

    1、启用空闲激活
    #gconftool-2 --direct  --config-source xml:readwrite:/etc/gconf/gconf.xml.mandatory  --type bool  --set /apps/gnome-screensaver/idle_activation_enabled true
    2、启用屏幕锁定
    #gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.mandatory  --type bool  --set /apps/gnome-screensaver/lock_enabled true
    3、设置屏保模式
    #gconftool-2 --direct   --config-source xml:readwrite:/etc/gconf/gconf.xml.mandatory    --type string   --set /apps/gnome-screensaver/mode blank-only
    4、设置空闲激活时间
    #gconftool-2 --direct  --config-source xml:readwrite:/etc/gconf/gconf.xml.mandatory   --type int   --set /apps/gnome-screensaver/idle_delay 15
    
  • 加固风险等级:无害

1.7.15 检查是否安装chkrootkit进行系统监测
  • 严重级别:信息

  • 配置要求:
    安装入侵检测攻击检查Linux系统是否遭受攻击。

  • 检查步骤:
    执行如下命令查看系统是否安装入侵检测工具
    #rpm -qa|grep -i "chkrootkit"

  • 合规标准:
    系统安装了入侵检测工具chkrootkit则合规,否则不合规。

  • 加固方案

    1、工具chkrootkit下载链接
    http://pkgs.repoforge.org/chkrootkit/chkrootkit-0.49-1.el5.rf.x86_64.rpm
    2、使用rpm命令安装
    #rpm -ivh chkrootkit-0.49-1.el5.rf.i386.rpm
    3、运行chkrootkit
    #chkrootkit
    
    备注:
    chkrootkit输出,not infected就表示没有被感染
    
  • 加固风险等级:无害

1.7.16 检查是否安装OS补丁
  • 严重级别:信息

  • 配置要求:
    应根据需要及时进行补丁装载,对服务器系统应先进行兼容性测试。

  • 检查步骤
    查看文件/etc/redhat-release或者使用uname -a查看系统版本.

  • 合规标准
    手工检查当前系统版本是否安装最新补丁。

  • 加固方案

    1、可以从以下链接获取各系统的最新补丁包:
    RedHat Linux:http://www.redhat.com/support/errata/
    2、使用Online Update或Patch CD Update等方式升级系统补丁。
    
  • 加固风险等级:无害

1.7.17 检查FTP banner设置
  • 严重级别:信息

  • 配置要求:
    FTP登录时需要显示警告信息,隐藏操作系统和FTP服务器相关信息。

  • 检查步骤
    查看配置文件/etc/vsftpd/vsftpd.conf,检查是否配置了banner信息。

  • 合规标准
    1、FTP进程不存在
    2、/etc/vsftpd/vsftpd.conf文件存在如下行:
    ftpd_banner=” Authorized users only. All activity may be monitored and reported.”
    以上2个条件满足其一则合规,否则不合规。

  • 加固方案

    1、编辑文件/etc/vsftpd/vsftpd.conf,修改ftpd_banner的值为:
    ” Authorized users only. All activity may be monitored and reported.”
    可根据实际需要修改该文件内容
    2、重启FTP服务
    #/etc/init.d/vsftpd restart
    
  • 加固风险等级:无害

1.7.18 检查Telnet banner设置
  • 严重级别:信息

  • 配置要求:
    修改系统Banner,避免泄漏操作系统名称,版本号,主机名称等,并且给出登录告警信息。

  • 检查步骤
    使用命令查看TELNET默认Banner信息(cat /etc/issue和cat /etc/issue.net),检查文件内容是否包含系统版本等敏感信息。
    red hat Enterprise Linux Server release 5.5 (Tikanga)
    Kernel \r on an \m #Linux

  • 合规标准
    1、TELNET服务未开启。
    2、TELNET服务开启,但文件/etc/issue和/etc/issue.net不包含系统敏感信息。
    二者满足其一则合规,否则不合规。

  • 加固方案

    1、修改TELNET回显信息,修改文件/etc/issue 和/etc/issue.net中的内容,执行如下两条命令:
    #echo " Authorized users only. All activity may be monitored and reported " > /etc/issue
    #echo " Authorized users only. All activity may be monitored and reported " > /etc/issue.net
    可根据实际需要修改该文件的内容,但是不要出现系统敏感信息,如redhat,suse等。
    2、重启服务:
    #/etc/init.d/xinetd restart
    
  • 加固风险等级:无害

1.7.19 检查系统内核参数配置
  • 严重级别:信息

  • 配置要求:
    调整内核安全参数,增强系统安全性,打开syncookies。

  • 检查步骤
    执行以下命令查看参数tcp_syncookies的值。
    #cat /proc/sys/net/ipv4/tcp_syncookies

  • 合规标准
    tcp_syncookies的值为1则合规,否则为不合规。

  • 加固方案

    1、方法一
    命令行输入如下命令:
    #echo 1 > /proc/sys/net/ipv4/tcp_syncookies
    注意:此方法在重启后会失效。
    2、方法二
    #vi /etc/sysctl.conf
    在文件中查找net.ipv4.tcp_syncookies修改为:
    net.ipv4.tcp_syncookies = 1
    如果没找到,则在单独一行添加即可。
    3、保存后退出
    4、#sysctl -p
    此方法在重启后依然有效,网络与服务。
    
  • 加固风险等级:无害

1.7.20 检查系统openssh安全配置
  • 严重级别:高危

  • 配置要求:
    强烈建议系统放弃旧的明文登录协议,使用SSH防止会话劫持和嗅探网络上的敏感数据。

  • 检查步骤
    查看配置文件/etc/ssh/sshd_config,检查以下几个参数的配置值是否满足安全要求:
    X11Forwarding #x11转发功能,如果没有需要使用此功能的应用应该关闭该功能。
    MaxAuthTries #指定每个连接允许的身份验证尝试的最大数量。建议配置为4次或者更少。
    IgnoreRhosts #此参数将强制用户在使用SSH进行身份验证时输入密码,建议开启开功能。
    HostbasedAuthentication #开启主机认证,建议关闭该功能。
    PermitEmptyPasswords #允许空密码登录,建议关闭该功能

  • 合规标准
    1、关闭x11转发功能;
    2、单个连接允许的最大身份验证尝试次数不大于4次;
    3、开启使用ssh进行身份验证时,强制输入密码功能;
    4、关闭主机认证功能;

    5、关闭允许空密码登录功能;
    以上5个条件同时满足时则合规,否则不合规。

  • 加固方案

    1、编辑配置文件/etc/ssh/sshd_config,修改下面几个参数的值:
    X11Forwarding no
    MaxAuthTries 4
    IgnoreRhosts yes
    HostbasedAuthentication no
    PermitEmptyPasswords no
    2、重启ssh服务
    /etc/init.d/sshd restart
    
  • 加固风险等级:无害

1.7.21 检查系统coredump设置
  • 严重级别:信息

  • 配置要求:
    系统core dump状态,core dump中可能包括系统信息,易被入侵者利用,建议关闭。

  • 检查步骤
    1、查看/etc/security/limits.conf文件中是否配置如下内容:
    * soft core 0
    * hard core 0
    2、查看/etc/profile文件中是否存在如下配置,存在则注释掉:
    ulimit -S -c 0 > /dev/null 2>&1

  • 合规标准
    设置* soft core、* hard core为0,且注释掉ulimit -S -c 0 > /dev/null 2>&1行则合规,否则不合规。

  • 加固方案

    1、编辑文件/etc/security/limits.conf(vi /etc/security/limits.conf),在文件末尾加入如下两行(存在则修改,不存在则新增):
    * soft core 0
    * hard core 0
    2、编辑文件/etc/profile(vi /etc/profile)注释掉如下行:
    #ulimit -S -c 0 > /dev/null 2>&1
    
  • 加固风险等级:无害

1.7.22 检查是否关闭不必要的服务和端口
  • 严重级别:信息

  • 配置要求:
    列出所需要服务的列表(包括所需的系统服务),不在此列表的服务需关闭。

  • 检查步骤
    1、执行以下命令查看服务列表:
    #chkconfig --list
    查看所有服务的开启关闭列表检查基本的网络服务的开启或禁止情况,根据实际情况关闭不必要的服务。
    2、查看开放的端口列表:
    #netstat -an
    3、编辑文件/etc/service,查看服务与端口对应表 。

  • 合规标准
    结合实际业务需要人工判断是否存在不必要的未关闭的端口和服务。

  • 加固方案

    1、禁止非必要服务
    #chkconfig [service] off
    2、编辑文件 /etc/services
    在文件中找到对应服务的端口,注释掉改行内容
    
  • 加固风险等级:无害


  1. [:space:] ↩︎

posted @ 2021-06-23 22:52  在河之舟2020  阅读(1160)  评论(0编辑  收藏  举报