安全使用Red Hat Linux系统

本文将讲述一些基本的安全措施,使你能更安全地使用Linux,并且主要是关于Red Hat Linux的安全使用。

BIOS安全

记着要在BIOS设置中设定一个BIOS密码,不接收软盘启动。这样可以阻止不怀好意的人用专门的启动盘启动你的Linux系统,并避免别人更改BIOS设置,如更改软盘启动设置或不弹出密码框直接启动服务器等。

LILO安全

在“/etc/lilo.conf”文件中添加3个参数:time-out、restricted 和 password。这些选项会在启动时间(如“linux single”)转到启动转载程序过程中,要求提供密码。

步骤1
编辑lilo.conf文件(/etc/lilo.conf),添加和更改这三个选项:

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
time-out=00 #change this line to 00
prompt
Default=linux
restricted #add this line
password=

  1<password> #add this line and put your password   
  2image=/boot/vmlinuz-2.2.14-12   
  3label=linux   
  4initrd=/boot/initrd-2.2.14-12.img   
  5root=/dev/hda6   
  6read-only 
  7
  8步骤2   
  9由于其中的密码未加密,“/etc/lilo.conf”文件只对根用户为可读。   
 10[root@kapil /]# chmod 600 /etc/lilo.conf (不再为全局可读) 
 11
 12步骤3   
 13作了上述修改后,更新配置文件“/etc/lilo.conf”。   
 14[Root@kapil /]# /sbin/lilo -v (更新lilo.conf文件) 
 15
 16步骤4   
 17还有一个方法使“/etc/lilo.conf”更安全,那就是用chattr命令将其设为不可改:   
 18[root@kapil /]# chattr +i /etc/lilo.conf   
 19它将阻止任何对“lilo.conf”文件的更改,无论是否故意。 
 20
 21关于lilo安全的更多信息,请参考LILO。 
 22
 23**禁用所有专门帐号**
 24
 25在lp, sync, shutdown, halt, news, uucp, operator, games, gopher等系统中,将你不使用的所有默认用户帐号和群组帐号删除。   
 26要删除用户帐号:   
 27[root@kapil /]# userdel LP 
 28
 29要删除群组帐号:   
 30[root@kapil /]# groupdel LP 
 31
 32**选择恰当的密码**
 33
 34选择密码时要遵循如下原则:   
 35  
 36密码长度:安装Linux系统时默认的最短密码长度为5个字符。这个长度还不够,应该增为8个。要改为8个字符,必须编辑 login.defs 文件(/etc/login.defs): 
 37
 38PASS_MIN_LEN 5   
 39改为:   
 40PASS_MIN_LEN 8   
 41  
 42“login.defs”是登录程序的配置文件。   
 43  
 44**启用盲区密码支持**
 45
 46请启用盲区密码功能。要实现这一点,使用“/usr/sbin/authconfig”实用程序。如果想把系统中现有的密码和群组改为盲区密码和群组,则分别用 pwconv 和 grpconv 命令。 
 47
 48**根帐户**
 49
 50在UNIX系统中,根帐户具有最高权限。如果系统管理员在离开系统时忘了从根系统注销,系统应该能够自动从shell中注销。那么,你就需要设置一个特殊的 Linux 变量“TMOUT”,用以设定时间。   
 51  
 52编辑“/etc/profile”文件在   
 53  
 54"HISTFILESIZE="   
 55之后添加:   
 56TMOUT=3600   
 57  
 58为“TMOUT=”输入的值代表1小时的妙数(60 * 60 = 3600妙)。   
 59  
 60在“/etc/profile”文件中加了这一行后,任何用户使用该系统时有1小时的休止状态,将自动执行注销操作。而如果用户要对该变量进行分别设定,可以在“.bashrc”文件中定义自动注销的时间。   
 61  
 62修改了该参数后,必须退出并重新登录(为根帐户),更改才能生效。 
 63
 64禁止普通用户对控制台的所有访问 
 65
 66应该禁止服务器上的普通用户对关闭、重启、挂起等控制台级别程序的访问。运行如下命令:   
 67  
 68[root@kapil /]# rm -f /etc/security/console.apps/<servicename>   
 69  
 70其中<servicename>为禁止访问的程序名称。 
 71
 72**禁用 &amp; 卸载所有不使用的服务 **
 73
 74对所有不使用的服务,应该禁用并卸载,这样可以少些麻烦。查看“/etc/inetd.conf”文件,在不需要的项目行前加“#”号,即改为注释语句,就可以禁用它们了。然后给 inetd 过程发送一个 SIGHUP 命令,对“inetd.conf”文件进行更新。步骤如下: 
 75
 76步骤1   
 77将“/etc/inetd.conf”文件许可改为600,使其只对根用户为可读写。   
 78  
 79[Root@kapil /]# chmod 600 /etc/inetd.conf 
 80
 81步骤2   
 82确保“/etc/inetd.conf”文件的所有者为根用户。 
 83
 84步骤3   
 85编辑 inetd.conf 文件(/etc/inetd.conf),禁用如下服务:   
 86  
 87ftp、telnet、shell、login、exec、talk、ntalk、imap、pop-2、pop-3、finger、auth,等等。   
 88  
 89如果不打算用,禁用了这些服务可以减少风险。 
 90
 91步骤4   
 92给 inetd 过程发送HUP信号:   
 93  
 94[root@kapil /]# killall -HUP inetd 
 95
 96步骤5   
 97将“/etc/inetd.conf”文件设为不可更改,chattr 命令可以使任何人都无法对其进行修改:   
 98  
 99[root@kapil /]# chattr +i /etc/inetd.conf   
