蚂蚁网招聘:如何实现LINUX安全

来源:百度文库 编辑:九乡新闻网 时间:2024/04/25 06:19:50

将网络上众多关于LINUX基本安全的文档整理归类了一下,并不是完整版,不全之处还望多多指教:

一、基本

  安装时,最好隔离网络进行系统安装。

1、 避免分区溢出

  对/var用单独分区,用来存放日志和邮件,以避免root分区被溢出。因为如果用root分区记录如log文件,就有可能因为拒绝服务产生大量日志或垃圾邮件,从而导致系统崩溃。/home单独分一个区,特别是可以产生大量日志的程序,单独分一个区。

2、 设置Bios密码,以防通过在Bios中改变启动顺序,而可以从软盘启动。

  这样可以阻止别人试图用特殊的启动盘启动你的系统,还可以阻止别人进入Bios改动其中的设置。

3、 为单用户引导加上密码

  在“/etc/lilo.conf”文件中加入三个参数:time-out,restricted,password。这三个参数可以使你的系统在启动lilo时就要求密码验证。

a): 编辑lilo.conf文件(vi /etc/lilo.conf),假如或改变这三个参数:

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
time-out=00 #把这行该为00
prompt
Default=linux
##########加入这行
restricted
##########加入这行并设置自己的密码
password=
image=/boot/vmlinuz-2.2.14-12
label=linux
initrd=/boot/initrd-2.2.14-12.img
root=/dev/hda6
read-only

b):因为”/etc/lilo.conf”文件中包含明文密码,所以要把它设置为root权限读取。
[root]# chmod 600 /etc/lilo.conf

c):更新系统,以便对“/etc/lilo.conf”文件做的修改起作用。
[root]# /sbin/lilo -v

d):使用“chattr”命令使”/etc/lilo.conf”文件变为不可改变。
[root]# chattr +i /etc/lilo.conf

4、禁止Control-Alt-Delete 键盘关闭命令
在”/etc/inittab” 文件中注释掉下面这行:
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now
为了使这项改动起作用,输入下面这个命令:
[root]# /sbin/init q

二、隐藏系统的信息

  1、在缺省的情况下,当登陆到LINUX系统上,系统回打印出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

(2):删除/etc目录下的issue.net和issue文件。

[boot]#rm -f /etc/issue
[boot]#rm -f /etc/issue.net
[root]# touch /etc/issue
[root]# touch /etc/issue

2、当有人远程登陆时,禁止显示系统欢迎信息。你可以通过修改“/etc/inetd.conf”文件来达到这个目的。

把/etc/inetd.conf文件下面这行:

telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd

修改为:

telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -h

在最后加“-h”可以使当有人登陆时只显示一个login:提示,而不显示系统欢迎信息。

3、历史命令

  Bash shell在“~/.bash_history”(“~/”表示用户目录)文件中保存了500条使用过的命令,这样可以使你输入使用过的长命令变得容易。每个在系统中拥有账号的用户在他的目录下都有一个“.bash_history”文件。

bash shell应该保存少量的命令,并且在每次用户注销时都把这些历史命令删除。

(1)“/etc/profile”文件中的“HISTFILESIZE”和“HISTSIZE”行确定所有用户的“.bash_history”文件中可以保存的旧命令条数。把“/etc/profile”文件中的“HISTFILESIZE”和“HISTSIZE”行的值设为一个较小的数。编辑profile文件(vi /etc/profile),把下面这行改为:

HISTFILESIZE=30 //设为30
HISTSIZE=30 //不要把HISTSIZE置零,那样就不能使用上下健来调用历史命令了
这表示每个用户的“.bash_history”文件只可以保存30条旧命令。

(2)在”/etc/skel/.bash_logout” 文件中添加下面这行”rm -f $HOME/.bash_history” 。这样,当用户每次注销时,“.bash_history”文件都会被删除。

三、口令和用户帐号管理

1、 密码

(1)修改密码长度:

[boot]#vi /etc/login.defs/–把 PASS_MIN_LEN 5 改为 PASS_MIN_LEN 8

(2)使用“/usr/sbin/authconfig”工具打开shadow功能,对password加密。如果你想把已有的密码和组转变为shadow格式,可以分别使用“pwcov,grpconv”命令。

