1.安装最新安全补丁:
项目: | 注释: | |
1 | 安装操作系统提供商发布的最新的安全补丁 | 各常见的Linux发布安全信息的web地址: RedHat Linux: http://www.redhat.com/support/ Caldera OpenLinux: http://www.calderasystems.com/support/security/ Conectiva Linux: http://www.conectiva.com.br/atualizacoes/ Debian GNU/Linux: http://www.debian.org/security/ Mandrake Linux: http://www.linux-mandrake.com/en/fupdates.php3 LinuxPPC: http://www.linuxppc.com/support/updates/security/ S.u.S.E. : http://www.suse.de/security/index.html Yellow Dog Linux : http://www.yellowdoglinux.com/resources/errata.shtml |
inetd/xinetd网络服务:
设置项 | 注释: | |
1 | 确保只有确实需要的服务在运行: 先把所有通过ineted/xineted运行的网络服务关闭,再打开确实需要的服务 | 绝大多数通过inetd/xinetd运行的网络服务都可以被禁止,比如echo, exec, login, shell,who,finger等.对于telnet, r系列服务, ftp等, 强烈建议使用SSH来代替. |
2 | 设置xinetd访问控制 | 在/etc/xinetd.conf文件的”default {}”块中加入如下行: only_from= 每个 |
设置项 | 注释: | |
1 | 关闭NFS服务器进程: 运行 chkconfig nfs off | NFS通常存在漏洞会导致未授权的文件和系统访问. |
2 | 关闭NFS客户端进程: 运行 chkconfig nfslock off chkconfig autofs off | |
3 | 关闭NIS客户端进程: chkconfig ypbind off | NIS系统在设计时就存在安全隐患 |
4 | 关闭NIS服务器进程: 运行 chkconfig ypserv off chkconfig yppasswd off | |
5 | 关闭其它基于RPC的服务: 运行 chkconfig portmap off | 基于RPC的服务通常非常脆弱或者缺少安全的认证,但是还可能共享敏感信息.除非确实必需,否则应该完全禁止基于RPC的服务. |
6 | 关闭SMB服务 运行 chkconfig smb off | 除非确实需要和Windows系统共享文件,否则应该禁止该服务. |
7 | 禁止Netfs脚本 chkconfig netfs off | 如果不需要文件共享可禁止该脚本 |
8 | 关闭打印机守护进程 chkconfig lpd off | 如果用户从来不通过该机器打印文件则应该禁止该服务.Unix的打印服务有糟糕的安全记录. |
9 | 关闭启动时运行的 X Server sed 's/id:5:initdefault:/id:3:initdefault:/' \ < /etc/inittab > /etc/inittab.new mv /etc/inittab.new /etc/inittab chown root:root /etc/inittab chmod 0600 /etc/inittab | 对于专门的服务器没有理由要运行X Server, 比如专门的Web服务器 |
10 | 关闭Mail Server chkconfig postfix off | 多数Unix/Linux系统运行Sendmail作为邮件服务器, 而该软件历史上出现过较多安全漏洞,如无必要,禁止该服务 |
11 | 关闭Web Server chkconfig httpd off | 可能的话,禁止该服务. |
12 | 关闭SNMP chkconfig snmpd off | 如果必需运行SNMP的话,应该更改缺省的community string |
13 | 关闭DNS Server chkconfig named off | 可能的话,禁止该服务 |
14 | 关闭 Database Server chkconfig postgresql off | Linux下常见的数据库服务器有Mysql, Postgre, Oracle等, 没有必要的话,应该禁止这些服务 |
15 | 关闭路由守护进程 chkconfig routed off chkconfig gated off | 组织里仅有极少数的机器才需要作为路由器来运行.大多数机器都使用简单的”静态路由”, 并且它不需要运行特殊的守护进程 |
16 | 关闭Webmin远程管理工具 chkconfig webmin off | Webmin是一个远程管理工具,它有糟糕的认证和会话管理历史, 所以应该谨慎使用 |
17 | 关闭Squid Web Cache chkconfig squid off | 如果必需使用, 应该谨慎配置 |
18 | 可能的话禁止inetd/xinetd chkconfig inetd off 或 chkconfig xinetd off | 如果没有网络服务通过inetd/xinetd运行则可以禁止它们 |
19 | 设置守护进程掩码 cd /etc/rc.d/init.d if [ "`grep -l umask functions`" = "" ]; then echo "umask 022" >> functions fi | 系统缺省的umask 值应该设定为022以避免守护进程创建所有用户可写的文件 |
设置项 | 注释: | |
1 | 禁止core dump: cat < * soft core 0 * hard core 0 END_ENTRIES | 允许core dump会耗费大量的磁盘空间. |
2 | NFS客户端使用端口: perl -i.orig -pe \ 'next if (/^\\s*#/ || /^\\s*$/); ($res, @hst) = split(" "); foreach $ent (@hst) { undef(%set); ($optlist) = $ent =~ /\\((.*?)\\)/; foreach $opt (split(/,/, $optlist)) { $set{$opt} = 1; } delete($set{"insecure"}); $set{"secure"} = 1; $ent =~ s/\\(.*?\\)//; $ent .= "(" . join( } $hst[0] = "(secure)" unless (@hst); $_ = "$res\" . join(" ", @hst) . "\\n";' \ /etc/exports | 可以防止非用户发起的automouted NFS攻击. |
3 | 网络参数调整: cat < net.ipv4.ip_forward = 0 net.ipv4.conf.all.accept_source_route = 0 net.ipv4.tcp_max_syn_backlog = 4096 net.ipv4.conf.all.rp_filter = 1 END_SCRIPT cat < net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 END_SCRIPT chown root:root /etc/sysctl.conf chmod 0600 /etc/sysctl.conf | 详见: http://www.linuxhq.com/kernel/v2.4/doc/networking/ip-sysctl.txt.html 或http://www.linuxhq.com/kernel/v2.2/doc/networking/ip-sysctl.txt.html |
设置项 | 注释: | |
1 | 捕捉发送给AUTH 和AUTHPRIV facility的消息到日志文件/var/log/secure: if [ `grep -c 'auth\\.' /etc/syslog.conf` -eq 0 ] then echo -e "auth.*\\\\/var/log/secure" \ >>/etc/syslog.conf fi if [ `grep -c 'authpriv\\.' /etc/syslog.conf` eq 0 ] then echo -e "authpriv.*\\\\/var/log/secure" \ >>/etc/syslog.conf fi touch /var/log/secure chown root:root /var/log/secure chmod 600 /var/log/secure | .syslog中的AUTH 和AUTHPRIV facility包含了大量安全相关的信息, 不是所有Linux发布都记录这些日志信息.应该把这些信息记录到/var/log/secure文件中(该文件仅超级用户可读) |
检查项 | 注释: | |
1 | 对/etc/fstab中的可移动介质增加”nosuid”选项: awk '($2 ~ /^\/m.*\/(floppy|cdrom)$/ && \ $3 != "supermount") \ { $4 = sprintf("%s,nosuid", $4) }; \ { print }' /etc/fstab >/etc/fstab.new mv /etc/fstab.new /etc/fstab chown root:root /etc/fstab chmod 04 /etc/fstab | 可以移动介质是引入恶意代码的一个重要途径.该设置可以防止普通用户通过CDROM或软盘引入SUID程序 |
2 | 禁止普通用户来mount可移动文件系统: cd /etc/security egrep -v '(floppy|cdrom)' console.perms \ > console.perms.new mv console.perms.new console.perms grep -v supermount /etc/fstab > /etc/fstab.new mv /etc/fstab.new /etc/fstab chown root:root console.perms /etc/fstab chmod 0600 console.perms chmod 04 /etc/fstab | 在基于Linux的发布中普通用户在控制台上有更大的权限, 可以使用CD-ROM和软盘驱动器.甚至在一些发布,比如Mandrake Linux上当在机器上插入软盘或光碟时系统会通过supermount来自动mount这些驱动器. |
3 | 对passwd, shadow, 和group文件设置正确的许可权限: cd /etc chown root:root passwd shadow group chmod 4 passwd group chmod 400 shadow | 这些文件的属主和组应该为root, passwd和group文件的许可权限应该为4,shadow文件的许可权限应该为400 |
4 | 对临时目录设置粘着位: chmod +t /tmp find /var -type d -perm -0222 -xdev -exec chmod +t {} \\; | 临时目录不设置粘着位会导致普通用户可以任意删除其它用户建立的临时文件 |
5 | 查找未认证的SUID/SGID可程序: for part in \ `awk '($3 == "ext2" || $3 == “ext3”) \ { print $2 }' /etc/fstab` do find $part \\( -perm -04000 -o -perm -02000 \\) \ -type f -xdev -print done |
检查项 | 注释: | |
1 | 在PAM配置文件中删除.rhosts支持: for file in `echo /etc/pam.d/*` ; do grep -v rhosts_auth $file > ${file}.new mv ${file}.new $file chown root:root $file chmod 4 $file done | 禁止.rhost支持有助于防止用户搞乱系统正常的访问控制机制 |
2 | 删除/etc/hosts.equiv文件: rm /etc/hosts.equiv | /etc/hosts.equiv文件为系统上的所有用户设置全局信任关系,于.rhost的作用类似. |
3 | 校验/etc/ftpusers文件的内容, 确认root和系统用户存在在该文件中 | /etc/ftpusers文件列出了所有禁止使用ftp的用户的名单,通常root和系统用户都应该禁止使用ftp |
4 | at/cron给授权的用户: cd /etc/ rm -f cron.deny at.deny echo root >cron.allow echo root >at.allow chown root:root cron.allow at.allow chmod 400 cron.allow at.allow | Cron.allow和at.allow文件列出了允许允许crontab和at命令的用户名单, 在多数系统上通常只有系统管理员才需要运行这些命令 |
5 | Crontab文件访问权限: chown root:root /etc/crontab chmod 400 /etc/crontab chown -R root:root /var/spool/cron chmod -R go-rwx /var/spool/cron chown -R root:root /etc/cron.* chmod -R go-rwx /etc/cron.* | 系统的crontab文件应该只能被cron守护进程(它以超级用户身份运行)来访问,一个普通用户可以修改crontab文件会导致他可以以超级用户身份执行任意程序 |
6 | 建立恰当的警告banner: echo "Authorized uses only. All activity may be \ monitored and reported." >>/etc/motd chown root:root /etc/motd chmod 4 /etc/motd cat < echo "Authorized uses only. All activity may be \ monitored and reported." >> /etc/issue echo "Authorized uses only. All activity may be \ monitored and reported." >> /etc/issue.net END | 改变登录banner可以隐藏操作系统类型和版本号和其它系统信息,这些信息可以会对攻击者有用. |
7 | root登录到系统控制台: cat < tty1 tty2 tty3 tty4 tty5 tty6 END_FILE chown root:root /etc/securetty chmod 400 /etc/securetty | 通常应该以普通用户身份访问系统,然后通过其它授权机制(比如su命令和sudo)来获得更高权限,这样做至少可以对登录事件进行跟踪 |
8 | 设置LILO/GRUB口令: 在/etc/lilo.conf文件的开头加入如下行: restricted password= 以root身份执行如下命令: chown root:root /etc/lilo.conf chmod 600 /etc/lilo.conf lilo 对于GRUB: 加入本行到/etc/grub.conf: password 以root身份执行如下命令: chown root:root /etc/grub.conf chmod 600 /etc/grub.conf | 可以有助于防止基于控制台的物理攻击 |
检查项 | 注释: | |
1 | 清除或锁定系统账号: for user in uucp operator do /usr/sbin/userdel $user done for user in adm alias apache axfrdns bin daemon dhcpd \ dnscache dnslog ftp games gdm gopher halt htdig ident \ lp mail mailnull named news nobody nscd postfix \ postgres qmaild qmaill qmailp qmailq qmailr qmails \ rpc rpcuser squid sympa sync tinydns xfs do /usr/sbin/usermod -L -s /dev/null $user done | Uucp和operator账号通常是不需要的,可以把它们从passwd和shadow文件中删除,其它账号视具体情况而定.要锁定一个账号,可以把该账号的shell改为一个无效的shell, 比如/dev/null |
验证没有遗留下来的’+’条目存在于passwd,shadow,group文件中: grep ^+: /etc/passwd /etc/shadow /etc/group | 这些条目可能会给攻击者提供一个途径来取得系统的访问权限,如果存在的化应该删除 | |
2 | 验证是否有账号存在空口令的情况: awk -F: '($2 == "") { print $1 }' /etc/shadow | 所有账号应该有一个强口令或者使用类似”NP”或”*LOCKED*”的口令字串来锁定账号 |
3 | 检查除了root以外是否还有其它账号的UID为0: awk -F: '($3 == 0) { print $1 }' /etc/passwd | 任何UID为0的账号在系统上都具有超级用户权限. |
4 | 检查root用户的$PATH中是否有’.’或者所有用户/组用户可写的目录 | 超级用户的$PATH设置中如果存在这些目录可能会导致超级用户误执行一个特洛伊木马 |
5 | 删除属于root用户的具有潜在危险的文件: rm -f /.[rs]hosts /.netrc /root/.[rs]hosts /root/.netrc | /.rhost, /.netrc 或 /root/.rhost , /root/.netrc文件都具有潜在的危险 |
6 | 用户的home目录许可权限是否为755或更严格的: for dir in \ `awk -F: '($3 >= 500) { print $6 }' /etc/passwd` do chmod go-w $dir done | 用户home目录的许可权限不严可能会导致恶意用户读/修改/删除其它用户的数据或取得其它用户的系统权限 |
7 | 是否有用户的点文件是所有用户可读的: for dir in \ `awk -F: '($3 >= 500) { print $6 }' /etc/passwd` do for file in $dir/.[A-Za-z0-9]* do if [ -f $file ]; then chmod o-w $file fi done done | Unix/Linux下通常以”.”开头的文件是用户的配置文件,如果存在所有用户可读/写的配置文件可能会使恶意用户能读/写其它用户的数据或取得其它用户的系统权限 |
8 | 删除用户的.netrc文件: for dir in `cut -f6 -d: /etc/passwd` do rm -f $dir/.netrc done | .netrc文件中可能会包含未加密的口令 |
9 | 为用户设置合适的缺省umask值: cd /etc for file in profile csh.login csh.cshrc bashrc do if [ `grep -c umask $file` -eq 0 ]; then echo "umask 022" >> $file fi chown root:root $file chmod 444 $file done | 为用户设置缺省的umask值有助于防止用户建立所有用户可写的文件而危及用户的数据. |
检查项 | 注释: | |
1 | 安装SSH | SSH是一个使用加密连接的安全的远程管理/数据传输协议.它可以用来替代telnet, r命令,ftp等传统的不安全的协议/命令.SSH的最新实现软件可以在 ftp://ftp.ssh.com下载 |
2 | 安装NTP | NTP(网络时间协议)用于使网络上的多个系统间的时间同步,精确的系统时间有利于保证系统日志的准确性. |