|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
将网络上众多关于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=<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=3600 3600,表示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/<servicename> /--<servicename>是你要注销的程序名。 (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,来观察那些可疑的多次的连接尝试(加icmp flood3或一些类似的情况)。完整的日志治理要包括网络数据的准确性、有效性、合法性。对日志文件的分析还可以防备入侵。例如、某一个用户几小时内的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中 返回类别: 教程 上一教程: LINUX 常用命令(磁盘治理) 下一教程: LINUX简明系统维护手册(一) 您可以阅读与"如何实现LINUX安全"相关的教程: · 如何实现文字的自动换行? · 如何实现ADSL宽带多机共享 · 在LINUX操作系统中如何截获系统调用 · LINUX 系统安全必要保护措施实例 · LINUX服务器安全小技巧 |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |