当前位置:Linux教程 - Linux综合 - Linux服务器装机安全快速指南

Linux服务器装机安全快速指南

  本文以redhat6.2为例子讨论Linux服务器安装完成以后,应该马上采取哪些措施来增强服务器的安全性。对于其他的Linux发布或者版本,这些方法也是适用的。 一、关闭不必要的服务 Linux的服务分为两种,一种是由inetd超级服务器来启动的,如:FTP、telnet等;对于这些服务来说,系统并不总是运行telnetd、ftpd等服务进程,而是由inetd进程监听这些服务的服务端口,一旦有服务请求到达就启动对应的服务进程(如:telnetd等)来提供服务。另外一种是独立的服务器,系统一直运行有对应的服务进程。 关闭这两种服务的方法是不同的,对于inetd启动的进程: inetd超级服务器的配置文件为/etc/inetd.conf,该文件指示了inetd应该监听哪些服务请求,并在请求时启动对应的服务。因此只要通过编辑/etc/inetd.conf文件就可以实现关闭不需要的服务,例如希望关闭pop3服务,则在编辑/etc/inetd.conf文件以前文件中有如下的内容: pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d 要关闭pop3服务则在该行前添加注释符即可: #pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d 通过编辑该文件,实现关闭不需要的服务(例如我的系统我仅仅开放了telnet和ftp服务)以后,则需要重新启动inetd超级服务器。首先找到inetd的进程号: [root@aid /etc]# ps axgrep inetd 358 ? S 0:00 inetd 然后重新启动inetd服务器: [root@aid /etc]# kill -HUP 358 最后因为inetd.conf应该不允许普通用户读写,因此设置其访问权限为600: chmod 600 /etc/inetd.conf 而且该文件应该不被任何用户修改,包括root用户。因此为了防止用户错误的修改该文件,为该文件添加不可修改位: chattr +i /etc/inetd.conf 对于独立服务器,则需要通过/usr/sbin/ntsysv命令来修改: 只需要服务前面通过空格键来选择是否在系统启动时启动该服务就可以实现关闭某个服务器,如:希望系统关闭dhcpd服务,则通过上下键选中该服务器,然后通过空格键去掉该服务前[ ]内的星号即表示系统启动时不开放该服务。若希望了解某个服务的具体含义,可以选择该服务以后按F1键来查看该服务的含义。 设置完毕以后,只有希望打开的服务前的[ ]内才会有星号。然后通过Tab键选择OK,按空格键。重新启动机器。 重新启动机器以后,可以通过下面的命令来察看系统打开了哪些服务,来决定是否已经关闭了不需要的服务,例如我仅仅希望提供telnet服务则: [ideal@aid ideal]$ netstat -ln Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN raw 0 0 0.0.0.0:1 0.0.0.0:* 7 raw 0 0 0.0.0.0:6 0.0.0.0:* 7 Active UNIX domain sockets (only servers) Proto RefCnt Flags Type State I-Node Path 从上面的命令输出可以看到系统仅仅开放了23号端口,也就是telnet服务。 二、控制使用开放的服务的用户 在上面提到的/etc/inetd.conf的配置文件中,我们看到pop3服务配置一行的最后两个字段为: /usr/sbin/tcpd ipop3d 很显然,pop3的服务器程序为ipop3d,那么/usr/sbin/tcpd又是什么含义呢?这是一个称为Tcp wrapper的安全程序。该程序用来在启动某个服务以前查看两个配置文件来决定该用户是否允许使用该服务。在/etc目录下,有两个文件:hosts.deny hosts.allow。 通过配置这两个文件,你可以指定哪些客户机允许使用这些服务。配置这两个文件是通过一种简单的访问控制语言来实现的,访问控制语句的基本格式为: 程序名列表,主机名/IP地址列表。
[1] [2] [3] 下一页 

