不要让您的的红帽子变成绿帽子简介:本文将介绍增强Linux 安全的几个基本步骤,让每个人都能为RedHat 的箱子加上一把坚固的锁。
 简介:本文将介绍增强Linux 安全的几个基本步骤,让每个人都能为RedHat 的箱子加上一把坚固的锁。
 一、BIOS 安全永远为机器加上BIOS 口令,防治从软盘启动。这样就能阻挡一些别有用心的人设置BIOS 。
 二、LILO 安全为 "/etc/lilo.conf" 增加三个参数:time-out, restricted 和 password。这些选项将会在启动时询问口令。
 第一步:编辑 lilo.conf 文件,增加或者改变这三个选项:
 : boot=/dev/hda map=/boot/map install=/boot/boot.b time-out=00
# 改变这行的参数为 00prompt Default=linux restricted
# 增加这一行password=<password>
# 增加这一行,加入口令,注意:这里是明码
 p_w_picpath=/boot/vmlinuz-2.2.14-12 label=linux initrd=/boot/initrd-2.2.14-12.img root=/dev/hda6 read-only
第二步:设置"/etc/lilo.conf" 文件为root 只读,因为他包含了未加密的口令。
 [root@kapil /]# chmod 600 /etc/lilo.conf
第三步:让改变生效
 [Root@kapil /]# /sbin/lilo -v
第四步:另外一步更加安全的步骤是,使用chattr 让该文件永远不会被改变。[
 
root@kapil /]# chattr +i /etc/lilo.conf
这样就防止了对/etc/lilo.conf 文件的可能改变(无论是有意还是无意)
 三、禁用所有特殊帐户应该删除你系统中没有用到的所有缺省的用户和组,像 lp,sync,shutdown,halt,news,uucp,operator,games,gopher 等。一个删除lp 用户的示范命令:
 [root@kapil /]# userdel lp
 一个删除lp 组的示范命令:
 [root@kapil /]# groupdel LP
四、选择好口令口令长度:系统安装完毕,缺省的最短长度是5位,这个其实并不够,至少8位。
 编辑/etc/login.defs 文件,改变 PASS_MIN_LEN 5 为 PASS_MIN_LEN 8
五、支持 shadow 口令你应该打开口令的 shadow 特性,如果没有,可以使用 "/usr/sbin/authconfig" 来打开。如果要把当前口令转换到shadow 的话,可以使用pwconv和 grpconv 分别来转换用户和组信息。
 六、root 帐户在Unix 系统里,"root" 帐户是享有特权的帐户,如果系统管理员忘记了从 root 提示符下退出,那么必须设定空闲限时退出。必须设定特定的环境变量:"TMOUT" 来指定秒数。编辑/etc/profile 文件,在 "HISTFILESIZE=" 行之后增加TMOUT=3600 这样系统中的任何用户只要超过一个小时空闲就会自动logout。对于个别用户的不同需求,可以通过在".bashrc " 中设置来解决。您必须重新登录一遍才能生效。
 七、禁止所有与控制台等同存取权限的用户 您应该禁止让普通用户使用诸如shutdown, reboot 以及 halt 等的命令。运行以下的命令就可以做到:
 [root@kapil /]# rm -f /etc/security/console.apps/<servicename>
