任务:
我们的客户端现在是公司NIS体系的一部分,因为他储存了秘密数据,不是所有的用户都可以访问这台机器,只有特定的远程用户才能访问。
1. 这个测试需要添加一个NIS用户,使用useradd命令添加一个名叫baduser的用户。
useradd –u 1026 baduser passwd baduser
2. 一个解决方案是使用pam_listfile,只允许nisuser访问我们的系统。打开 /etc/pam.d/system-auth ,紧接着auth开头的之后添加以下一行:
account required /lib/security/pam_listfile.so item=user sense=allow file=/etc/nisusers onerr=fail
3. 假如测试目前的设置,你将会发现连root也不能登陆,所以千万不要关掉root的shell!你要创建 /etc/nisusers 然后把所有允许访问的用户添加到文件中,一行一个用户名,我们只想允许nisuser用户,所以我们的文件会非常短。
4. 现在如果你想登录到文本控制台,只有nisuser可以进入,因为其他人不在文件中,把root添加到 /etc/nisusers 中。
5. 我们的任务还是允许所有本地用户登陆的,我们可以把 passwd文件中的用户都添加到我们的列表中,但这不是最好的方法,我们可以使用PAM库中的pam_localuser来达到目的。添加以下这行到pam_localuser.so之后。
account required /lib/security/pam_localuser.so
6. 测试这样的配置,你会发现仍然只有root可以登陆,为什么呢?
7. 是因为required字段的关系,把上面添加的两行的required都改成sufficient,现在好了吧?如果改成requisite会怎么样?
8. 清理:再次运行authconfig工具,删除所有设置,并且禁用NIS。 试验9 系统监视
估计时间: 1小时15分钟
目标: 使用查找文件的方法来保护系统 试验的起点: 标准的Red Hat Linux安装
步骤1:定位易被攻击的文件或目录
场景/故事
查找文件系统中易被攻击的文件或目录 任务:
6. 查找有SUID和SGID的文件,并且把他们的名字存在 /root/stickyfiles中:
find / -type f -perm +6000 2> /dev/null > /root/stickyfiles
7. 查找任何人都可以写入的文件,把它们的名字储存在 /root/worls.writalbe.files:
find / -type f -perm -2 > /root/world.writalbe.files
8. 看一下 /root/stickyfiles 和 /root/world.writable.files 有哪些文件
步骤2:使用tripwire监视文件系统的完整性
场景/故事
你决定使用tripwire来确认数据的完整性 任务:
9. 使用root登陆并且安装tripwire 的RPM包(运行下面的这个命令之前需要把server1上的共享mount到 /mnt/server1目录上):
rpm –Uvh /mnt/server1/RedHat/RPMS/tripwire*
10. 看一下tripwire包中提供哪些文件和文档:
rpm –ql tripwire
11. 编辑 /etc/tripwire/twpol.txt 来定义你的主机策略文件。默认的策略文件是基于Red Hat linux的everything安装,这样它就会试图监视你没有安装的文件。结果是会产生一些出错消息,这些消息可以忽略。最好的方法是删除所有你没有安装的文件。
你应该定义自己的策略,仔细看一下策略文件,删除其中你机器上没有的文件。即使是只删除一两个你没有的文件就要花很长时间。现在来添加目前没有被监视的文件,添加 /etc/samba 目录到“Critical Configuration”部分。
12. 现在你定义完了你的策略,运行 /etc/tripwire/twinstall.sh ,这个脚本将建立加密的策略、配置和密钥文件。你需要输入一些密码,一旦这些步骤完成,在 /etc/tripwire中就会有一些新的文件产生。
13. 现在来用 tripwire –init 命令来初始化tripwire的数据库
tripwire会报告很多警告,这是因为它找不到在策略文件中包含的文件,你可以忽略它们。
14. 我们来测试tripwire,需要按照以下步骤完成
a) mv /sbin/ifconfig /sbin/ifconfig.bak b) tripwire --check
15. 使用twprint生成一份报告,命令是这样的:
twprint -m r --twrfile \\
/var/lib/tripwire/report/somehost.somedomain-200009-12134.twr
是否tripwire侦测到文件变化了?tripwire 会正确侦测到 /sbin/ifconfig丢失了。 把ifconfig还原回去,再次运行tripwire –check,这回还能侦测到改变吗?
mv /sbin/ifconfig.bak /sbin/ifconfig tripwire –check
即使你把ifconfig还原了,但是修改的时间已经变化了,所以tripwire将会报告错误,升级tripwire的数据库
tripwire --update --twrfile \\
/var/lib/tripwire/report/your_lastest_report_file
这将会启动默认的编辑器,这样你可以同意目前的变化。完成后退出编辑器,tripwire会升级你的数据库。
16. 你可能会注意到top程序没有被监视,这个文件经常被“root kits”所替换调,所以它应该被tripwire监视,编辑 /etc/tripwire/twpol.txt,在“System Administration Programs”项中添加 /usr/bin/top 这项规则。
/user/bin/top -> $(SEC_CRIT);
升级你的策略:
Tripwire --update-policy /etc/tripwire/twpol.txt 完成:
数据完整性的工具应该每天根据数据库来运行。
步骤3:使用tmpwatch来清理临时文件目录
场景/故事
你需要确定或者确定并删除已经有一定时间没有人访问的文件。 任务:
1. 运行tmpwatch的test选项,这样可以看一下哪些文件7天没有人访问了:
tmpwatch –v –test 168 /tmp
步骤4:文件的访问控制
场景/故事
你想创建一些用户可以使用的文件,然而你想控制用户对这些文件的访问类型。 任务:
1. 创建一个名为supervisor的用户
2. 在supervisor的主目录下创建两个文件:
touch /home/supervisor/{payroll,old.employees}
3. 防止payroll文件被删除
chattr +i /home/supervisor/payroll
4. 只允许数据附加在old.employees文件上
chattr +a /home/supervisor/old.employees
5. 确认文件的属性被更改:
lsattr /home/supervisor/*
6. 试着删除payroll文件:
rm /home/supervisor/payroll
你收到什么错误的信息?
7. 试着编辑old.employees文件,在保存文件时有没有错误消息?为什么会/不会这样?出错的消息是什么意思?输入以下命令:
echo “foobar” >> /home/supervisor/old.employees
为什么这个命令可以工作? 完成:
1. 不能被删除的payroll文件
2. /home/supervisor/old.employee文件只能把数据添加到其中,不能删除任何文件中的内容。
步骤5:将日志集中写入一个专门的日志主机中
场景/故事
你的老板认为将所有日志写到一个专用的日志主机中是个非常好的主意 任务:
与你的旁边的人一起做实验
1. 首先配置syslogd可以接收远程的消息,编辑 /etc/sysconfig/syslog :
SYSLOGD_OPTIONS=”-r –m 0”
2. 重启syslogd:
service syslog restart
现在你的主机可以接收其他机器的消息了
3. 配置syslogd发消息给别的机器,在/etc/syslog.conf添加下面这行:
user.* @stationX
在这里stationX是旁边的机器
4. 重启syslogd:
service syslog restart
现在你的机器就会把用户运行的程序发给旁边的机器了
5. 使用logger创建一个syslog的消息
logger –i –t yourname ”this is a test”
这则消息是否显示在你旁边机器的 /var/log/messages中了呢? 问题:
为什么这个消息会显示在 /var/log/messages? 你怎么避免这种情况?