增强系统的安全性
安全问题概述与常见隐患
信息系统的安全要求
机密性 confidentity
完整性 integrity
抗否认性 non-repudiation
可能性 availability
信息系统的安全性由系统中最脆弱的安全组件决定(木桶原则)
常见信息安全术语
Hacker(黑客) 拥有超群的计算机技术追求技术创新的人
Cracker(骇客) 破坏信息安全的破坏者
漏洞(loophole) 由软硬件的疏忽导致的能避过系统的安全措施的一种错误,可以被cracker直接利用,常见的有缓冲溢出漏洞。
脆弱性(vulnerability) 能被cracker用来破坏信息系统安全的弱点,不能被cracker直接利用,一般是计算机的使用者无意中提供的。可以是一个容易猜测的密码,或者是一个没有加密的服务。
攻击 (attack) 试图绕过安全控制的破坏活动。攻击的目的一般是破坏或盗取数据,或者破坏系统的正常功能。
特洛伊木马(Trojan horse)简称木马,是一种通过正常路径混进计算机的有害程序。可以让远程用户遥控这台有木马的计算机。
病毒(Virus)依赖其他程序生存,可以自我自制传播的代码。
蠕虫(Worm)不需要寄主,可以独立生存,主动传播的程序。
拒绝服务(Dos/DDoS)通过大量无效的正常请求,让服务器达到最大的服务极限,从而拒绝正常用户的服务。
窃听(Wiretapping)指在数据的通信线路上截取数据,盗取不该获得的数据。根据数据的获取手段分主动式和被动式。
增强Linux系统安全性
Linux系统的安全策略
物理安全只允许管理员物理接触主机
起动安全(BIOS,GRUB/LILO)对于多人共享的主机,应该为BIOS或者引导程序设置密码。
登陆安全使用任何方式登陆服务器的用户都需要认证授权。
运行安全运行中的程序不应该有漏洞,也不应该被用户利用来寻找系统中的漏洞(当心suid,sgid程序)
通信安全任何跟服务器通信过程中传输的用户密码以及敏感数据都应该加密。
网络服务安全限制服务器的客户主机地址,限制联机频率等
管理员职责
根据前面的要求部署安全策略
定期检查日志,设置报警功能
跟踪应用软件的发布网站,及时为软件升级,打补丁
订阅安全电子邮件列表,密切注意最新的安全警告。
安全网站: http://www.cert.org
给grub加密
vi /etc/grub.conf
password –md5
[root@server ~]# grub-md5-crypt
Password:
Retype password:
$1$bvv0m$MPIdmKnGSvqEpzC0OdHqZ0
grub-md5-crypt >> /etc/grub.conf
vi /etc/grub.conf
password --md5 $1$xlw0m$gGVYHBJ5jQZVQ0Jb3pJgv
系统中不应该有777的全局可写的文件
find / -perm -002
find / -perm +6000
可以找出来删除,或用安全工具监视
一般来说ftp,imap,smtp,http,telnet都是不安全的协议
可用这些协议来代替sftp,ftps,imaps,smtps,https,ssh
网络服务安全可以用防火墙来保证
用户认证
通常一台服务器会开启很多服务SMTP,TELNET,POP3,FTP,SSH等,这些服务都把验证交给了系统验证。这样一旦这些服务用户泄露密码或是配置服务的疏忽,那将会对系统造成影响。
Linux-PAM认证模块
Pluggable Authentication Modules for Linux
Client sendmail pam(libpam.so) Pam_unix.so
ipop3d Pam_env.so
imapd Pam_nologin.so
vsftpd Pam_rootok.so
... Pam_shells.so
...
/etc/pam.d/<service>
对于不同的服务器调用的模块这是不同的,可能用ldd来检查
ldd /usr/sbin/sshd
libpam.so.0 => /lib/libpam.so.0 (0x00138000)如果这个服务器在编译的时候连接到libpam.so模块,就表示这个服务器可以用pam提供验证。
pam本身也不能验证,它是调用了很多其它模块。
这些模块放在ls /lib/security/下面
并不是都要使用这此模块,具体的服务,它专门由/etc/pam.d/<service>,下面的文件所定义的。
ls /etc/pam.d/定义各种服务所需的PAM文件时
当我们更改服务的认证,首先应该改这里的认证文件
PAM服务文件
more /etc/pam.d/login
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth include system-auth
account required pam_nologin.so
account include system-auth
password include system-auth
# pam_selinux.so close should be the first session rule
session required pam_selinux.so close
session required pam_loginuid.so
session optional pam_console.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session required pam_selinux.so open
session required pam_namespace.so
session optional pam_keyinit.so force revoke
session include system-auth
session optional pam_ck_connector.so
PAM服务文件格式
module-type control-flag module-path arguments
module-type:auth,account,session,password
control-flag:required,requisite,sufficient,optional
e.g.
auth required pam_securetty.so
auth required pam_stack.so service=system-auth
...
常用的PAM服务文件
login /etc/pam.d/login
ipop3d /etc/pam.d/pop
vsftpd /etc/pam.d/ftp或/etc/pam.d/vsftpd
su /etc/pam.d/su
imap /etc/pam.d/imap
所有的关于服务的认证模块都放在cd /etc/pam.d/
里面的每个认证都有相关的pam模块
相关的pam模块的文档都放在cd /usr/share/doc/pam-1.0.1/txts/
例如more /etc/pam.d/login
可以看到account required pam_nologin.so模块
可以参考more /usr/share/doc/pam-1.0.1/txts/README.pam_nologin进行修改
认证堆栈
对每一个模块放进行验证,把认证成功的标识位放进堆栈。
任何一级的成功都需要其下一级的认证,任何一级的失败导致失败。
常用的pam模块
pam_access.so 控制访问者地址与账号名称
pam_listfile.so 控制访问者账号名称或登陆位置
pam_limits.so 控制为用户分配的资源
pam_rootok.so 对管理员(uid=0)无条件允许通过
pam_userdb.so 设定独立用户账号数据库认证
cd /usr/share/doc/pam-1.0.1/txts/这里面全部放的是pam模块的用法
修改securetty
more README.pam_securetty这样可以查看securetty模块的用法
more /usr/share/doc/pam-1.0.1/txts/README.pam_nologin
pam_nologin is a PAM module that prevents users from logging into the system
when /etc/nologin exists
touch /etc/nologin
rm /etc/nologin
ssh redhat@192.168.0.101可以登陆成功
修改ssh
cd /etc/pam.d/
vi sshd
account required pam_access.so
vi /etc/security/access.conf
-: redhat : ALL EXCEPT 192.168.0. 拒绝redhat用户登陆除了 192.168.0.
ssh redhat@192.168.0.101 可以登陆成功
ssh redhat@127.0.0.1登陆失败
pam_access.so
如果要用account required pam_access.so来控制FTP服务器
首先打开FTP服务器的PAM服务文件加上account required pam_access.so模块
然后改相应的控制域就可以了
加到system_auth,会影响系统全局
因为这个模块pam_access.so使用一个默认的文件
如果好几个服务都使用这个,如果不同服务需要控制不同的用户,怎么办呢?
more /usr/share/doc/pam-1.0.1/txts/README.pam_access
accessfile=/path/to/access.conf可以看到有个参数
pam_listfile.so
cd /usr/share/doc/pam-1.0.1/txts/
more README.pam_listfile
vi /etc/pam.d/ftp
auth required /lib/security/pam_listfile.so item=user sense=allow file=/etc/ftpusers onerr=succeed
item里面的用户是user,可以改成group
vi /etc/pam.d/sshd
account required pam_listfile.so item=user sense=deny file=/etc/denyuser onerr=succeed
echo "redhat">/etc/denyuser
ssh -l redhat 192.168.0.101
redhat@192.168.0.101's password:
Connection closed by 192.168.0.101
可以看到redhat用户登陆失败说明pam_listfile.so生效
vi /etc/pam.d/sshd
account required pam_listfile.so item=user sense=allow file=/etc/denyuser onerr=succeed
ssh -l redhat 192.168.0.101改成allow后登陆成功
ssh -l root 192.168.0.101换成另的用户就不行了,因为root没有写进这个/etc/denyuser文件
tail /etc/denyuser
redhat
pam_limits.so
more /usr/share/doc/pam-1.0.1/txts/README.pam_limits
vi /etc/pam.d/sshd
session required pam_limits.so
vi /etc/security/limits.conf
@redhat - maxlogins 1
ssh -l redhat 192.168.0.101只能让redhat用户组登陆一次
w可以查看系统中有多少个人
pam_rootok.so
more /etc/pam.d/chfn 是一个修改用户信息的finger工具
more /etc/pam.d/chfn
auth sufficient pam_rootok.so
su - redhat切换到redhat
chfn可以看系统提示你输入密码
退回到root,没有提示你输入密码
pam_userdb.so前面增加vsftpd己讲过例子
升级软件
1.浏览软件的发布站点,寻找更新记录与说明
2.下载最新的软件包
3.如果有补丁,最好下载最新的补丁包
4.如果有数字签名或者MD5校验文件,应该一起下载,用来校验软件的完整性
5.编译安装升级
示范:升级Samba
1.寻找samba官方网站www.samba.org,找到速度最快的镜像服务器
2.下载最新软件包和数字签名
3.校验数字签名
wget http://us1.samba.org/samba/ftp/samba-pubkey.asc
wget http://us1.samba.org/samba/ftp/stable/samba-3.2.4.tar.asc
wget http://us1.samba.org/samba/ftp/stable/samba-3.2.4.tar.gz
gpg –import samba-pubkey.asc
gzip -d samba-3.2.4.tar.gz
gpg --verify samba-3.2.4.tar.asc如果出现 Good signature说明这个软件包是samba组织发布的,而且没有被破坏
4.编译安装升级
tar xvf samba-3.2.4.tar
gpg --import samba-pubkey.asc
gzip -d samba-3.2.4.tar.gz
gpg --verify samba-3.2.4.tar.asc
tar xvf samba-3.2.4.tar
cd samba-3.2.4/ source/ 存放着samba的源代码
./configure –help|more
./configure;make;make install
示范:为Kernel打补丁
http://www.kernel.org/pub/linux/kernel/v2.6/patch-2.6.27.7.bz2
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.27.7.tar.bz2
1.准备好2.4.26版本的内核文件linux-2.4.26.tar.bz2
2.下载2.4.27版本的补丁patch-2.4.27.bz2和md5校验文件
3.打补丁
tar xvjf linux-2.4.26.tar.bz2
bzcat patch-2.4.26.bz2|more
bzcat patch-2.4.26.bz2|patch -p0
mv linux-2.4.26 linux-2.4.27
4.编译新内核替换旧内核
cd linux-2.4.27;make menuconfig
make dep bzImage modules modules_install install
查看内核版本
cat /proc/version
查看linux版本
cat /etc/redhat-release
cat /etc/issue
lsb_release -a
http://www.kernel.org/signature.html
vi kernel.pubkey
-----BEGIN PGP PUBLIC KEY BLOCK-----
----
-----END PGP PUBLIC KEY BLOCK-----
gpg --import kernel.pubkey
gpg --verify patch-2.4.27.bz2.sign
出现good signiture,说明没有问题
常用系统安全分析工具
扫描器 nmap 可以扫描一个服务器开启的服务,帮助管理员远程分析一台服务器是否安全,是否有潜在的漏洞。招描的可以是一个网段也可以是一个具体的IP地址
用法:nmap 192.168.0.101 默认的TCP
nmap -sU -sR 192.168.0.101 同时扫描UDP
nmap -sS -sU -sR 192.168.0.101
嗅探器 tcpdump 帮助分析一个服务器的流量,数据包的具体情况,可以捕捉某一种数据包
用法:tcpdump -i eth0 -X dst 192.168.0.101
tcpdump -i eth0 -X dst 192.168.0.101 and dst port 21只捕捉端口是21的数据包
日志服务器 syslog
用法:比较复杂
vi /etc/syslog.conf
yum install rsyslog
vi /etc/rsyslog.conf
*.* /tmp/log
service rsyslog restart
tail /tmp/log
日志服务器还可以把几个日志合在一起用
vi /etc/rsyslog.conf
*.* @192.168.0.101表示发给192.168.0.101这台主机
vi /etc/sysconfig/syslog
为了让192.168.0.101可以接受消息SYSLOGD_OPTIONS="-m 0 -r -x"
grep syslog /etc/services
netstat -unl |grep :514
日志都放在 ls /var/log/
tail -f boot.log 来监视日志的变化
日志系统
1.编辑/etc/syslog.conf
2.重新启动日志服务器
service syslog restart
3.检查日志/var/log/*
推存日志分析软件SWATCH/lire
yum install swatch
http://heanet.dl.sourceforge.net/sourceforge/swatch/swatch-3.2.tar.gz