一 账号口令
1 删除无关用户
2 锁定指定系统用户
- 检查指定用户是否被锁定
awk -F':' '
$1=="adm" || $1=="lp" || $1=="mail" || $1=="uucp" || $1=="operator" || $1=="games" || $1=="gopher" || $1=="ftp" || $1=="nobody" || $1=="nobody4" || $1=="noaccess" || $1=="listen" || $1=="webservd" || $1=="rpm" || $1=="dbus" || $1=="avahi" || $1=="mailnull" || $1=="smmsp" || $1=="nscd" || $1=="vcsa" || $1=="rpc" || $1=="rpcuser" || $1=="nfsnobody" || $1=="sshd" || $1=="pcap" || $1=="ntp" || $1=="haldaemon" || $1=="distcache" || $1=="apache" || $1=="webalizer" || $1=="squid" || $1=="xfs" || $1=="gdm" || $1=="sabayon" || $1=="named" {
if ($2 !~ /^(\\*|!)$/) flag++
}
END {
if (flag == 0) print "ok"; else print "no"
}' /etc/shadow
- 锁定指定用户
sudo usermod -L adm
sudo usermod -L lp
sudo usermod -L mail
sudo usermod -L uucp
sudo usermod -L operator
sudo usermod -L games
sudo usermod -L gopher
sudo usermod -L ftp
sudo usermod -L nobody
sudo usermod -L nobody4
sudo usermod -L noaccess
sudo usermod -L listen
sudo usermod -L webservd
sudo usermod -L rpm
sudo usermod -L dbus
sudo usermod -L avahi
sudo usermod -L mailnull
sudo usermod -L smmsp
sudo usermod -L nscd
sudo usermod -L vcsa
sudo usermod -L rpc
sudo usermod -L rpcuser
sudo usermod -L nfsnobody
sudo usermod -L sshd
sudo usermod -L pcap
sudo usermod -L ntp
sudo usermod -L haldaemon
sudo usermod -L distcache
sudo usermod -L apache
sudo usermod -L webalizer
sudo usermod -L squid
sudo usermod -L xfs
sudo usermod -L gdm
sudo usermod -L sabayon
sudo usermod -L named
3 禁止设置除root用户之外uid为0的用户
4 应为系统账号设置密码
5 应配置密码复杂度
6 应配置密码长度最小值
7 应配置密码最长使用期限
8 应配置密码过期前警告天数
9 应配置密码更改最小间隔天数
10 应配置密码重复使用次数限制
11 应配置账号锁定策略
二 认证授权
1 应配置账号锁定策略
编辑文件 /etc/pam.d/sshd 文件,在下方添加
auth required pam_tally2.so onerr=fail deny=10 unlock_time=1800 even_deny_root root_unlock_time=1800
account required pam_tally2.so
参数说明: deny #连续认证失败次数超过的次数 unlock_time #锁定的时间,单位是秒
2 应配置用户目录缺省访问权限
编辑 /etc/login.defs ,设置文件中umask 027或UMASK 027 umask解释: 用全部权限777去减这个数值
一。022表示默认创建新文件权限为755 也就是 rxwr-xr-x(所有者全部权限,属组读写,其它人读写)
二。027表示默认创建新文件权限为750 也就是rxwr-x---(所有者全部权限,属组读写,其它人无)
下表列出了一些umask值及它们所对应的目录和文件权限
常用的umask值及对应的文件和目录权限
umask值 目录 文件
022 755 644
027 750 640
002 775 664
006 771 660
007 770 660
3 应配置重要文件属性
4 应配置重要目录或文件权限
/etc/rc.d/init.d/ 小于等于 750 /etc/xinetd.d 小于等于600 /ete/seeurity 小于等于 600 /ete/passwd 小于等于 644 /ete/services 小手等于 644 /etc/group 小于等于 644 /tmp 小于等于750 /etc/shadow 小于等于600 以/etc/shadow 为例,执行 chmod6400 /etc/shadow 进行设置。
#!/bin/bash
# 定义需要设置权限的文件及其权限
declare -A permissions=(
["/etc/rc.d/init.d/"]="750"
["/etc/xinetd.d"]="600"
["/etc/security"]="600"
["/etc/passwd"]="644"
["/etc/services"]="644"
["/etc/group"]="644"
["/tmp"]="750"
["/etc/shadow"]="600"
)
# 遍历文件列表并设置权限
for file in "${!permissions[@]}"; do
permission="${permissions[$file]}"
echo "Setting permissions $permission on $file"
sudo chmod "$permission" "$file"
done
# 检查权限设置是否成功
for file in "${!permissions[@]}"; do
current_permission=$(stat -c "%a" "$file")
expected_permission="${permissions[$file]}"
if [[ "$current_permission" == "$expected_permission" ]]; then
echo "Permissions set correctly for $file: $current_permission"
else
echo "Failed to set permissions for $file: Expected $expected_permission, got $current_permission"
fi
done
三 日志审计
1 应开启日志功能
#查看日志进行
ps -ef|grep syslogd
# 开启日志功能
service rsyslog start
chkconfig rsyslog on
2 应对登录进行日志记录
登录日志文件为 /var/log/wtmp /var/log/utmp 这两个文件中记录着所有登录过得主机的用户、时间、来源等内容,这个文件不具有可读性,可以用last命令来看。
last |grep "logged"
3 应配置开启安全事件日志
配置rsyslog 开启安全事件日志,编辑 /etc/rsyslog.conf 配置
*.err;kern.debug;daemon.notice /var/adm/message
其中/var/adm/messages 为日志文件。 如果该文件不存在,则创建该文件,命名为: 并修改权限为666,命令为
touch /var/adm/messages
chmod 666 /var/adm/messages
重启日志服务:
service rsyslog restart
4 应记录用户对设备的操作
参考配置: 通过设置日志文件可以对每个用户的每一条命令进行记录,这一功能默认是不开放的,为了打开它,需要安装pacct工具,并执行以下命令:
yum install psacct
touch /var/log/pacct
accton /var/log/pacct
# 执行读取命令
lastcomm [username] -f /var/log/pacct
5 应配置su命令使用情况记录
- 编辑/etc/rsyslog.conf,配置:
authpriv.* /var/log/secure
- 创建/var/log/secure文件
touch /var/log/secure
- 重启syslog服务
service rsyslog restart
6 应启用cron行为日志功能
编辑/etc/rsyslog.conf文件,配置:
cron.* /var/log/cron
其中,/var/log/cron为日志文件,如果该文件不存在,则创建该文件,并赋予755权限
touch /var/log/cron
chmod 755 /var/log/cron
7 应禁止日志文件全局可写
配置日志文件权限,要求如下: /var/log/maillog 小于等于775 /var/log/messages 小于等于755 /var/log/localmessages 小于等于775 /var/log/spooler 小于等于 775 /var/log/boot.log 小于等于775 /var/log/mail小于等于775 /var/log/cron小于等于775 /var/log/secure 小于等于775 以/var/log/maillog 为例,执行chmod 775 /var/log/maillog进行设置。
#!/bin/bash
# 定义需要设置权限的文件及其权限
declare -A permissions=(
["/var/log/maillog"]="775"
["/var/log/messages"]="755"
["/var/log/localmessages"]="775"
["/var/log/spooler"]="775"
["/var/log/boot.log"]="775"
["/var/log/mail"]="775"
["/var/log/cron"]="775"
["/var/log/secure"]="775"
)
# 遍历文件列表并设置权限
for file in "${!permissions[@]}"; do
permission="${permissions[$file]}"
echo "Setting permissions $permission on $file"
sudo chmod "$permission" "$file"
done
# 检查权限设置是否成功
for file in "${!permissions[@]}"; do
current_permission=$(stat -c "%a" "$file")
expected_permission="${permissions[$file]}"
if [[ "$current_permission" == "$expected_permission" ]]; then
echo "Permissions set correctly for $file: $current_permission"
else
echo "Failed to set permissions for $file: Expected $expected_permission, got $current_permission"
fi
done
四 访问控制
1 应禁止root用户远程登录
修改/etc/ssh/sshd_config 文件,配置PermitRootLogin no。重启服务
service sshd restart
2 应禁止匿名用户登录FTP
以vsftp为例,编辑/etc/vsftpd.conf,设置: anonymous_enable NO
vi /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
3 应配置使用ssh协议进行远程维护
4 应修改SNMP默认团体字
编辑 /etc/snmp/snmpd.conf,修改private、public默认团体字为用户自定义团体字。
5 应禁止root用户登录FTP
6 应禁用OpenSSH不安全配置
- 确保/etc/ssh/sshd_config或/etc/ssh2/ssh2_config文件存在。如果不存在,则忽略下面配置。
- 在/etc/ssh/sshd_config或/etc/ssh2/ssh2_config配置: Protocol 2 PermitRootLogin no
五 其他安全
1 应安装操作系统补丁
2 应安装防病毒软件
3 应使用PAM认证模块禁止wheel组之外的用户su为root
vi /etc/pam.d/su
# 确保文件开头有以下
auth sufficient pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth sufficient pam_wheel.so trust use_uid
4 应设置命令行界面超时退出
5 应删除潜在危险文件
6 应关闭core dump
vi /etc/security/limits.conf
# 确保有以下
soft core 0
hard core 0
7 应配置历史命令保存数量
配置/etc/profile文件设置HISTFILESIZE=5
8 应配置/usr/bin/目录下可执行文件的拥有者属性
找出系统中所有含有“s”属性的文件,把不必要的“s”属性去掉,或者把不用的直接删掉。
find /usr/bin -type f \( -perm -4000 -o -perm -2000 \)
chmod a-s filename
chmod a-s /usr/bin/gpasswd
chmod a-s /usr/bin/chage
chmod a-s /usr/bin/chsh
chmod a-s /usr/bin/write
chmod a-s /usr/bin/umount
chmod a-s /usr/bin/pkexec
chmod a-s /usr/bin/mount
chmod a-s /usr/bin/lockfile
chmod a-s /usr/bin/passwd
chmod a-s /usr/bin/su
chmod a-s /usr/bin/chfn
chmod a-s /usr/bin/ssh-agent
chmod a-s /usr/bin/sudo
chmod a-s /usr/bin/crontab
chmod a-s /usr/bin/wall
chmod a-s /usr/bin/newgrp
9 应配置SSH登录前警告Banner
- 执行如下命令创建ssh banner信息文件:
touch /etc/ssh_banner
chown bin:bin /etc/ssh_banner
chmod 644 /etc/ssh_banner
echo "Authorized only. All activity will be monitored and reported " > /etc/ssh_banner
- 修改/etc/ssh/sshd_config文件,添加如下行:
vi /etc/ssh/sshd_config
Bannner /etc/ssh_banner
- 重启sshd服务:
service sshd restart
10 应配置SSH成功登录后Banner
- 修改文件/etc/motd,如果没有则创建。
echo "Login success !!!" > /etc/motd
内容可根据实际需要修改
11 应限制FTP用户登录后能访问的目录
vi /etc/vsftpd/vsfptd.conf
# 确保以下行没被注释掉
chroot_local_user=YES
12 应限制远程登录IP范围
编辑/etc/hosts.allow文件,增加一行,允许访问的IP。
all:192.168.1.1:allow #允许单个IP
sshd:192.168.1.:allow #允许整个网段的PC通过ssh访问本机
13 应使用NTP保持时间同步
- 先装ntp服务。
- 开启ntp服务。
- 编辑ntp的配置文件,配置ntp服务的IP地址
vi /etc/ntp.conf
server 192.168.1.1
14 应关闭不必要的服务、端口
需要关闭的不必要的端口如下: discard服务 kshell服务 daytime 服务 echo服务 sendmail服务 ntalk服务 ident服务 printer服务 bootps服务 time服务 nfslock服务 Ipd服务 nfs服务 chargen服务 ypbind服务 tfip服务 klogin服务 以配置关闭discard服务为例, chkconfig [--level levels] discard off chkconfig [--level levels] discard-udp off 注:levels为运行级别,需要重启机器 判定条件: 对应服务状态值不为“开启”、“启用”和 “on”. 检测操作: 以查询discard服务状态为例 chkconfig --list 2> /dev/null | grep "^discard