1、Linux系统安全加固手册 1.安装最新安全补丁: 项目: 注释: 1 安装操作系统提供商公布最新安全补丁 各常见Linux公布安全信息web地址: RedHat Linux: Caldera OpenLinux: Conectiva Linux: .br/atualizacoes/ Debian GNU/Linux: http://www.debian.org/security/ Mandrake Linux: http://www.linux- LinuxPPC: S.u.S.E. : http://www.suse.de/security/inde
2、x.html Yellow Dog Linux : 2.网络和系统服务: inetd/xinetd网络服务: 设置项 注释: 1 确保只有确实需要服务在运行: 先把全部经过ineted/xineted运行网络服务关闭,再打开确实需要服务 绝大多数经过inetd/xinetd运行网络服务全部能够被严禁,比如echo, exec, login, shell,who,finger等.对于telnet, r系列服务, ftp等, 强烈提议使用SSH来替换. 2 设置xinetd访问控制 在/etc/xinetd.conf文件”default {}”块中加入以下
3、行:
only_from=
4、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 关闭打印机守护进程
5、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 关闭Mai
6、l 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 p
7、ostgresql off Linux下常见数据库服务器有Mysql, Postgre, Oracle等, 没有必需话,应该严禁这些服务 15 关闭路由守护进程 chkconfig routed off chkconfig gated off 组织里仅有极少数机器才需要作为路由器来运行.大多数机器全部使用简单”静态路由”, 而且它不需要运行特殊守护进程 16 关闭Webmin远程管理工具 chkconfig webmin off Webmin是一个远程管理工具,它有糟糕认证和会话管理历史, 所以应该谨慎使用 17 关闭Squid Web Cache chkconfig
8、 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以避免守护进程创建全部用户可写文件 3.关键调整:
9、
设置项
注释:
1
严禁core dump:
cat <
10、~ /\((.*?)\)/; foreach $opt (split(/,/, $optlist)) { $set{$opt} = 1; } delete($set{"insecure"}); $set{"secure"} = 1; $ent =~ s/\(.*?\)//; $ent .= "(" . join(",", keys(%set)) . ")"; } $hst[0] = "(secure)" unless (@hst); $_ = "$res\t" . join(" ", @hst) . "\n";' \ /etc/exports 能够预防非特权用户提议a
11、utomouted NFS攻击.
3
网络参数调整:
cat <
12、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 详见: 或 4.日志系统: 设置项 注释: 1 捕捉发送给AUTH 和AUTHPRIV facility消息到日志文件/var/log/secure: if [ `grep -c 'auth\.' /etc/syslog.conf` -eq 0 ] t
13、hen echo -e "auth.*\t\t\t\t/var/log/secure" \ >>/etc/syslog.conf fi if [ `grep -c 'authpriv\.' /etc/syslog.conf` eq 0 ] then echo -e "authpriv.*\t\t\t\t/var/log/secure" \ >>/etc/syslog.conf fi touch /var/log/secure chown root:root /var/log/secure chmod 600 /var/log/secure .syslog中AUTH 和A
14、UTHPRIV facility包含了大量安全相关信息, 不是全部Linux公布全部统计这些日志信息.应该把这些信息统计到/var/log/secure文件中(该文件仅超级用户可读) 5.文件/目录访问许可权限: 检验项 注释: 1 对/etc/fstab中可移动介质增加”nosuid”选项: awk '($2 ~ /^\/m.*\/(floppy|cdrom)$/ && \ $3 != "supermount") \ { $4 = sprintf("%s,nosuid", $4) }; \ { print }' /etc/fstab >/etc/fstab.ne
15、w mv /etc/fstab.new /etc/fstab chown root:root /etc/fstab chmod 0644 /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 /et
16、c/fstab > /etc/fstab.new mv /etc/fstab.new /etc/fstab chown root:root console.perms /etc/fstab chmod 0600 console.perms chmod 0644 /etc/fstab 在基于Linux公布中一般用户在控制台上有更大权限, 能够使用CD-ROM和软盘驱动器.甚至在部分公布,比如Mandrake Linux受骗在机器上插入软盘或光碟时系统会经过supermount来自动mount这些驱动器. 3 对passwd, shadow, 和group文件设置正确许可权限: c
17、d /etc chown root:root passwd shadow group chmod 644 passwd group chmod 400 shadow 这些文件属主和组应该为root, passwd和group文件许可权限应该为644,shadow文件许可权限应该为400 4 对临时目录设置粘着位: chmod +t /tmp find /var -type d -perm -0222 -xdev -exec chmod +t {} \; 临时目录不设置粘着位会造成一般用户能够任意删除其它用户建立临时文件 5 查找未认证SUID/SGID可程序: fo
18、r part in \ `awk '($3 == "ext2" || $3 == “ext3”) \ { print $2 }' /etc/fstab` do find $part \( -perm -04000 -o -perm -0 \) \ -type f -xdev -print done 6.系统访问, 认证和授权: 检验项 注释: 1 在PAM配置文件中删除.rhosts支持: for file in `echo /etc/pam.d/*` ; do grep -v rhosts_auth $file > ${file}.new
19、 mv ${file}.new $file chown root:root $file chmod 644 $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
20、 限制 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 40
21、0 /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 \ mon
22、itored and reported." >>/etc/motd
chown root:root /etc/motd
chmod 644 /etc/motd
cat <
23、改变登录banner能够隐藏操作系统类型和版本号和其它系统信息,这些信息能够会对攻击者有用.
7
限制root登录到系统控制台:
cat <
24、conf文件开头加入以下行:
restricted
password=
25、检验项 注释: 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 qmai
26、ls \ 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 q 验证没有遗留下来’+’条目存在于passwd,shadow,group文件中: grep ^+: /etc/passwd /etc/shadow /etc/group 这些条目
27、可能会给攻击者提供一个路径来取得系统访问权限,假如存在化应该删除 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设置中假
28、如存在这些目录可能会造成超级用户误实施一个特洛伊木马 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目录
29、许可权限限制不严可能会造成恶意用户读/修改/删除其它用户数据或取得其它用户系统权限 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下通常以”.”开头文件是用户配置文件,假如存在全部用户可读/写配置文件可能会使恶意用户能读/写其它用户数据或取得其它用户系统权限
30、 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值有利于预防用户建立全部用户可写文件而危及用户数据. 8.关键安全工具安装: 检验项 注释: 1 安装SSH SSH是一个使用加密连接安全远程管理/数据传输协议.它能够用来替换telnet, r命令,ftp等传统不安全协议/命令.SSH最新实现软件能够在 ftp://下载 2 安装NTP NTP(网络时间协议)用于使网络上多个系统间时间同时,正确系统时间有利于确保系统日志正确性.






