作者: STAR
首先声明一点,这里所说的安全设置都是建立在前面的基础上,也就是说这里的安全设置并不是通用的,如我并没有提供NFS服务,所以就不会对/etc/exports进行设置,如果安装了什么其他的服务,请自行解决相关安全问题
再说一下,我的习惯是注释而不删除,因为这样你能在以后知道你更改了什么,这是个好习惯吧
安全权限体制是基于密码的,一个用户的密码过于简单就能使别有用心者侵入你的系统,并不要以为他干不了什么,以xxxx信息港提供个人主页空间这台机为例,如果一个权限很小很小的工作帐号给破译,那就能用这个密码进入系统。就能拿到任何在这台主机上的htdocs目录和UsweDir(假定是按默认public_html目录)设定目录下的东东
也就是说/home/*/public_html/下的东东可以给别人拿走分析.....如PHP这类的是不给别人看源码的,辛辛苦苦写的东东不想给别人吧,呵呵
因如要通过Apache提供服务,就必须至少把所有放置网页的目录设权限设为701,也就是任何人都有可执行权限,一般的方法甚至设为755,这直接就能读了,根本不用分析URL,一句话说明这个问题,源代码是保护不了的!
对apache的根也是对个人主页存放目录也是,如是CGI,只有用C写的CGI才行
所以
一、我选择限定最小密码长度,当然是越长越好,呵呵,但我都不习惯用十位以上的密码,惯例是设为八位
打开/etc/login.defs
把PASS_MIN_LEN 5这行把5改为8 (还有许多有用的设置,具体看此文件上几行的说明)
二、root密码的重要性自不用提了
我的做法是首先限定root只许本地登录,只许在tty1登录,网上telnet的可以使用su转为root,再限定su转root的用户组,这的安全点就可以多步设卡,我是这样设的,设一个组(我选super组),只有里面的组员可以su root,其余的就是知道root密码也su不了,必须知道两个密码才能取得root权限(当然这是在不考虑缓冲区溢出和其他更改自身UID和GID的攻击法,这个后面有相应对策)
1.打开/etc/securetty,把除tty1外全部注释掉,这样就只有tty1能用root登录
2.打开/etc/pam.d/su,下面是我机上的文件,加入加☆那两行…. ☆可不是文件里的(#%PAM-1.0你不用理,vi时就明白了)
#%PAM-1.0
☆auth sufficient /lib/security/pam_rootok.so debug
☆auth required /lib/security/pam_wheel.so group=super
auth required /lib/security/pam_pwdb.so shadow nullok
account required /lib/security/pam_pwdb.so
password required /lib/security/pam_cracklib.so
password required /lib/security/pam_pwdb.so shadow use_authtok nullok
session required /lib/security/pam_pwdb.so
session optional /lib/security/pam_xauth.so
在这我用的是super这个组,你可以改的
我的super 组ID值是33(我故意设在中间的,不想给别人猜出的,呵呵)
然后usrmod ?G33 shadow
把我的登录的普通帐号shadow加入super,也只有shadwo才能su root了
(限定tty这个最好留到后面做,因为做服务器过程中,要安很多软件要安,要做很多设置,用普通用户再转root有点累,呵呵,真的,我这样是想写的有条理点,走形式主义了)
三、本地安全
这个非常重要,本想放在最前面说的,衡量了一下,站在全局观来说,这只是一个局部,所以放在这,但确用重要……我能用root进入同学任何一台linux,很大一部份原因在此
只有root才能改root密码,这是常识也有一个小小的盲区
还有二种方式改root密码,一是init 1 !二是用软盘起动!
到1模式就能更改任何人的密码,所以在这要设卡,起动时进入1默认设置不是需要认证的,如果一个本地普通用户登录后是不能使用init 1 等进入模式1的,所以只有在机器起动时无论起动哪项都要认证权限,通过lilo可以做到
首先在bios里设置不能通过软盘起动,bios也要设密码,再在/etc/lilo.conf里写上一行password=”密码”,这是明文的,所以确保万一
chown 0.0 /etc/lilo.conf 确保是root的
chmod 600 /etc/lilo.conf 除root外谁也不能看
lilo ?v
chattr +i /etc/lilo.conf 如果没有写错lilo,我想很久不会改这个文件,给它一个不可更改标志
这两个密码某种意义上和root 密码是一样重要的
四、把系统预置的帐号能不要的全删掉
反正大部份都用不到,删吧,如果提供匿名ftp,ftp这个不要删,放心删吧,反正是帐号越少越好
五、/etc/inetd.conf
打开它,把除ftp、telnet以外的全注释掉,其实这也不是最好的方法,但先用着吧
如按这几份贴的过程,你现在是没有提供ftp服务的,不用理安,要不按后面安wu-ftp-2.6.1时,又要来改这了,再telnet后加个-h,telnet时不显示登录系统信息
ls ?l /etc/inetd.conf 看看不是root的,如不是chown 0.0 /etc/inetd.conf
chmod 600 /etc/inetd.conf
六、尽量不外泄系统信息
除了上面那个telnet ?h外,再把/etc/rc.d/rc.local关于写/etc/issue、/etc/issue.net写入信息的语句注释掉,如果你没有向rc.local里写过东东,就把里面的东东全注释掉就行。
再删掉或替换掉/etc/issue.net,删掉了telnet时就只有一个“login:”了,换成欢迎词是个好办法,谁要?我收集了很多有性格的耶
七、/etc/rc.d/init.d/
chown ?R 0.0 /etc/rc.d/initd/
chmod ?R 700 /etc/rc.d/init.d/*
如果以后再加入新的script,也要确认所有者和700权限
八、更好的挂装文件系统
nosuid就是在这个分区里不能有suid和sgid
nodev 不充许有特殊块设备
noexec不充许有任何可执行的二进制文件
关于我的/chroot分区上的natime留到优化那篇说吧
这是我的/etc/fstab
/dev/hda11 / ext2 defaults 1 1
/dev/hda4 /back ext2 defaults 1 2
/dev/hda5 /boot ext2 defaults 1 2
/dev/hda8 /apacheroot ext2 defaults,nosuid,noatime 1 2
/dev/hda7 /home ext2 nosuid,nodev,noexec 1 2
/dev/hda10 /tmp ext2 nosuid,nodev,noexec 1 2
/dev/hda6 /usr ext2 defaults 1 2
/dev/hda9 /var ext2 defaults 1 2
none /proc proc defaults 0 0
none /dev/pts devpts gid=5,mode=620 0 0
/dev/hda1 swap swap defaults 0 0
九、find是好东东
找“.”开头的”特殊”目录和文件名(如果你想放东东在别人的机上,又不是别人知道,怎么做?) :find / -name .* -print ?xdev
找任何人都有写权限的文件和目录:
find / -type f \( -perm -2 -o -perm -020 \) -exec ls -lg {} \;
find / -type d\( -perm -2 -o -perm -020 \) -exec ls -ldg {} \;
找没有所有者的文件:find / -nouser ?o ?nogroup
找.rhosts :find /home -name .rhosts
找s位: find / -type f \( -perm -04000 -o -perm -02000 \) \-exec ls -lg {} \;
把找出的一些带S的用chmod a-s去掉S
我去掉的有/usr/bin/下的有chage、gpasswd、wall、chfn、chsh、newgrp、write
/usr/sbin/的有usernetctl、traceroute
/bin/的有mount、umount和/sbin/netreport
你最好像我一样导出一个记录,不然你都不知改了什么,有些程序是需要s位的,如passwd
要用的话,把上面的拷到一个文件里,然后chmod 755就行了(任意帐号都可执行的),再要求高点,做成cron定时任务吧,如果有空,我贴一个上来,唉,下星期考试...
十、/etc/aliases
这个只看过介绍,接触不多----没地方用嘛----但还是解决掉这个隐患才好
因为文件有点长,所以我不贴上来了,除这几行外全部注释
MAILER-DAEMON: postmaster
postmaster: root
bin: root
daemon: root
nobody: root
十一、如果你是多用户系统,有家伙滥用系统资源以这种方式D.o.S,请修改/etc/secrity/limits.conf
因为我的机器能淡的飞出鸟来,硬件也太差了点这步我没有做,我是想到有这种可能所以找到这种方法,呵呵,打开文件
soft core 0 (意为禁止生成core文件)
hard rss 10000 (每用户最大可用10M内存)
hard nproc 20 (20个进程)
可根据需要修改,如修改了还要修改/etc/pam.d/security/pam_limits.so
把session required /lib/security/pam_limits.so加到文件的末尾
最后一步:再集中检查一次一些文件的所有者和权限,备份数据。