(3)系统会自动注销root,#vi /etc/profile/–在”HISTFILESIZE=”后面加入:

  TMOUT=36003600,表示60*60=3600秒,也就是1小时。这样,如果系统中登陆的用户在一个小时内都没有动作,那么系统会自动注销这个账户。你可以在个别用户的“.bashrc”文件中添加该值,以便系统对该用户实行特殊的自动注销时间。 改变这项设置后,必须先注销用户,再用该用户登陆才能激活这个功能。

2、 关闭或删除所有不用的缺省用户和组账户

[root]# userdel username /–删除你系统上的用户
[root]# groupdel username /–删除你系统上的组用户帐号
[root]# useradd username /–增加用户帐号
[root]# passwd username/–改变用户口令
用户(adm,lp,sync,shutdown,halt,mail,news,uucp,operator,games,gopher,ftp等)
组(adm,lp,mail,news,uucp,games,slipusers,dip,ppusers,popusers等)

用chattr命令给下面的文件加上不可更改属性。
[root]# chattr +i /etc/passwd
[root]# chattr +i /etc/shadow
[root]# chattr +i /etc/group
[root]# chattr +i /etc/gshadow

3、 限制用户权限

  (1)取消普通用户的控制台访问权限,比如shutdown、reboot、halt等命令。
[root]# rm -f /etc/security/console.apps/ /–是你要注销的程序名。

  (2)不允许从不同的控制台进行root登陆
编辑”/etc/securetty”文件,再不需要登陆的TTY设备前添加“#”标志,来禁止从该TTY设备进行root登陆。

  (3)禁止任何人通过su命令改变为root用户
su(Substitute User替代用户)命令允许你成为系统中其他已存在的用户。
[boot]#vi /etc/pam.d/su
########在开头添加下面两行:
auth sufficient /lib/security/pam_rootok.so debug
auth required /lib/security/Pam_wheel.so group=wheel
这表明只有”wheel”组的成员可以使用su命令成为root用户。你可以把用户添加到“wheel”组,以使它可以使用su命令成为root用户

4、禁止不使用的SUID/SGID程序

  如果一个程序被设置成了SUID root,那么普通用户就可以以root身份来运行这个程序。网管应尽可能的少使用SUID/SGID 程序,禁止所有不必要的SUID/SGID程序。

查找root-owned程序中使用s位的程序:
[root]# find / -type f \( -perm -04000 -o -perm -02000 \) \-exec ls -lg {} \;

用下面命令禁止选中的带有s位的程序:
[root]# chmod a-s [program]

四、关闭不必要的服务或端口

然后用“sighup”命令升级“inetd.conf”文件。 (我对这句不太明白,没试过的说)

(1)、[Root]# chmod 600 /etc/inetd.conf /–只允许root来读写该文件。
确定“/etc/inetd.conf”文件所有者为root。

(2)、#vi /etc/inetd.conf,取消不需要的服务如:ftp, telnet, shell, login, exec,talk, ntalk, imap, pop-2, pop-3, finger,auth,gophper,rsh,rlogin,rexec,ntalk等等。把不需要的服务关闭可以使系统的危险性降低很多。(要先确认不需要哪些服务,还有关联服务才能关闭,做任何事之前,要先试验过,并有记操作记录的习惯)

(3)、[root]# killall -HUP inetd /–给inetd进程发送一个信号关闭不需要的服务(这句话是不是这意思啊?)

(4)、[root]# chattr +i /etc/inetd.conf/–把inetd.conf文件设为不可修改
[root]# chattr -i /etc/inetd.conf /–取消不可修改

2、阻止你的系统响应任何从外部/内部来的ping请求。

既然没有人能ping通你的机器并收到响应,你可以大大增强你的站点的安全性。
你可以加下面的一行命令到/etc/rc.d/rc.local,以使每次启动后自动运行。
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

五、关键文件或目录权限

1、对于系统中的某些关键性文件如passwd、passwd.old、passwd._、shadow、shadown._、
inetd.conf、services和lilo.conf 等可修改其属性,防止意外修改和被普通用户查看。如将inetd 文件属性改为600 :
# chmod 600 /etc/inetd.conf
这样就保证文件的属主为root,然后还可以将其设置为不能改变:
# chattr +i /etc/inetd.conf
这样,对该文件的任何改变都将被禁止
# chattr -i /etc/inetd.conf
取消禁止更修属性

2、给”/etc/rc.d/init.d” 下的文件设置权限

给执行或关闭启动时执行的程序的所有目录设置许可权限
[root]# chmod -R 700 /etc/rc.d/init.d/*
这样便仅有root可以读、写或执行上述所有脚本文件。

六、安全设置

