linux主机安全加固方案.docx
《linux主机安全加固方案.docx》由会员分享,可在线阅读,更多相关《linux主机安全加固方案.docx(17页珍藏版)》请在冰豆网上搜索。
linux主机安全加固方案
1.安装最新安全补丁
项目:
注释:
1
安装操作系统提供商发布的最新的安全补丁
各常见的Linux发布安全信息的web地址:
RedHatLinux:
CalderaOpenLinux:
ConectivaLinux:
.br/atualizacoes/
DebianGNU/Linux:
http:
//www.debian.org/security/
MandrakeLinux:
http:
//www.linux-
LinuxPPC:
S.u.S.E.:
http:
//www.suse.de/security/index.html
YellowDogLinux:
2.网络和系统服务
inetd/xinetd网络服务:
设置项
注释:
1
确保只有确实需要的服务在运行:
先把所有通过ineted/xineted运行的网络服务关闭,再打开确实需要的服务
绝大多数通过inetd/xinetd运行的网络服务都可以被禁止,比如echo,exec,login,shell,who,finger等.对于telnet,r系列服务,ftp等,强烈建议使用SSH来代替.
2
设置xinetd访问控制
在/etc/xinetd.conf文件的”default{}”块中加入如下行:
only_from=//…
每个/(比如192.168.1.0/24)对表示允许的源地址
启动服务:
设置项
注释:
1
关闭NFS服务器进程:
运行chkconfignfsoff
NFS通常存在漏洞会导致未授权的文件和系统访问.
2
关闭NFS客户端进程:
运行chkconfignfslockoff
chkconfigautofsoff
3
关闭NIS客户端进程:
chkconfigypbindoff
NIS系统在设计时就存在安全隐患
4
关闭NIS服务器进程:
运行chkconfigypservoff
chkconfigyppasswdoff
5
关闭其它基于RPC的服务:
运行chkconfigportmapoff
基于RPC的服务通常非常脆弱或者缺少安全的认证,但是还可能共享敏感信息.除非确实必需,否则应该完全禁止基于RPC的服务.
6
关闭SMB服务
运行chkconfigsmboff
除非确实需要和Windows系统共享文件,否则应该禁止该服务.
7
禁止Netfs脚本
chkconfignetfsoff
如果不需要文件共享可禁止该脚本
8
关闭打印机守护进程
chkconfiglpdoff
如果用户从来不通过该机器打印文件则应该禁止该服务.Unix的打印服务有糟糕的安全记录.
9
关闭启动时运行的XServer
sed's/id:
5:
initdefault:
/id:
3:
initdefault:
/'\
/etc/inittab.new
mv/etc/inittab.new/etc/inittab
chownroot:
root/etc/inittab
chmod0600/etc/inittab
对于专门的服务器没有理由要运行XServer,比如专门的Web服务器
10
关闭MailServer
chkconfigpostfixoff
多数Unix/Linux系统运行Sendmail作为邮件服务器,而该软件历史上出现过较多安全漏洞,如无必要,禁止该服务
11
关闭WebServer
chkconfighttpdoff
可能的话,禁止该服务.
12
关闭SNMP
chkconfigsnmpdoff
如果必需运行SNMP的话,应该更改缺省的communitystring
13
关闭DNSServer
chkconfignamedoff
可能的话,禁止该服务
14
关闭DatabaseServer
chkconfigpostgresqloff
Linux下常见的数据库服务器有Mysql,Postgre,Oracle等,没有必要的话,应该禁止这些服务
15
关闭路由守护进程
chkconfigroutedoff
chkconfiggatedoff
组织里仅有极少数的机器才需要作为路由器来运行.大多数机器都使用简单的”静态路由”,并且它不需要运行特殊的守护进程
16
关闭Webmin远程管理工具
chkconfigwebminoff
Webmin是一个远程管理工具,它有糟糕的认证和会话管理历史,所以应该谨慎使用
17
关闭SquidWebCache
chkconfigsquidoff
如果必需使用,应该谨慎配置
18
可能的话禁止inetd/xinetd
chkconfiginetdoff或
chkconfigxinetdoff
如果没有网络服务通过inetd/xinetd运行则可以禁止它们
19
设置守护进程掩码
cd/etc/rc.d/init.d
if["`grep-lumaskfunctions`"=""];then
echo"umask022">>functions
fi
系统缺省的umask值应该设定为022以避免守护进程创建所有用户可写的文件
3.核心调整
设置项
注释:
1
禁止coredump:
cat<>/etc/security/limits.conf
*softcore0
*hardcore0
END_ENTRIES
允许coredump会耗费大量的磁盘空间.
2
限制NFS客户端使用特权端口:
perl-i.orig-pe\
'nextif(/^\s*#/||/^\s*$/);
($res,@hst)=split("");
foreach$ent(@hst){
undef(%set);
($optlist)=$ent=~/\((.*?
)\)/;
foreach$opt(split(/,/,$optlist)){
$set{$opt}=1;
}
delete($set{"insecure"});
$set{"secure"}=1;
$ent=~s/\(.*?
\)//;
$ent.="(".join(",",keys(%set)).")";
}
$hst[0]="(secure)"unless(@hst);
$_="$res\t".join("",@hst)."\n";'\
/etc/exports
可以防止非特权用户发起的automoutedNFS攻击.
3
网络参数调整:
cat<>/etc/sysctl.conf
net.ipv4.ip_forward=0
net.ipv4.conf.all.accept_source_route=0
net.ipv4.tcp_max_syn_backlog=4096
net.ipv4.conf.all.rp_filter=1
END_SCRIPT
cat<>/etc/sysctl.conf
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.default.accept_redirects=0
END_SCRIPT
chownroot:
root/etc/sysctl.conf
chmod0600/etc/sysctl.conf
详见:
或
4.日志系统
设置项
注释:
1
捕捉发送给AUTH和AUTHPRIVfacility的消息到日志文件/var/log/secure:
if[`grep-c'auth\.'/etc/syslog.conf`-eq0]
then
echo-e"auth.*\t\t\t\t/var/log/secure"\
>>/etc/syslog.conf
fi
if[`grep-c'authpriv\.'/etc/syslog.conf`eq0]
then
echo-e"authpriv.*\t\t\t\t/var/log/secure"\
>>/etc/syslog.conf
fi
touch/var/log/secure
chownroot:
root/var/log/secure
chmod600/var/log/secure
.syslog中的AUTH和AUTHPRIVfacility包含了大量安全相关的信息,不是所有Linux发布都记录这些日志信息.应该把这些信息记录到/var/log/secure文件中(该文件仅超级用户可读)
5.文件/目录访问许可权限
设置项
注释:
1
对/etc/fstab中的可移动介质增加”nosuid”选项:
awk'($2~/^\/m.*\/(floppy|cdrom)$/&&\
$3!
="supermount")\
{$4=sprintf("%s,nosuid",$4)};\
{print}'/etc/fstab>/etc/fstab.new
mv/etc/fstab.new/etc/fstab
chownroot:
root/etc/fstab
chmod0644/etc/fstab
可以移动介质是引入恶意代码的一个重要途径.该设置可以防止普通用户通过CDROM或软盘引入SUID程序
2
禁止普通用户来mount可移动文件系统:
cd/etc/security
egrep-v'(floppy|cdrom)'console.perms\
>console.perms.new
mvconsole.perms.newconsole.perms
grep-vsupermount/etc/fstab>/etc/fstab.new
mv/etc/fstab.new/etc/fstab
chownroot:
rootconsole.perms/etc/fstab
chmod0600console.perms
chmod0644/etc/fstab
在基于Linux的发布中普通用户在控制台上有更大的权限,可以使用CD-ROM和软盘驱动器.甚至在一些发布,比如MandrakeLinux上当在机器上插入软盘或光碟时系统会通过supermount来自动mount这些驱动器.
3
对passwd,shadow,和group文件设置正确的许可权限:
cd/etc
chownroot:
rootpasswdshadowgroup
chmod644passwdgroup
chmod400shadow
这些文件的属主和组应该为root,passwd和group文件的许可权限应该为644,shadow文件的许可权限应该为400
4
对临时目录设置粘着位:
chmod+t/tmp
find/var-typed-perm-0222-xdev-execchmod+t{}\;
临时目录不设置粘着位会导致普通用户可以任意删除其它用户建立的临时文件
5
查找未认证的SUID/SGID可程序:
forpartin\
`awk'($3=="ext2"||$3==“ext3”)\
{print$2}'/etc/fstab`
do
find$part\(-perm-04000-o-perm-02000\)\
-typef-xdev-print
done
6.系统访问,认证和授权
设置项
注释:
1
在PAM配置文件中删除.rhosts支持:
forfilein`echo/etc/pam.d/*`;do
grep-vrhosts_auth$file>${file}.new
mv${file}.new$file
chownroot:
root$file
chmod644$file
done
禁止.rhost支持有助于防止用户搞乱系统正常的访问控制机制
2
删除/etc/hosts.equiv文件:
rm/etc/hosts.equiv
/etc/hosts.equiv文件为系统上的所有用户设置全局信任关系,于.rhost的作用类似.
3
校验/etc/ftpusers文件的内容,确认root和系统用户存在在该文件中
/etc/ftpusers文件列出了所有禁止使用ftp的用户的名单,通常root和系统用户都应该禁止使用ftp
4
限制at/cron给授权的用户:
cd/etc/
rm-fcron.denyat.deny
echoroot>cron.allow
echoroot>at.allow
chownroot:
rootcron.allowat.allow
chmod400cron.allowat.allow
Cron.allow和at.allow文件列出了允许允许crontab和at命令的用户名单,在多数系统上通常只有系统管理员才需要运行这些命令
5
Crontab文件限制访问权限:
chownroot:
root/etc/crontab
chmod400/etc/crontab
chown-Rroot:
root/var/spool/cron
chmod-Rgo-rwx/var/spool/cron
chown-Rroot:
root/etc/cron.*
chmod-Rgo-rwx/etc/cron.*
系统的crontab文件应该只能被cron守护进程(它以超级用户身份运行)来访问,一个普通用户可以修改crontab文件会导致他可以以超级用户身份执行任意程序
6
建立恰当的警告banner:
echo"Authorizedusesonly.Allactivitymaybe\
monitoredandreported.">>/etc/motd
chownroot:
root/etc/motd
chmod644/etc/motd
cat<>/etc/rc.d/rc.local
echo"Authorizedusesonly.Allactivitymaybe\
monitoredandreported.">>/etc/issue
echo"Authorizedusesonly.Allactivitymaybe\
monitoredandreported.">>/etc/
END
改变登录banner可以隐藏操作系统类型和版本号和其它系统信息,这些信息可以会对攻击者有用.
7
限制root登录到系统控制台:
cat</etc/securetty
tty1
tty2
tty3
tty4
tty5
tty6
END_FILE
chownroot:
root/etc/securetty
chmod400/etc/securetty
通常应该以普通用户身份访问系统,然后通过其它授权机制(比如su命令和sudo)来获得更高权限,这样做至少可以对登录事件进行跟踪
8
设置LILO/GRUB口令:
在/etc/lilo.conf文件的开头加入如下行:
restricted
password=
以root身份执行如下命令:
chownroot:
root/etc/lilo.conf
chmod600/etc/lilo.conf
lilo
对于GRUB:
加入本行到/etc/grub.conf:
password
以root身份执行如下命令:
chownroot:
root/etc/grub.conf
chmod600/etc/grub.conf
可以有助于防止基于控制台的物理攻击
7.用户账号和环境
设置项
注释:
1
清除或锁定系统账号:
foruserinuucpoperator
do
/usr/sbin/userdel$user
done
foruserinadmaliasapacheaxfrdnsbindaemondhcpd\
dnscachednslogftpgamesgdmgopherhalthtdigident\
lpmailmailnullnamednewsnobodynscdpostfix\
postgresqmaildqmaillqmailpqmailqqmailrqmails\
rpcrpcusersquidsympasynctinydnsxfs
do
/usr/sbin/usermod-L-s/dev/null$user
done
Uucp和operator账号通常是不需要的,可以把它们从passwd和shadow文件中删除,其它账号视具体情况而定.要锁定一个账号,可以把该账号的shell改为一个无效的shell,比如/dev/null
验证没有遗留下来的’+’条目存在于passwd,shadow,group文件中:
grep^+:
/etc/passwd/etc/shadow/etc/group
这些条目可能会给攻击者提供一个途径来取得系统的访问权限,如果存在的化应该删除
2
验证是否有账号存在空口令的情况:
awk-F:
'($2==""){print$1}'/etc/shadow
所有账号应该有一个强口令或者使用类似”NP”或”*LOCKED*”的口令字串来锁定账号
3
检查除了root以外是否还有其它账号的UID为0:
awk-F:
'($3==0){print$1}'/etc/passwd
任何UID为0的账号在系统上都具有超级用户权限.
4
检查root用户的$PATH中是否有’.’或者所有用户/组用户可写的目录
超级用户的$PATH设置中如果存在这些目录可能会导致超级用户误执行一个特洛伊木马
5
删除属于root用户的具有潜在危险的文件:
rm-f/.[rs]hosts/.netrc/root/.[rs]hosts/root/.netrc
/.rhost,/.netrc或/root/.rhost,/root/.netrc文件都具有潜在的危险
6
用户的home目录许可权限是否为755或更严格的限制:
fordirin\
`awk-F:
'($3>=500){print$6}'/etc/passwd`
do
chmodgo-w$dir
done
用户home目录的许可权限限制不严可能会导致恶意用户读/修改/删除其它用户的数据或取得其它用户的系统权限
7
是否有用户的点文件是所有用户可读的:
fordirin\
`awk-F:
'($3>=500){print$6}'/etc/passwd`
do
forfilein$dir/.[A-Za-z0-9]*
do
if[-f$file];then
chmodo-w$file
fi
done
done
Unix/Linux下通常以”.”开头的文件是用户的配置文件,如果存在所有用户可读/写的配置文件可能会使恶意用户能读/写其它用户的数据或取得其它用户的系统权限
8
删除用户的.netrc文件:
fordirin`cut-f6-d:
/etc/passwd`
do
rm-f$dir/.netrc
done
.netrc文件中可能会包含未加密的口令
9
为用户设置合适的缺省umask值:
cd/etc
forfileinprofilecsh.logincsh.cshrcbashrc
do
if[`grep-cumask$file`-eq0];
then
echo"umask022">>$file
fi
chownroot:
root$file
chmod444$file
done
为用户设置缺省的umask值有助于防止用户建立所有用户可写的文件而危及用户的数据.
8.关键安全工具的安装
设置项
注释:
1
安装SSH
SSH是一个使用加密连接的安全的远程管理/数据传输协议.它可以用来替代telnet,r命令,ftp等传统的不安全的协议/命令.SSH的最新实现软件可以在ftp:
//下载
2
安装NTP
NTP(网络时间协议)用于使网络上的多个系统间的时间同步,精确的系统时间有利于保证系统日志的准确性.