100  
101唯一可以设置或清除该属性的用户只有根用户。要修改inetd.conf文件,必须去掉不可更改标记:   
102  
103[root@kapil /]# chattr -i /etc/inetd.conf 
104
105**TCP_WRAPPERS**
106
107通过 TCP_WRAPPERS,可以使服务器更好地抵制外部侵入。最好的办法是拒绝所有主机:在“/etc/hosts.deny”文件中加入“ALL: ALL@ALL, PARANOID”,然后在“/etc/hosts.allow”列出允许访问的主机。TCP_WRAPPERS 受控于两个文件,搜索时停在第一个匹配的地方。   
108  
109/etc/hosts.allow   
110/etc/hosts.deny 
111
112步骤1   
113编辑 hosts.deny 文件(/etc/hosts.deny),加入如下行:   
114  
115# Deny access to everyone.   
116ALL: ALL@ALL, PARANOID   
117  
118语句的意思是,除非在 allow 文件中说明允许访问,所有服务、所有主机都被拒绝。 
119
120步骤2   
121编辑 hosts.allow 文件(/etc/hosts.allow),例如在文件中添加如下行:   
122  
123ftp: 202.54.15.99 foo.com   
124  
125对于你的客户机来说:202.54.15.99为IP地址,foo.com为允许使用ftp的一个客户机。 
126
127步骤3   
128tcpdchk 程序是tcpd wrapper配置的检查程序。它对tcpd wrapper的配置进行检查,并报告所发现的潜在的和实际存在的问题。配置完成后,运行tcpdchk 程序:   
129  
130[Root@kapil /]# tcpdchk 
131
132**不要显示系统发行文件**
133
134当别人远程登录时,不应该显示系统发行文件。做法是在“/etc/inetd.conf”文件中更改telnet选项: 
135
136telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd   
137改为:   
138telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -h 
139
140在末尾加“-h”标记使后台程序不显示任何系统信息,而只给用户提供一个 login: 提示符。 
141
142更改“/etc/host.conf”文件 
143
144“/etc/host.conf”文件用来指定如何解析名称的方法。编辑 host.conf 文件(/etc/host.conf),添加如下各行:   
145  
146# Lookup names via DNS first then fall back to /etc/hosts.   
147order bind,hosts   
148# We have machines with multiple IP addresses.   
149multi on   
150# Check for IP address spoofing.   
151nospoof on 
152
153第一个选项首先通过DNS解析主机名称,然后解析主机文件。multi 选项用于确定“/etc/hosts”文件中的主机是否有多个IP地址(多接口以太网)。   
154  
155nospoof 选项指明该机器不允许假信息。 
156
157为“/etc/services”文件免疫 
158
159必须为“/etc/services”文件进行磁盘免疫,以避免对文件未经授权的删除或添加。使用如下命令:   
160[root@kapil /]# chattr +i /etc/services 
161
162不接受从不同控制台的根用户登录 
163
164“/etc/securetty”文件可以指定“root”用户允许从哪个TTY设备登录。编辑“/etc/securetty”文件,在不需要的tty前面加“#”,禁用这些设备。 
165
166禁止任何人使用su命令 
167
168su命令(Substitute User,替代用户)可以使你成为系统的现有用户。如果不希望别人使用su进入根帐户,或者对某些用户限制使用“su”命令,则在“/etc/pam.d/”目录的“su”配置文件顶部加上下文中给出的两行代码。 
169
170编辑su文件(/etc/pam.d/su),在文件顶部添加如下两行:   
171  
172auth sufficient /lib/security/pam_rootok.so debug   
173auth required /lib/security/Pam_wheel.so group=wheel 
174
175意思是,只有“wheel”组的成员可以用su命令;其中还包括了日志。你可以在wheel组中添加允许使用该命令的用户。 
176
177**shell日志**
178
179shell可存储500个旧命令在“~/.bash_history”文件中(其中“~/”代表主目录),这样可以便于重复前面的长命令。系统中的每个帐号用户在各自的主目录中都有这个“.bash_history”文件。为安全起见,应使shell存储较少的命令,并在注销用户时将其删除。 
180
181步骤1   
182“/etc/profile”文件中的 HISTFILESIZE 和 HISTSIZE 行决定了系统中所有用户的“.bash_history”文件可容纳的旧命令个数。建议将“/etc/profile”文件中的 HISTFILESIZE 和 HISTSIZE 设为比较小的数,比如30。   
183  
184编辑 profile 文件(/etc/profile),并更改:   
185  
186HISTFILESIZE=30   
187HISTSIZE=30 
188
189步骤2   
190系统管理员还应在“/etc/skel/.bash_logout”文件中加进“rm -f $HOME/.bash_history”行,这样就可以在每次用户退出时删除“.bash_history”文件。   
191  
192编辑 .bash_logout 文件(/etc/skel/.bash_logout),并添加如下行:   
193  
194rm -f $HOME/.bash_history 
195
196禁用 Control-Alt-Delete 键盘关机命令 
197
198只要在该行前面加“#”,改为注释行。在“/etc/inittab”文件中找到: 
199
200ca::ctrlaltdel:/sbin/shutdown -t3 -r now 
201
202改为: 
203
204#ca::ctrlaltdel:/sbin/shutdown -t3 -r now 
205
206然后,为使更改生效,在提示符下输入: 
207
208[root@kapil /]# /sbin/init q 
209
210修正脚本文件在“/etc/rc.d/init.d”目录下的权限。 
211
212对脚本文件的权限进行修正,脚本文件用以决定启动时需要运行的所有正常过程的开启和停止。添加: 
213
214[root@kapil/]# chmod -R 700 /etc/rc.d/init.d/* 
215
216这句指的是,只有根用户允许在该目录下使用 Read、Write,和 Execute 脚本文件。 
217
218**隐藏系统信息**
219
220默认情况下,当用户登录到 Linux 中时,会显示 Linux 发行名称、版本、内核版本,以及服务器名称。这些已经足够让黑客获取服务器的信息了。正确的做法是只为用户显示“Login: ”提示符。 
221
222步骤1 
223
224编辑“/etc/rc.d/rc.local” 文件,并将“#”标在下列行的前面: 
225
226# This will overwrite /etc/issue at every boot. So, make any changes you   
227# want to make to /etc/issue here or you will lose them when you reboot.   
228#echo "" &gt; /etc/issue   
229#echo "$R" &gt;&gt; /etc/issue   
230#echo "Kernel $(uname -r) on $a $(uname -m)" &gt;&gt; /etc/issue   
231#   
232#cp -f /etc/issue /etc/issue.net   
233#echo &gt;&gt; /etc/issue 
234
235步骤2 
236
237然后在“/etc”目录下删除“issue.net”和“issue”文件:   
238  
239[root@kapil /]# rm -f /etc/issue   
240[root@kapil /]# rm -f /etc/issue.net 
241
242禁用通常不用的 SUID/SGID 程序 
243
244如果设为 SUID 根用户,普通用户也可以作为根用户运行程序。系统管理员应该减少 SUID/GUID 程序的使用,并禁用那些不需要的程序。 
245
246要从根用户的程序中搜索所有包含“s”字符的文件,使用命令:   
247[root@kapil]# find / -type f \\( -perm -04000 -o -perm -02000 \\) \\-exec ls -lg {} \; 
248
249要在搜索到的程序中禁用 suid 程序,键入如下命令:   
250[root@kapil /]# chmod a-s [program] 
251
252按照上述的一些安全指南,系统管理员就可以达到基本的系统安全要求。上述的一些操作是一个连续的过程。系统管理员必须保持它们的连续性,才能使系统真正安全。</servicename></servicename></password>
Published At
Categories with 网络技术
comments powered by Disqus