程序名列表指定一个或者多个提供相应服务的程序的名字,名字之间用逗号或者空格分隔,可以在inetd.conf文件里查看提供相应服务的程序名:如上面的文件示例中,pop所在行的最后一项就是所需的程序名:ipop3d。 主机名/IP地址列表指定允许或者禁止使用该服务的一个或者多个主机的标识,主机名之间用逗号或空格分隔。程序名和主机地址都可以使用通配符,实现方便的指定多项服务和多个主机。 当服务请求到达服务器时,访问控制软件就按照下列顺序查询这两个文件,直到遇到一个匹配为止: 1. 当在/etc/hosts.allow里面有一项与请求服务的主机地址项匹配,那么就允许该主机获取该服务 2. 否则,如果在/etc/hosts.deny里面有一项与请求服务的主机地址项匹配,就禁止该主机使用该项服务 3. 若均没有匹配,则允许使用该服务。若相应的配置文件不存在,访问控制软件就认为是一个空文件,所以可以通过删除或者移走配置文件实现对所有主机关闭所有服务。 在文件中,空白行或者以#开头的行被忽略,你可以通过在行前加 # 实 现注释功能。Linux提供了下面灵活的方式指定进程或者主机列表: 1. 一个以"."起始的域名串,如 .amms.ac.cn 那么www.amms.ac.cn就和这一项匹配成功 2. 以.结尾的IP串如 202.37.152. 那么IP地址包括202.37.152.的主机都与这一项匹配 3. 格式为n.n.n.n/m.m.m.m表示网络/掩码,如果请求服务的主机的IP地址与掩码的位与的结果等于n.n.n.n 那么该主机与该项匹配。 4. ALL表示匹配所有可能性 5. EXPECT表示除去后面所定义的主机。如:list_1 EXCEPT list_2 表示list_1主机列表中除去List_2所列 出的主机 6. LOCAL表示匹配所有主机名中不包含.的主机 上面的几种方式只是Linux提供的方式中的几种,但是对于我们的一般应用来说是足够了。我们通过举几个例子来说明这个问题: 例一:我们只希望允许同一个局域网的机器使用服务器的ftp功能,而禁止互联网上面的ftp服务请求,本地局域网由 202.39.154. 、202.39.153. 和202.39.152. 三个网段组成。在hosts.deny文件中,我们定义禁止所有机器请求所有服务: ALL:ALL 在hosts.allow文件中,我们定义只允许局域网访问ftp功能: in.ftpd: 202.39.154 202.39.153. 202.39.152. 这样,当非局域网的机器请求ftp服务时,就会被拒绝。而局域网的机器可以使用ftp服务。 ALL:ALL 然后重新启动你的 inetd进程: /etc/rc.d/init.d/inet restart 但是hosts.denyallow文件只控制/etc/inetd.conf文件中包含的服务的访问这些服务有/usr/bin/tcpd管 理,监听接入的网络请求,然后与在hosts.allow和hosts.deny的中的服务比较,然后做出允许或拒绝的决定。 最后因为hosts.allowhosts.deny应该不允许普通用户读写,因此设置其访问权限为600: chmod 600 /etc/hosts.* 并且该文件应该不被任何用户修改,包括root用户。因此为了防止用户错误的修改该文件,为该文件添加不可修改位: chattr +i /etc/hosts.* 三、"/etc/exports"文件设置 如果通过NFS把文件共享出来,那么一定要配置"/etc/exports"文件,使得访问限制尽可能的严。这就是说,不要用通配符,不允许对根目录有写权限,而且尽可能只给只读权限。编辑exports文件(vi /etc/exports)加入: 例如: /dir/to/export host1.mydomain.com(ro,root_squash) /dir/to/export host2.mydomain.com(ro,root_squash) "/dir/to/export"是你想共享出来的目录,host.mydomain.com是允许访问这个目录的计算机。 代表只读,代表不允许对根目录进行写操作。使这些改变生效,你还要运行 "/usr/sbin/exportfs -a"命令。 注意:在服务器上装NFS服务是会有安全隐患的,就我个人而言,不建议你使用NFS。 四、禁止使用控制台程序 一个最简单而且最常用的保证系统安全的方法就是禁止使用所有的控制台程序,如:shutdown和halt。可以运行下面的命令来实现:
上一页 [1] [2] [3] 下一页 

[root@aid /]# rm -f /etc/security/console.apps/servicename 这里servicename是你要禁止的控制台程序名。除非你使用xdm,否则不要把xserver文件删掉,如果这样除了root之外,没有人可以启动X服务器了。(如果使用xdm启动X服务器,这时root是唯一需要启动X服务器的用户,这才有必要把xserver文件删掉)。例如: [root@deep]# rm -f /etc/security/console.apps/halt [root@deep]# rm -f /etc/security/console.apps/poweroff [root@deep]# rm -f /etc/security/console.apps/reboot [root@deep]# rm -f /etc/security/console.apps/shutdown [root@deep]# rm -f /etc/security/console.apps/xserver (如果删除,只有root可以启动X). 这些命令就可以禁止所有的控制台程序:halt、poweroff、reboot和shutdown。记住,只有装了Xwindow,删除xerver文件才会有效果。 五、"/etc/aliases"文件 aliases文件可能会造成安全隐患。例如:很多的软件产商都把 "decode"这个别名放在aliases文件里。这样做的目的是为了方便通过email传送二进制文件。在发送邮件的时候,用户把二进制

(出处:http://www.sheup.com)


上一页 [1] [2] [3] 

这里servicename是你要禁止的控制台程序名。除非你使用xdm,否则不要把xserver文件删掉,如果这样除了root之外,没有人可以启动X服务器了。(如果使用xdm启动X服务器,这时root是唯一需要启动X服务器的用户,这才有必要把xserver文件删掉)。例如: [root@deep]# rm -f /etc/security/console.apps/halt [root@deep]# rm -f /etc/security/console.apps/poweroff [root@deep]# rm -f /etc/security/console.apps/reboot [root@deep]# rm -f /etc/security/console.apps/shutdown [root@deep]# rm -f /etc/security/console.apps/xserver (如果删除,只有root可以启动X). 这些命令就可以禁止所有的控制台程序:halt、poweroff、reboot和shutdown。记住,只有装了Xwindow,删除xerver文件才会有效果。 五、"/etc/aliases"文件 aliases文件可能会造成安全隐患。例如:很多的软件产商都把 "decode"这个别名放在aliases文件里。这样做的目的是为了方便通过email传送二进制文件。在发送邮件的时候,用户把二进制

(出处:http://www.sheup.com/)


上一页 [1] [2] [3] [4]