1、 启动和登录安全性
设置BIOS密码且修改引导次序禁止从软盘启动系统
禁止CTRL+Alt+Delete重新启动机器:修改/etc/inittab文件,将”ca::ctrlaltdel:/sbin/shutdown –t3 –r now”一行注释,命令 /sbin/init q使这项改动起作用。然后重新设置/etc/rc.d/init.d目录下所有文件的许可权限,运行 chmod –R 700 /etc/rc.d/init.d
删减登录信息:默认情况下登录提示信息会包括linux发行版本,内核版本名和服务器主机名等,可以通过编辑/etc/rc.d/rc.local将输出系统信息的命令行注释:
#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
然后删除
rm /etc/issue
rm /etc/issue.net
touch /etc/issue
touch /etc/issue.net
登录终端设置 /etc/securetty文件指定了允许root登录的tty设备,有/bin/login程序读取,其格式是一个被允许的名字列表,通过编辑/etc/securetty注释掉不需要的终端。
取消普通用户的控制台访问权限,如shutdown,reboot,halt等命令,/etc/security/console.apps/
2、 账户安全
禁止所有默认的被操作系统本身启用的并且不必要的账号,Linux提供了很多默认账号,账号越多,系统遭受攻击的可能性越大。使用userdel useName删除用户,使用groupdel groupName删除用户组。Mail,users用户需要
useradd -c "normal user" -d /home/userid -g users -G webadm,helpdesk –s /bin/bash userid
(
一行写不下时使用
/
标记换行
)
这个命令创建了一个名为
“userid”
(命令的最后一个参数)的新用户。
“normal user”
是对这个用户的注释。
userid
的主目录将是
“/home/userid”
。
userid
的主组将是
users
,但他也被加入到
“webadm”
和
“helpdesk”
这两个组。
userid
将使用
“/bin/bash”shell
作为他的常规控制台环境。
可以从控制台使用
userdel
命令来删除用户。
userdel -r userid
使用可选的
-r
开关可以将用户的主目录及所有相关信息全部删除。如果想要保留用户主目录,那么不要使用
-r
开关。这个开关不会自动删除系统中所有属于这个用户的文件,只是删除他的主目录。
可以使用
gpasswd
命令向组中添加成员,要使用
-a
开关,后面跟要添加的用户名:
gpasswd -a userid mygroup
删除组的成员还是使用这个命令,不过使用的开关是
-d
而不是
-a
:
gpasswd -d userid mygroup
也可以通过直接编辑
/etc/group
文件来对组进行修改。
用户登录,如果离开系统忘记注销root账户,系统会自动注销,通过修改账户中TMOUT参数,可以实现此功能,按秒计算。编辑profile文件 /etc/profile,在HISTFILESIZE=后面加入折行TMOUT=3600,表示一个小时,如果系统中登录的用户在一个小时内没有动作,那么系统会自动注销这个账户,也可以在个别用户的.bashrc文件中添加该值。
使用强壮的密码,使用普通用户登录,用su取得root权限,而不能以root身份登录
解决方案:
修改/etc/login.defs文件,
PASS_MAX_DAYS 60 #每两个月修改一次密码
PASS_MIN_DAYS 0 #本次密码修改后,下次允许修改密码之前所需最少天数
PASS_WARN_AGE 7 #在口令失效之前多少天开始通知用户更改密码
PASS_MIN_LEN 8 #密码最小长度
修改/etc/default/useradd文件
INACTIVE=14
EXPIRE=
指明在口令失效多少天时间内,如果口令没有进行更改,则将账户更改为失效状态
EXPIRE设置为所有新用户设定一个密码失效的明确时间 年份-月份-日期
以上所有这些针对新建立的用户,更改已有用户的设置通过以下命令
chage –M 60 userName ->pass_max_dyas
chage –m 0 userName ->pass_min_days
chage –l username 列出当前用户的时效情况
chage –W 7 userName -> pass_warn_age
注意:
login.defs对root用户,如果etc/shadow中有相同的选项,以shadow中的设置为准
使用chattr命令给口令文件加上不可更改属性,从而防止非授权用户获得权限
chattr +i /etc/passwd
chattr +i /etc/shadow
chattr +i /etc/group
chattr +i /etc/gshadow
这几个文件必须对其他用户可读,否则用户登录时会提示找不到用户名之类的问题。
如果不允许任何人都能够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,如果希望用户user1能够su为root,可以将user1加入到isd组。运行如下命令:
Usermod –G10 user1
打开密码的shadow支持功能,使用/usr/sbin/authconfig工具打开shadow功能,如果要把已有的密码和租转变成shadow格式,可分别使用pwcow,grpconv命令
历史命令:/etc/profile文件中histfilesize 和histsize行确定所有用户的.bash_history文件中可以保存的旧命令条数,应设为一个较小的值
在/etc/skel/.bash_logout文件添加如下命令rm –f $HOME/.bash_history,当用户注销时,会删除。
3、 文件安全
修改部分执行文件的权限
chmod 744 /bin/mount /bin/umount /bin/login /bin/ping /usr/bin/chfn /usr/bin/chsh /usr/bin/newgrp /usr/bin/crontab
mv /usr/bin/rlogin /usr/bin/rloginbak
mv /usr/bin/rsh /usr/bin/rshbak
mv /usr/bin/at /usr/bin/atbak
4、 网络访问
1)
Inet设置
确认/etc/inetd.conf的所有者是root,文件权限为600,使用stat命令检查。
编辑/etc/inetd.conf禁止以下服务:
ftp telnet shell login exec talk ntalk imap pop-2 pop-3 finger auth
如果安装了ssh/scp ,也可以禁止掉telnet/ftp,通过以下命令使改变生效:
Killall –HUP inetd
使用tcp_wrappers增强系统安全性很简单,通过修改/etc/host.deny和/etc/host.allow来增加访问控制,将/etc/host.deny设为ALL:ALL可以拒绝所有访问,然后在/etc/hosts.allow文件中添加允许的访问,如”sshd:192.168.1.1
www.sina.com”表示允许IP地址为192.168.1.1和主机名为
www.sina.com通过ssh连接
配置后,使用tcpdchk检查,
避免显示信息和版本,改变/etc/inetd.conf文件,telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd –h加-h表示telnet不显示系统信息,而仅仅显示login
配置FTP,禁止与发出PORT命令之外的客户端链接
修改/proc/sys/net/ipv4/ip_default_ttl设置从本机发出的ip包的生存时间,参数值为整数,范围为0-128,缺省值为64,如果经常得到time to live exceeded的icmp回应,可以适当增大该参数值,也不能过大,因为如果系统存在环路的话,会增加系统报错的时间。
修改/proc/sys/net/ipv4/tcp_fin_timeout在一个tcp会话中,在会话结束时,A首先向B发送一个fin包,在获得B的ack确认包后,A就进入Fin Wait2状态等待B的fin包然后给B发ack确认包,这个参数就是用来设置A进入Fin Wait2状态等待对方fin包的超时时间,如果时间到了仍未收到对方的fin包就主动释放该会话,参数值为整数秒
5、 日志安全
通过检查日志查看系统受到的攻击,more /var/log/secure |grep refused来检查系统所受到的攻击
6、 服务管理
使用chkconfig查看当前的服务情况
Chkconfig –list
Chkconfig –level 3 srvName off|on
查看/etc/inetd.conf文件,注释掉所有不需要的服务,使用sighup命令升级inetd.conf文件
修改/etc/inetd.conf权限为600
所有者为root
Vi /etc/inetd.conf,取消下列服务ftp,telnet,shell,login,exec,talk,ntalk,imap,pop-2,pop-3,finger,auth等等
给inetd进程发送一个HUP信号killall –HUP inetd
Chattr +I /etc/inetd.conf
启动和关闭防火墙
Chkconfig iptables on
Chkconfig iptables off
Service iptables start
Service iptables stop
开启相关端口,修改/etc/sysconfig/iptables文件,增加一下内容
-A RH-Firewall-1-INPUT –m state --state NEW –m tcp –p tcp –dport 80 –j ACCEPT
-A RH-Firewall-1-INPUT –m state –state NEW –m tcp –p tcp –dport 22 –j ACCEPT
rhnsd:软件升级
7、 程序管理
禁止不使用的SUID/SGID程序,如果一个程序被设置成SUID root,那么普通用户就可以以root身份来运行这个程序,查找root-owned程序中使用‘s’位的程序
Find / -type f /(-perm -04000 –o –perm -02000 /)/-exec ls –lg {}/;
使用下面的命令禁止选中的带有s位的程序
Chmod a-s [program]
8、 防止攻击
1)
阻止ping
在/etc/rc.d/rc.local中增加: echo 1>/proc/sys/net/ipv4/icmp_echo_ignore_all
2) 防止IP欺骗:编辑host.conf增加以下内容防止IP欺骗攻击,
order bind,hosts
multi off
nospoof on