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
日志功能加固
指定保留日志文件数量和最大大小
- rotate 3:指定保留的旧日志文件的数量为3个。这意味着只保留最近的3个旧日志文件,旧于此数量的日志文件将被删除。
- size 10M:这个选项指定了日志文件的最大大小为10兆字节。如果日志文件的大小超过了这个限制,就会触发日志轮换操作。
/etc/logrotate.d/warn或/etc/logrotate.d/syslog存在
rotate 3
这一行就合规
/etc/logrotate.d/warn或/etc/logrotate.d/syslog存在
size 10M
这一行就合规
启用登录记录功能
- LASTLOG_ENAB yes:这行配置指示系统是否启用登录记录功能。设置为yes表示启用登录记录功能,即记录每个用户最后一次登录的时间和来源IP地址等信息。
- 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命令。
- auth sufficient pam_rootok.so:这行配置指定了使用pam_rootok.so模块,它是一个认证模块,用于允许root用户无需密码即可使用su命令切换到其他用户。sufficient关键字表示如果这个模块验证成功,就可以跳过后续的认证模块,直接允许用户切换。
- 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