其中的 <servicename> 就是您想要禁止的程序名字。
 八、禁止或者卸载没有用到的服务您应该禁止或者卸载您没有用到的服务,这样,您担心的事情就又少了一样。检查 "/etc/inetd.conf" 文件,注释掉那些你不需要的行(前面加# 号了),然后发送一个SIGHUP 信号给inetd 进程,使他得到最新的"inetd.conf" 文件配置信息。
 步骤如下:
 第一步:改变文件"/etc/inetd.conf"的权限为 600,这样只有root 才能读写。
 [root@kapil /]# chmod 600 /etc/inetd.conf
第二步:确认 "/etc/inetd.conf" 的文件属主是root 。
 第三步:编辑 inetd.conf 文件,禁止服务,例如:ftp, telnet, shell, login, exec, talk, ntalk, imap, pop-2, pop-3, finger, auth, 等,除非你计划使用他们。如果关掉了这些服务,危险程度就降低了很多。
 第四步:发送一个 HUP 信号给 inetd 进程
 [root@kapil /]# killall -HUP inetd
第五步:设置 "/etc/inetd.conf" 为不可改变,还是使用chattr 命令。
 [root@kapil /]# chattr +i /etc/inetd.conf
这样,就算是root 要更改文件,也必须首先关掉“不可更改”的状态:
 [root@kapil /]# chattr -i /etc/inetd.conf 然后,才能修改了。
 九、使用TCP_WRAPPERS 通过利用 TCP_WRAPPERS ,您可以使服务器不怕外界的侵入了。最好的策略是在"/etc/hosts.deny"中使用下面的语句挡住所有的主机"ALL:
ALL@ALL, PARANOID" 然后那些特定在"/etc/hosts.allow" 列出的主机才可以访问。
 TCP_WRAPPERS 由以上提到的两个文件控制,搜索主机时,遇到第一个符合条件的即停止。
 实施步骤:第一步:编辑 hosts.deny 文件,添加以下行:
 # Deny access to everyone. ALL:
ALL@ALL, PARANOID
也即所有服务和所有主机被挡住,除非在allow 文件中指定。
 第二步:编辑 hosts.allow 文件,添加以下示范行:ftp: 202.54.15.99 foo.com这个例子中,只有202.54.15.99 和 foo.com 才可以使用ftp 。
 第三步:使用 tcpdchk 检查 tcpd wrapper 的配置。它除了检查外,还能报告潜在的和实际存在的问题。因此配置完毕以后,运行这个程序。
 [root@kapil /]# tcpdchk
十、不要显示系统的 issue 文件没有必要让系统显示 issue 文件给远程登录的用户,因此,可以在"/etc/inetd.conf" 文件中改变telnet 选项。改变前:
 telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
 改变后的内容:
 telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -h
增加的 "-h" 参数,导致守护程序不显示任何系统信息,只是显示给用户 login:
提示,建议您使用 ssh 。
 注意: RH7.0 采用了 xinetd ,因此需要修改 /etc/xinetd.d 目录下面的 telnet 文件。
 十一、改变 "/etc/host.conf" 文件"/etc/host.conf" 文件指定主机名怎样解析。编辑 host.conf 文件,加入下面的行:
 # Lookup names via DNS first then fall back to /etc/hosts. order bind,hosts
# We have machines with multiple IP addresses. multi on
# Check for IP address spoofing. nospoof on
第一个选项,指定解析顺序为首先DNS,然后 hosts 文件。multi 选项决定"/etc/hosts" 文件中的主机是否可以有多个IP 地址(多张 ethN 界面). nospoof 选项不允许对本机欺骗(spoofing) 。
 十二、使 "/etc/services" 文件不可改变你必须使 "/etc/services" 文件不可改变以防止未经授权的删除或增加服务
 [root@kapil /]# chattr +i /etc/services
十三、不允许root 从不同的控制台登录"/etc/securetty" 文件允许您指定root 可以从那些TTY 设备登录。编辑 "/etc/securetty" 文件,禁止那些不想让root 登录的行。行首加一个 # 号注释就可以了)
 十四、阻止任何人通过 su 成为 root su 命令允许你成为系统中的其他用户,如果不想让任何人su 到root ,或者限制su 对特定用户使用,那么只要在/etc/pam.d 目录中的su 文件头上加上下面的两行:
 auth sufficient /lib/security/pam_rootok.so debug
auth required /lib/security/Pam_wheel.so group=wheel
意思是只有 "wheel" 组的用户才能 su 到 root,同时包括日志记录。
 十五、Shell 日志记录bash shell 可以存储 500 条命令历史在"~/.bash_history" 文件中,以方便您输入那些很长的命令。每个用户的目录下有".bash_history" 文件,bash shell 应该存储较少的命令,在退出时删除。
 具体步骤如下:
 第一步:变量 HISTFILESIZE 和 HISTSIZE 存放在 "/etc/profile" 文件中,决定了".bash_history" 文件的大小,建议您使用较小的数值30。编辑 /etc/profile ,改变为:HISTFILESIZE=30 HISTSIZE=30 意思是:每一个用户自己目录下的 ".bash_history" 文件最多容纳30 条命令,系统最多记忆30条命令。
 第二步:系统管理员应该把 "rm -f $HOME/.bash_history" 行加入到 "/etc/skel/.bash_logout" 文件中,这样用户每次退出,他的 ".bash_history" 文件都会被删除。vi /etc/skel/.bash_logout 增加以下行:rm -f $HOME/.bash_history
十六、禁止 Control-Alt-Delete 关机只要在 "/etc/inittab" 中注释掉以下行就可以了ca::ctrlaltdel:/sbin/shutdown -t3 -r now
变为:
 #ca::ctrlaltdel:/sbin/shutdown -t3 -r now
让改变生效:
 [root@kapil /]# /sbin/init q
十七、修复"/etc/rc.d/init.d" 目录下脚本文件的权限修复那些重要的管理服务启动和停止的脚本文件的权限:
 [root@kapil/]# chmod -R 700 /etc/rc.d/init.d/*
这样这个目录下的文件就只有root 有读写和执行的权限了。
 十八、隐藏系统信息缺省地,当你登录系统时,它会告诉你Linux 的发行版本名字,版本号,核心版本以及服务器名字,这样对于***来说,了解你的系统就已经足够了。因此必须尽量减少“外泄”的信息,而只是提示:"Login:"。
 第一步:编辑 "/etc/rc.d/rc.local" 文件,在以下行前面加入"#" 号。
 # This will overwrite /etc/issue at every boot. So, make any changes you
# want to make to /etc/issue here or you will lose them when you reboot.
#echo "" > /etc/issue #echo "$R" >> /etc/issue
#echo "Kernel $(uname -r) on $a $(uname -m)" >> /etc/issue
# #cp -f /etc/issue /etc/issue.net #echo >> /etc/issue
第二步:删除/etc 目录下的以下文件: "issue.net" 和 "issue"
 [root@kapil /]# rm -f /etc/issue
[root@kapil /]# rm -f /etc/issue.net
十九、禁止没有使用的 SUID/SGID 程序一个普通用户能用root 权限执行一个程序,只要它设置了 SUID 为root。系统管理员应该尽量不使用 SUID/GUID 程序并禁止那些不需要使用的程序。
 第一步:查找带有s 位的,由 root 拥有的程序:
 [root@kapil]# find / -type f \( -perm -04000 -o -perm -02000 \) \-exec ls -lg {} \;
禁止某个程序的 suid 位:
 [root@kapil /]# chmod a-s [program]
小结:经过以上一些基本步骤,一个系统管理员就能维护起基本的系统安全了。系统安全是一个连续的,相互关联的工作,因此,系统管理员必须全面,连贯地来理解和运用上面的一些基本步骤。本文最新的版本见于
http://www.opencontent.org/openpub/
 【转自bbs.bitsCN.com】