1、TCP_WRAPPERS
(1)#vi /etc/hosts.deny,加入
# Deny access to everyone.
ALL: ALL@ALL, PARANOID
这表明除非该地址在允许访问的主机列表中,否则阻塞所有的服务和地址。

(2)#vi /etc/hosts.allow,加入允许访问的主机列表,如:
ftp: 202.54.15.99 foo.com

(3)# tcpdchk /–检查你的tcp wrapper设置

2、防止ping

echo 1>/proc/sys/net/ipv4/icmp_echo_ignore_all

3、禁止提供finger 服务

  使用finger命令可以显示本地或远程系统中目前已登录用户的详细信息,黑客可以利用这些信息,增大侵入系统的机会。为了系统的安全,最好禁止提供finger服务。如下:
从/usr/bin下删除finger 命令;
如果要保留 finger服务,应将finger文件换名,或修改其权限,使得只允许root用户执行finger命令

4、NFS 服务器:

  由于NFS 服务器漏洞比较多,你一定要小心。

  如果要使用NFS 网络文件系统服务,那么确保你的/etc/exports具有最严格的存取权限设置,这意味着不要使用任何通配符,不允许root写权限并且只能安装为只读文件系统。编辑文件/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 是登录这个目录的机器名,ro意味着mount 成只读系统,root_squash 禁止root写入该目录。最后为了让上面的改变生效,运行exportfs命令
[boot]# /usr/sbin/exportfs -a

5、防止DoS攻击

  对系统所有的用户设置资源限制可以防止DoS类型攻击(denial of service attacks)。如最大进程数,内存数量等。 编辑/etc/security/limits.con加如下几行:
  * hard core 0
  * hard rss 5000
  * hard nproc 20
编辑/etc/pam.d/login文件检查这一行是否存在。

session required /lib/security/pam_limits.so
上面的命令禁止调试文件,限制进程数为50,且限制内存使用 为5MB。

5、安全补丁(一般情况下,新的软件包都修正原来的安全问题)
在http://www.redhat.com/corp/support/errata/ 可以找到补丁。

  在redhat6.1以后的版本带有一个工具up2date,它能够测定哪些rpm包需要升级,然后自动从redhat的站点下载首先检查是否安装:

rpm -q up2date
rpm -q rhn_register

然后注册:
up2date – -register

然后升级:
up2date (图形界面)
up2date – -nox (字符界面)

可以配置:
up2date – - configure
up2date – - nox – - configure
并完成安装。

七、必备的日志管理

  1、禁止一般权限的用户去查看日志文件。 #more /var/log/secure |grep refused

  2、 安装一个icmp/tcp日志管理程序,如iplogger,来观察那些可疑的多次的连接尝试(加icmpflood3或一些类似的情况)。完整的日志管理要包括网络数据的正确性、有效性、合法性。对日志文件的分析还可以预防入侵。例如、某一个用户几小时内的20次的注册失败记录,很可能是入侵者正在尝试该用户的口令。

如:记录每一个ftp连接日志,可以通过修改/etc/ftpaccess或者/etc/inetd.conf

如:修改inetd.conf的例子:

ftp  stream  tcp  nowait  root  /usr/sbin/tcpd  in.ftpd -l -L -i -o

-l 每一个ftp连接都写到syslog
-L 纪录用户的每一个命令
-i 文件received,纪录到xferlog
-o 文件transmitted,记录到xferlog

  总之,一个好的安全管理员是不应该忘了他的日志的。日志可以提供很多信息,不仅仅是安全信息,如错误,安装信息等,要学会从日志中得到的提示去查找和解决问题。当然,日志问题要考虑多方面,如果太详细的话,可能日记数量太庞大而且不方便查找。具体看需求了

八、其它

1、使用安全工具软件或防火墙保护系统:

2、防范网络嗅探:

  关闭不必要的服务和服口,尤其是PING。很多网络扫描工具都是使用PING来探测主机状态的,关掉PING后,会认为主机不可到达了。
现在的工具可能又升级了    

3、对正在进行的攻击
 
  终止正进行的攻击 假如你在检查日志文件时,发现了一个用户从你未知的主机登录,而且你确定此用户在这台主机上没有账号,此时你可能正被攻击。首先你要马上锁住此账号(在口令文件或shadow文件中,此用户的口令前加一个Ib或其他的字符)。

  查看此用户的历史记录,查看其他用户是否也被假冒,攻击音是否拥有根权限。杀掉此用户的所有进程并把此主机的ip地址掩码加到文件hosts.deny中