众所周知网络安全是一个非常重要的课题而服务器是网络安全中最关键的环节Linux被认为是一个比较安全的Internet服务器作为一种开放源代码操作系统一旦Linux系统中发现有安全漏洞Internet上来自世界各地的志愿者会踊跃修补它然而系统管理员往往不能及时地得到信息并进行更正这就给黑客以可乘之机相对于这些系统本身的安全漏洞更多的安全问题是由不当的配置造成的可以通过适当的配置来防止服务器上运行的服务越多不当的配置出现的机会也就越多出现安全问题的可能性就越大对此下面将介绍一些增强Linux/Unix服务器系统安全性的知识 一系统安全记录文件 操作系统内部的记录文件是检测是否有网络入侵的重要线索如果您的系统是直接连到Internet您发现有很多人对您的系统做Telnet/FTP登录尝试可以运行\#more /var/log/secure | grep refused\来检查系统所受到的攻击以便采取相应的对策如使用SSH来替换Telnet/rlogin等 二启动和登录安全性 .BIOS安全 设置BIOS密码且修改引导次序禁止从软盘启动系统 .用户口令 用户口令是Linux安全的一个基本起点很多人使用的用户口令过于简单这等于给侵入者敞开了大门虽然从理论上说只要有足够的时间和资源可以利用就没有不能破解的用户口令但选取得当的口令是难于破解的较好的用户口令是那些只有他自己容易记得并理解的一串字符并且绝对不要在任何地方写出来 .默认账号 应该禁止所有默认的被操作系统本身启动的并且不必要的账号当您第一次安装系统时就应该这么做Linux提供了很多默认账号而账号越多系统就越容易受到攻击 可以用下面的命令删除账号 # userdel用户名 或者用以下的命令删除组用户账号 # groupdel username .口令文件 chattr命令给下面的文件加上不可更改属性从而防止非授权用户获得权限 # chattr +i /etc/passwd # chattr +i /etc/shadow # chattr +i /etc/group # chattr +i /etc/gshadow .禁止Ctrl+Alt+Delete重新启动机器命令 修改/etc/inittab文件将\ca::ctrlaltdel:/sbin/shutdown t r now\一行注释掉然后重新设置/etc/rcd/initd/目录下所有文件的许可权限运行如下命令 # chmod R /etc/rcd/initd/* 这样便仅有root可以读写或执行上述所有脚本文件 .限制su命令 如果您不想任何人能够su作为root可以编辑/etc/pamd/su文件增加如下两行 auth sufficient /lib/security/pam_rootokso debug auth required /lib/security/pam_wheelso group=isd 这时仅isd组的用户可以su作为root此后如果您希望用户admin能够su作为root可以运行如下命令 # usermod G admin .删减登录信息 默认情况下登录提示信息包括Linux发行版内核版本名和服务器主机名等对于一台安全性要求较高的机器来说这样泄漏了过多的信息可以编辑/etc/rcd/rclocal将输出系统信息的如下行注释掉 # 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/ # echo >> /etc/issue 然后进行如下操作 # rm f /etc/issue # rm f /etc/ # touch /etc/issue # touch /etc/ 三限制网络访问 .NFS访问 如果你使用NFS网络文件系统服务应该确保您的/etc/exports具有最严格的访问权限设置也就是意味着不要使用任何通配符不允许root写权限并且只能安装为只读文件系统编辑文件/etc/exports并加入如下两行 /dir/to/export (roroot_squash) /dir/to/export (roroot_squash) /dir/to/export 是您想输出的目录是登录这个目录的机器名ro意味着mount成只读系统root_squash禁止root写入该目录为了使改动生效运行如下命令 # /usr/sbin/exportfs a .Inetd设置 首先要确认/etc/nf的所有者是root且文件权限设置为设置完成后可以使用\stat\命令进行检查 # chmod /etc/nf 然后编辑/etc/nf禁止以下服务 ftp telnet shell login exec talk ntalk imap pop pop finger auth 如果您安装了ssh/scp也可以禁止掉Telnet/FTP为了使改变生效运行如下命令 #killall HUP inetd 默认情况下多数Linux系统允许所有的请求而用TCP_WRAPPERS增强系统安全性是举手之劳您可以修改/etc/hostsdeny和/etc/hostsallow来增加访问限制例如将/etc/hostsdeny设为\ALL: ALL\可以默认拒绝所有访问然后在/etc/hostsallow文件中添加允许的访问例如\sshd: / \表示允许IP地址和主机名允许通过SSH连接 配置完成后可以用tcpdchk检查: # tcpdchk tcpchk是TCP_Wrapper配置检查工具它检查您的tcp wrapper配置并报告所有发现的潜在/存在的问题 .登录终端设置 /etc/securetty文件指定了允许root登录的tty设备由/bin/login程序读取其格式是一个被允许的名字列表您可以编辑/etc/securetty且注释掉如下的行 #tty # tty # tty # tty # tty # tty 这时root仅可在tty终端登录 .避免显示系统和版本信息 如果您希望远程登录用户看不到系统和版本信息可以通过一下操作改变/etc/nf文件 telnet stream tcp nowait root /usr/sbin/tcpd intelnetd h 加h表示telnet不显示系统信息而仅仅显示\login:\ 四防止攻击 .阻止ping 如果没人能ping通您的系统安全性自然增加了为此可以在/etc/rcd/rclocal文件中增加如下一行 echo > /proc/sys/net/ipv/icmp_echo_ignore_all .防止IP欺骗 编辑nf文件并增加如下几行来防止IP欺骗攻击 order bindhosts multi off nospoof on .防止DoS攻击 对系统所有的用户设置资源限制可以防止DoS类型攻击如最大进程数和内存使用数量等例如可以在/etc/security/nf中添加如下几行 * hard core * hard rss * hard nproc 然后必须编辑/etc/pamd/login文件检查下面一行是否存在 session required /lib/security/pam_limitsso 上面的命令禁止调试文件限制进程数为并且限制内存使用为MB 经过以上的设置你的Linux服务器已经可以对绝大多数已知的安全问题和网络攻击具有免疫能力但一名优秀的系统管理员仍然要时刻注意网络安全动态随时对已经暴露出的和潜在安全漏洞进行修补