Linux系统简易加固


目录

ssh加固 3

禁止root用户ssh登录,ssh版本配置v2版本 3

配置ssh登录警告 3

使用ssh代替telnet服务 3

内核加固 4

关闭ip转发功能 4

开启反向路径过滤 4

禁止icmp重定向 4

日志功能加固 4

指定保留日志文件数量和最大大小 4

启用登录记录功能 5

检查日志文件权限设置 5

检查是否记录cron命令使用情况 5

口令加固 6

防止暴力密码 6

检查口令周期要求 6

控制su命令的认证切换 6

设置密码策略复杂性和安全性 7

设置验证密码设置 7

文件权限加固 8

设置系统默认umask值 8

检查日志文件权限 8

检查重要文件权限 8

检查账户文件权限 8

时间同步加固 8

ftp服务加固 9

ftp用户登录警告 9

限制ftp用户访问目录 9

禁止匿名用户访问ftp 9

禁用RPM命令 9

检查是否存在uuid为0的非root用户 10

检查是否设置登录超时 10

检查登录提示 10

检查SNMP服务版本 10



ssh加固

禁止root用户ssh登录,ssh版本配置v2版本

在/etc/ssh/sshd_config中应存在以下配置

中PermitRootLogin 设置为 no

--------------------

存在Protocol 2这一行

并且不存在以下两行就合规

Protocol 2,1

Protocol 1

-----------------------

/etc/ssh/sshd_config文件中非“#”开头的任意一行末尾添加 #Ciphers 128

