***注意:在系统刚安装完成时立即对Grub加密,防止他人通过进入单用户模式获得root权限!!!
1.Bios 安全设置
一定要给Bios设置密码,以防通过在Bios中改变启动顺序,而可以从软盘启动。
这样可以阻止别人试图用特殊的启动盘启动你的系统,还可以阻止别人进入Bios改动其中的设置(比如允许通过软盘启动等)。
2.删除掉不需要的用户和用户组
应该禁止所有默认的被操作系统本身启动的并且不必要的账号,当您第一次安装系统时就应该这么做,Linux提供了很多默认账号,而账号越多,系统就越容易受到攻击。
vi /etc/passwd
#userdel adm
#userdel lp
#userdel sync
#userdel shutdown
#userdel halt
#userdel news
#userdel uucp
#userdel operator
#userdel games
#userdel gopher
#userdel ftp
vi /etc/group
#groupdel adm
#groupdel lp
#groupdel news
#groupdel uucp
#groupdel games
#groupdel dip
#groupdel pppusers
3.口令文件
chattr命令给下面的文件加上不可更改属性,从而防止非授权用户获得权限。
# chattr +i /etc/passwd
# chattr +i /etc/shadow
# chattr +i /etc/group
# chattr +i /etc/gshadow
4.禁止Ctrl Alt Delete重新启动机器命令
修改/etc/inittab文件,将”ca::ctrlaltdel:/sbin/shutdown -t3 -r now”一行注释掉。5.限制su命令
如果您不想任何人能够su作为root,可以编辑/etc/pam.d/su文件,增加如下两行:
auth sufficient /lib/security/pam_rootok.so debug
auth required /lib/security/pam_wheel.so group=isd
这时,仅isd组的用户可以su作为root。此后,如果您希望用户admin能够su作为root,可以运行如下命令:
# usermod -G10 admin
6.删除finger程序,具体方法如下
#rpm –e finger
7.删减登录信息
默认情况下,登录提示信息包括Linux发行版、内核版本名和服务器主机名等。对于一台安全性要求较高的机器来说这样泄漏了过多的信息。可以编辑/etc/rc.d/rc.local将输出系统信息的如下行注释掉。
然后,进行如下操作:
# rm -f /etc/issue
# rm -f /etc/issue.net
# touch /etc/issue
# touch /etc/issue.net
8、更改SSH端口
最好改为10000以上,别人扫描到端口的机率也会下降
不允许使用低版本的SSH协议
vi /etc/ssh/ssd_config
将#protocol 2,1改为
protocol 2
将PORT改为1000以上端口
vi /etc/ssh/sshd_config
Port 10000
同时,创建一个普通登录用户,并取消直接root登录
useradd 'username'
passwd 'username'
vi /etc/ssh/sshd_config
PermitRootLogin no #取消root直接远程登录
9、关闭那些不需要的服务
记住少开一个服务,就少一个危险。
以下仅列出需要启动的服务,未列出的服务一律关闭:
#setup
acpid
anacron
cpuspeed
crond
irqbalance //仅当服务器CPU为S.M.P架构或支持双核心、HT技术时,才需开启,否则关闭。
microcode_ctl
network
random
sendmail
sshd
syslog
yum-updatesd
10、启用iptables 防火墙,对增加系统安全有许多好处。
设置好防火墙的规则。
vi /etc/sysconf/iptables
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
# allow local loopback connections
-A INPUT -i lo -j ACCEPT
# drop INVALID connections
-A INPUT -m state --state INVALID -j DROP
-A OUTPUT -m state --state INVALID -j DROP
-A FORWARD -m state --state INVALID -j DROP
# allow all established and related
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# add anymore rules here
COMMIT
11.系统安全记录文件
操作系统内部的记录文件是检测是否有网络入侵的重要线索。如果您的系统是直接连到Internet,您发现有很多人对您的系统做Telnet/FTP登录尝试,可以运行”#more /var/log/secure | grep refused”来检查系统所受到的攻击,以便采取相应的对策,如使用SSH来替换Telnet/rlogin等。
12.创建所有重要的日志文件的硬拷贝
如果服务器比较重要,可以考虑把ssh,mail,引导信息等打印出来.在/etc/syslog.conf文件中加入一行.:
Authpriv.*;mail.*;local7.*;auth.*;daemon.info /dev/lp0
执行/etc/rc.d/init.d/syslog restart
或者把日志发送到其它服务器保存
如
authpriv.* /var/log/secure
要把它发送到192.168.0.2,就可以这样修改
authpriv.* @192.168.0.2 /var/log/secure
13。改变/etc/rc.d/init.d目录下的脚本文件的访问许可
# chmod -R 700 /etc/rc.d/init.d/*
这样便仅有root可以读、写或执行上述所有脚本文件。
注意:慎重修改此安全设置
14.inetd.conf或xinetd.conf
如果是inetd.conf建议注释掉所有的r开头的程序,exec等
7,TCP_Wrappers
在/etc/hosts.allow中加入允许的服务,在/etc/hosts.deny里加入这么一行ALL:ALL
15./etc/aliases文件
Aliases文件如果管理错误或管理粗心就会造成安全隐患.把定义”decode”这个别名的行从aliases文件中删除.
编辑aliases,删除或注释下面这些行:
#games: root
#ingres: root
#system: root
#toor: root
#uucp: root
#manager: root
#dumper: root
#operator: root
#decode: root
运行/usr/bin/nesaliases重新加载.
16.防止sendmail被没有授权的用户滥用
编辑sendmail.cf
把PrivacyOptions=authwarnings
改为PrivacyOptions=authwarnings,noexpn,novrfy
17.不响应ping
#echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
18.使TCP SYN Cookie保护生效
Echo 1 > /proc/sys/net/ipv4/tcp_syncookies
19.带S位的程序
可以清除s位的程序包括但不限于:
从来不用的程序;
不希望非root用户运行的程序;
偶尔用用,但是不介意先用su命令变为root后再运行.
find / -type f /( -perm 04000 –o –perm -02000 /) -print
chmod a-s 程序名
20.帐号安全设置
修改/etc/login.def文件
PASS_MAX_DAYS 120 设置密码过期日期
PASS_MIN_DAYS 0 设置密码最少更改日期
PASS_MIN_LEN 10 设置密码最小长度
PASS_WARN_AGE 7 设置过期提前警告天数
确保/etc/shadow为root只读
确保/etc/passwd为root读写
定期用密码工具检测用户密码强度
21. /etc/exports
如果通过NFS把文件共享出来,那么一定要配置”/etc/exports”文件,使得访问限制尽可能的严格.这就是说,不要使用通配符,不允许对根目录有写权限,而且尽可能的只给读权限.在/etc/exports文件加入:
/dir/to/export host1.mydomain.com(ro,root_squash)
/dir/to/export host2.mydomain.com(ro,root_squash)
建议最好不要使用NFS.
22.登录终端设置
/etc/securetty文件指定了允许root登录的tty设备,由/bin/login程序读取,其格式是一个被允许的名字列表,您可以
编辑/etc/securetty且注释掉如下的行。
tty1
# tty2
# tty3
# tty4
# tty5
# tty6
这时,root仅可在tty1终端登录。
23.防止IP欺骗
编辑host.conf文件并增加如下几行来防止IP欺骗攻击。
order bind,hosts
multi off
nospoof on
24.Inetd设置
首先要确认/etc/inetd.conf的所有者是root,且文件权限设置为600。设置完成后,可以使用”stat”命令进行检查。
# chmod 600 /etc/inetd.conf
然后,编辑/etc/inetd.conf禁止以下服务。
ftp telnet shell login exec talk ntalk imap pop-2 pop-3 finger auth
如果您安装了ssh/scp,也可以禁止掉Telnet/FTP。为了使改变生效,运行如下命令:
#killall -HUP inetd
默认情况下,多数Linux系统允许所有的请求,而用TCP_WRAPPERS增强系统安全性是举手之劳,您可以修
改/etc/hosts.deny和/etc/hosts.allow来增加访问限制。例如,将/etc/hosts.deny设为”ALL: ALL”可以默认拒绝所有访问
。然后在/etc/hosts.allow文件中添加允许的访问。例如,”sshd: 192.168.1.10/255.255.255.0 gate.openarch.com”表示
允许IP地址192.168.1.10和主机名gate.openarch.com允许通过SSH连接。
配置完成后,可以用tcpdchk检查:
# tcpdchk
tcpchk是TCP_Wrapper配置检查工具,它检查您的tcp wrapper配置并报告所有发现的潜在/存在的问题。
25.防止DoS攻击
对系统所有的用户设置资源限制可以防止DoS类型攻击。如最大进程数和内存使用数量等。例如,可以
在/etc/security/limits.conf中添加如下几行:
* hard core 0
* hard rss 5000
* hard nproc 20
然后必须编辑/etc/pam.d/login文件检查下面一行是否存在。
session required /lib/security/pam_limits.so
上面的命令禁止调试文件,限制进程数为50并且限制内存使用为5MB。
26.内核参数调整
#vi /etc/sysctl.conf
sysctl -w net.ipv4.conf.default.accept_source_route=0
sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1
#sysctl -w net.ipv4.icmp_echo_ignore_all=1
sysctl -w net.ipv4.icmp_ignore_bogus_error_responses=1
sysctl -w net.ipv4.ip_conntrack_max=65535
sysctl -w net.ipv4.tcp_syncookies=1
sysctl -w net.ipv4.tcp_syn_retries=1
sysctl -w net.ipv4.tcp_fin_timeout=5
sysctl -w net.ipv4.tcp_synack_retries=1
sysctl -w net.ipv4.tcp_syncookies=1
sysctl -w net.ipv4.route.gc_timeout=100
sysctl -w net.ipv4.tcp_keepalive_time=500
sysctl -w net.ipv4.tcp_max_syn_backlog=10000
27.查看系统隐藏文件
find / -name “.*” –print
28.查找系统中没有主人的文件
find / -nouser –o –nogroup
29.查找.rhosts文件
find /home -name “.rhosts”
如果有,请删除它.
30.收回系统编译器的权限或删除
如: chmod 700 /usr/bin/gcc
31.查找任何人都有写权限的文件和目录
find / -type f /( -perm -2 -o perm -20 /) ls
find / -type f /( -perm -2 –o –perm -20 /) ls
32.关闭FTP匿名用户登陆
33.icmp包处理
1)用防火墙禁止(或丢弃) icmp 包
iptables -A INPUT -p icmp -j DROP
2)对所有用ICMP通讯的包不予响应
比如PING TRACERT
34.Bash Shell 命令
Bash shell在“~/.bash_history”(“~/”表示用户目录)文件中保存了500条使用过的命令,这样可以使你输入使用过的长命令变得容易。每个在系统中拥有账号的用户在他的目录下都有一个“.bash_history”文件。bash shell应该保存少量的命令,并且在每次用户注销时都把这些历史命令删除。
经过以上的设置,您的Linux服务器已经可以对绝大多数已知的安全问题和网络攻击具有免疫能力,但一名优秀的系统管理员仍然要时刻注意网络安全动态,随时对已经暴露出的和潜在安全漏洞进行修补。