(需注意,该行不能是#开头,且Ciphers 128前面一定要加#)

配置ssh登录警告

创建/etc/sshbanner文件,改变/etc/sshbanner文件属主为bin和权限为644,编辑/etc/sshbanner文件加入Authorized users only. All activity may be monitored and reported这一行,编辑/etc/ssh/sshd_config文件加入Banner /etc/sshbanner这一行

touch /etc/sshbanner

chown bin:bin /etc/sshbanner

chmod 644 /etc/sshbanner

echo " Authorized users only. All activity may be monitored and reported " >/etc/sshbanner

echo -e '\n'>>/etc/ssh/sshd_config

echo 'Banner /etc/sshbanner'>>/etc/ssh/sshd_config

使用ssh代替telnet服务

关闭telnet服务


/etc/xinetd.d/telnet

把disable项no改为yes


重启服务service xinetd restart


低版本的redhat没有此文件,请自行百度加固。

内核加固

关闭ip转发功能

这些命令用于在Linux系统中禁用IP转发功能。通过将相应的参数设置为0,可以阻止系统将数据包从一个网络接口转发到另一个网络接口。

sysctl -w net.ipv4.ip_forward=0

sysctl -w net.ipv4.conf.all.forwarding=0

sysctl -w net.ipv4.conf.default.forwarding=0

sysctl -p

开启反向路径过滤

这些命令用于在Linux系统中启用反向路径过滤功能。反向路径过滤可以帮助防止IP欺骗,通过验证数据包的源地址是否从期望的接口进入,来增强网络安全性。

禁止icmp重定向

这些命令用于在Linux系统中禁止接受ICMP重定向消息。通过将相应的参数设置为0,可以阻止系统接受来自其他主机的ICMP重定向消息,从而增强网络的安全性。

sysctl -w net.ipv4.conf.all.accept_redirects=0

sysctl -p

日志功能加固

指定保留日志文件数量和最大大小

  1. rotate 3:指定保留的旧日志文件的数量为3个。这意味着只保留最近的3个旧日志文件,旧于此数量的日志文件将被删除。
  2. size 10M:这个选项指定了日志文件的最大大小为10兆字节。如果日志文件的大小超过了这个限制,就会触发日志轮换操作。

/etc/logrotate.d/warn或/etc/logrotate.d/syslog存在

rotate 3

这一行就合规

/etc/logrotate.d/warn或/etc/logrotate.d/syslog存在

size 10M

这一行就合规

启用登录记录功能

  1. LASTLOG_ENAB yes:这行配置指示系统是否启用登录记录功能。设置为yes表示启用登录记录功能,即记录每个用户最后一次登录的时间和来源IP地址等信息。
  2. FAILLOG_ENAB yes:这行配置指示系统是否启用登录失败记录功能。设置为yes表示启用登录失败记录功能,即记录每个用户登录失败的次数和来源IP地址等信息。

/etc/login.defs中包含如下两行就合规

LASTLOG_ENAB yes

FAILLOG_ENAB yes

检查日志文件权限设置

脚本执行如下命令获取日志列表,列表日志权限需要改为640,主机用什么日志红字就换成什么日志,例如syslog.conf或syslog-ng.conf


cat /etc/

rsyslog.conf

|sed '/^#/d' |sed '/^$/d' |awk '(($2!~/@/) && ($2!~/*/) && ($2!~/-/)) {print $2}'

检查是否记录cron命令使用情况

# rsyslog或syslog配置(如果存在的话,一般只存在其一,改一个就行)


vi /etc/rsyslog.conf或/etc/syslog.conf,存在以下配置则合规:


cron.*

/var/log/cron



*.*

/var/log/cron


# syslog-ng配置,存在以下配置则合规(上面的如果改完了,这里就不用了,rsyslog或syslog或syslog-ng一般只存在其一)


vi /etc/syslog-ng/syslog-ng.conf


……


filter f_cron

{ facility(cron); };


destination cr


如果未启动日志服务,

直接判定为不合规

,检查命令ps -ef |egrep 'syslogd|syslog-ng'|grep -v grep|wc -l

口令加固

防止暴力破解密码

这三个文件都是用于配置PAM模块的认证规则,控制系统的用户认证和授权过程。通过修改这些文件,可以定制系统的认证策略,提高系统的安全性和灵活性。

/etc/pam.d/system-auth

/etc/pam.d/password-auth

/etc/pam.d/sshd 3个配置文件都需要加入下行配置:

auth required pam_tally2.so deny=5 unlock_time=900

#说明:锁定时间检查包含deny和unlock_time的行,deny不大于5且unlock_time不大于900就合规##说明:锁定策略检查包含pam_tally的行,后面的deny不大于6就合规

##注意:这个配置会导致部分主机无法登录或无法切换账号,加固前请保留一个root窗口,加固后测试没问题再关闭。

检查口令周期要求

/etc/login.defs 满足标红值就合规

PASS_MAX_DAYS 90

PASS_MIN_DAYS 1

PASS_MIN_LEN 8

PASS_WARN_AGE 7


控制su命令的认证切换

这两行配置的作用是,允许root用户无需密码即可使用su命令切换到其他用户,但限制只有属于weihu组的用户才能使用su命令切换到其他用户。这样可以增加系统的安全性,防止非授权用户滥用su命令。

  1. auth sufficient pam_rootok.so:这行配置指定了使用pam_rootok.so模块,它是一个认证模块,用于允许root用户无需密码即可使用su命令切换到其他用户。sufficient关键字表示如果这个模块验证成功,就可以跳过后续的认证模块,直接允许用户切换。
  2. auth required pam_wheel.so use_uid group=weihu root_only:这行配置指定了使用pam_wheel.so模块,它是一个认证模块,用于限制哪些用户可以使用su命令切换到其他用户。required关键字表示这个模块的验证是必需的,如果验证失败,su命令将会被拒绝。use_uid选项表示使用用户的UID来进行验证,group=weihu表示只有属于weihu组的用户才能使用su命令切换到其他用户。root_only选项表示只有root用户可以使用su命令切换到其他用户

脚本检查命令cat /etc/pam.d/su | grep -v "^#" | grep -v "^$"文件中必须同时存在以下两行才合规

auth sufficient pam_rootok.so

auth required pam_wheel.so use_uid group=weihu root_only

用户组名=需要su root的普通账号所属的用户组,可在/etc/passwd查看用户组ID再去/etc/group查看ID对应的组名,一定不要配错,否则再次登录无法切换root,加固前一定要保留一个root登录窗口,避免误操作


设置密码策略复杂性和安全性

这行配置的作用是,设置密码的最小长度为8个字符,并要求密码中至少包含3种不同的字符类别(数字、大写字母、小写字母、特殊字符)。这些密码策略将被应用于本地用户,并且对root用户也会强制执行。在验证密码时,将尝试使用之前由其他模块收集到的用户密码,并在失败时最多重试3次。此外,密码中不要求包含数字、大写字母、小写字母和特殊字符。

这样的密码策略可以增加密码的复杂性和安全性,防止使用简单和容易猜测的密码。

/etc/pam.d/system-auth是否有如下行,没有就增加


password requisite pam_pwquality.so minlen=8 minclass=3 enforce_for_root try_first_pass local_users_only retry=3 dcredit=0 ucredit=0 lcredit=0 ocredit=0


设置验证密码设置

这个配置的作用是,在密码验证过程中使用PAM模块pam_unix.so来验证用户密码,并使用MD5哈希算法进行存储。验证成功后解锁用户账号,并尝试使用先前由其他模块收集到的用户密码进行验证。同时,保留最近5个密码历史记录,以防止用户在一段时间内重复使用相同的密码。

/etc/pam.d/system-auth文件中包含

password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok remember=5这一行,

或者直接执行下面命令

sed -i "16ipassword sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok remember=5" /etc/pam.d/system-auth

文件权限加固

设置系统默认umask值

检查系统默认的umask值为027或更大的数字

涉及centos、redhat、euler、newstart


同时满足:


/etc/profile中umask值为027或更大数字 注意所有带有umask的行都得改

/etc/login.defs中LOGIN_UMASK值为027或更大数字

solaris操作系统只配置/etc/profile即可但是需要umask左侧不能有空格,否则会误报,检查命令:grep -i "^UMASK" /etc/default/login /etc/.login /etc/profile /etc/csh.cshrc /etc/bashrc 里的022也得改成027

检查日志文件权限

脚本执行如下命令获取日志列表,列表日志权限需要改为640,主机用什么日志红字就换成什么日志,例如syslog.conf或syslog-ng.conf


cat /etc/rsyslog.conf |sed '/^#/d' |sed '/^$/d' |awk '(($2!~/@/) && ($2!~/*/) && ($2!~/-/)) {print $2}'

检查重要文件权限

不能存在权限777的文件涉及文件如下:


ls -l /etc/default/* /etc/init.d/* /etc/rc*.d/* /tmp/* /etc/cron*|grep "\-rwxrwxrwx"

检查账户文件权限

/etc/passwd权限为644

/etc/shadow权限为400

/etc/group权限为644

时间同步加固

启用ntp服务,chrony软件

检查逻辑/etc/ntp.conf中存在类似server IP的配置,并且systemctl list-unit-files | grep crony的服务状态为on

ftp服务加固

ftp用户登录警告

检查登录提示-更改ftp警告Banner

/etc/vsftpd.conf或/etc/vsftpd/vsftpd.conf


包含:

ftpd_banner="Authorized users only. All activity may be monitored and reported."

限制ftp用户访问目录

检查ftp配置-限制ftp用户登录后能访问的目录

使用vsftpd就配置蓝色的,使用pure-ftpd配置红色的,二者选一就行不需要全配置

--------------vsftpd-------------

/etc/vsftpd.conf或/etc/vsftpd/vsftpd.conf包含chroot_local_user=YES

--------------pure-ftpd------------

/etc/pure-ftpd/pure-ftpd.conf包含ChrootEveryoneyesAllowUserFXPnoAllowAnonymousFXP

禁止匿名用户访问ftp

检查是否禁止匿名ftp

/etc/vsftpd.conf或者/etc/vsftpd/vsftpd.conf

anonymous_enable=NO

禁用RPM命令

编辑/etc/profile新增一行,内容如下:

alias rpm=请检查/etc/profile环境变量,

并以井号注释该行编辑root账户家目录下.bashrc文件,新增一行:

source /etc/profile(需注意,/etc/profile新增这一行后,rpm命令会无法使用,需使用rpm命令只需将这一行注释掉即可)

说明:有些工具与程序是日常要用的无法禁用,只能通过破坏rpm检查命令来欺骗脚本回显,以达到合规的目的

检查是否存在uuid为0的非root用户

只有root用户的uid=0 别的用户不能是0

cat /etc/passwd

检查是否设置登录超时

vi /etc/profile 修改或新增一行

TMOUT=1800

检查登录提示

是否设置登录成功后警告Banner

执行下面命令

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

检查SNMP服务版本

检查SNMP服务是否采用V3版本

ps -ef | grep snmpd | grep -v grep | wc -l检查是否启动snmpd服务,

如未启用=合规

如果启用,执行下面命令结果=3就合规:

grep -v "^#" snmpd.conf | grep"group"|awk -F" " '{print $3}' | cut -c 2

备注:snmpd.conf路径:/etc/snmp/snmpd.conf或/etc/snmpd.conf