(请记住,只有在服务器上/etc/passwd文件中UID大于等于500的用户才会被放进数据库中)
f) 使用useradd在客户端创建一个新的用户,然后在服务器端创建一个不同的用户,然后使用passwd设置他们的密码。
(在客户端): useradd -u 1024 localguy passwd localguy
(在服务器): useradd -u 1025 nisuser passwd nisuser
g) 确认使用localguy能在本地登陆,nisuser能在服务器上登陆。然后使用nisuser帐号在客户端上登陆,应该是不可以的。
h) 在服务器上的 /var/yp 目录,执行make命令,当命令完成,再使用nisuser从客户端上登陆,这回应该成功了,为什么?
i) 使用passwd改变nisuser的密码,是否改变了服务器上的 /etc/passwd 和 /etc/shadow 文件?NIS服务器中的文件是否改变了呢?你可以使用如下命令测试:
ypcat passwd | grep nisuser
j) 使用localguy登陆到客户端,是不是即时ypbind在运行仍然可以登陆?
k) 当你使用nisuser登陆到客户端时,你的主目录是什么?NIS仅仅提供验证信息,不提供客户端和服务器端的文件共享机制
完成:一个从NIS服务器上获得得验证信息的客户机 步骤3:限制NIS用户
任务: 我们的客户端现在是公司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? 你怎么避免这种情况?
试验10 使网络安全 估计时间: 1小时 目标: 学习使用iptables构建一个防火墙 试验的起点: 标准的Red Hat Linux安装,kernel要支持防火墙,iptables 要安装
步骤1:创建一个简单的防火墙
场景/故事
你要建立一个防火墙保护你的主机不受可疑主机192.168.0.254的骚扰,可疑的主机不只这一个,你还要创建一个规则防止你的一个邻近的主机使用ping-flooding(洪水ping)攻击你的计算机。
任务: 9. 删除所有已经存在的用户定义的chains,重置所有chains上的默认规则,刷新所有规则: iptables –F; iptables –X for chain in INPUT FORWARD OUTPUT; do iptables –p $chain ACCEPT done 或者 service iptables stop
10. 阻止所有从邻近的主机(192.168.0.Y)的进来的连接:
iptables –A INPUT –s 192.168.0.Y –m state --state NEW –j DROP
这样还是允许你打开到他们系统的连接,但不是所有的
11. 限制从你的邻居(192.168.0.X)进来的ICMP echo request(回应请求)包
iptables -A INPUT -s 192.168.0.X -p icmp --icmp-type echo-request \ -m limit --limit 6/minute --limit-burst 2 -j ACCEPT
iptables -A INPUT -s 192.168.0.X -p icmp --icmp-type echo-request \ -j DROP
12. 显示你的防火墙策略
iptables -nl
13. 测试你的防火墙配置 a) 你的邻居(192.168.0.Y)能连接到你的系统吗?你能ping通他吗? b) 确认你的邻居(192.168.0.X)使用的不是你在上面第2步时设置的地址。 c) 你的邻居(192.168.0.X)能ping通你的系统吗?你能ping通他吗?
14. 保存你的防火墙设置:
iptables-save > /etc/sysconfig/iptables 或者 service iptables save
15. 配置你的系统重启后仍保留新的防火墙规则:
chkconfig --level 2345 iptables on
现在确认一下
chkconfig --list iptables
16. 重新启动确认你的策略仍在。
完成: 1. 你可以主动连接你的邻居(192.168.0.Y) 2. 所有的主机都可以主动连接你,除了你的邻居(192.168.0.Y) 3. 你的另一个邻居(192.168.0.X)不能用ping-flood攻击你的系统。
清理: 当你确信成功完成了实验,让你刚才创建的策略实效:
service iptables stop chkconfig iptables off
试验11 使服务安全 估计时间: 1小时 目标: 使用tcp_wrappers和xinetd限制用户对系统的访问 试验的起点: 标准的Red Hat Linux安装
步骤1:限制特定主机对服务的访问
场景/故事
某些特定主机和特定网段比较危险,为了保护你的主机,你决定阻止它们访问你的一些敏感的服务
任务: 把你的主机配置成以下的描述的样子(你需要跟其他两个人合作,让他们来测试),注意:如果没有安装telnet-server和openssh-server,要把它们的rpm包装上。
17. ssh可以被本地子网访问,但是不能让其他网段的用户访问。 18. telnet可以被你的三个邻居访问,但是不允许其他人来访问。 19. 任何服务都不接受从cracker.org来访问(你能找出特定的IP地址范围吗?)
你可以找出不同的解决方案,下一页是其中一种解决方法。
一种解决方法: 假定你使用旁边的三台计算机stationX.example.com、stationY.example.com、stationZ.example.com来测试你的配置。
1. 安装telnet-server:
rpm –Uvh /mnt/server1/RedHat/RPMS/telnet-server* chkconfig telnet on
安装openssh-server:
rpm –Uvh /mnt/server1/RedHat/RPMS/openssh-server* chkconfig sshd --add
2. /etc/hosts.deny sshd :ALL EXCEPT 192.168.0.
3. /etc/xinetd.d/telnet: only_from = 192.168.0.X 192.168.0.Y 192.168.0.Z 4. /etc/xinetd.conf no_access = 192.168.1.0/24
如果想侦测出cracker.org的IP地址,你可以使用host命令:
host –l cracker.org server1.example.com
以上的命令查询名称服务器server1.example.com中的cracker.org区域信息,从返回的IP来看所有的记录都是192.168.1.0这个子网的。呵呵世界上的事情不可能如此简单,通常名称服务器(DNS服务器)只允许它的从服务器进行区域传递,而不会允许其他计算机这样的。所以为了保护你的安全,想知道整个区域的信息非常不容易实现。
步骤2 场景/故事
你已经通过配置/etc/hosts.deny限制FTP和telnet访问,现在要审核你正在运行的服务了,你需要一个搭档扫描你主机的端口。
如果你在一个可以连通到Internet的教室中,不要用nmap扫描外面的example.com域或192.168.0/24之外其他的网段,谢谢您的配合!
任务: 1. 找一台别人的主机用以下命令进行端口扫描:
nmap –sSUR –P0 –vO <stationX> &> scan_of_stationX.txt
2. 在你的主机上使用root帐户登陆,运行以下命令查看你的哪些进程正在监听着哪些端口:
netstat –tulpe
主机上列出的端口与用nmap扫描的端口是否一致?如果你使用GNOME桌面环境,几个GNOME的连接端口可能会打开,退出X-window,进入运行级别3,netstat会报告相同的端口吗?
3. 现在使用chkconfig来验证你的系统,输入:
chkconfig --list |grep on
你的还配置了其他你不太了解的服务了吗,使用chkconfig和ntsysv命令来关闭你不用的服务,之后从新启动,重复第二步以上的步骤,netstat还会报告你关掉的服务的端口吗?
完成:系统审核显示只有需要的服务被运行。 试验12 数据安全 估计时间: 1个半小时 目标: 熟悉基于加密的工具 需要的RPM软件包: openssl,openssh,eopssh-clients,openssh-server
步骤1:使用gpg来交换加密的电子邮件
用户alice和bob希望能够安全的交换信息,使用GNU的Privacy Guard(gpg)来提供加密服务。您将建立两个用户,为他们的每个建立公钥和私钥。下一步,alice将获得bob的公钥,并且使用该公钥来加密给他的信息,bob将解密信息。
1. 建立用户
[root@localhost]# useradd alice; useradd bob [root@localhost]# passwd alice [root@localhost]# passwd bob
2.为每个用户建立公钥和密钥。注意到gpg第一次运行的时候,会建立缺省的初始化用户文件:当提示“…your message”,按下CTRL-C。
[alice@localhost]# gpg [alice@localhost]# gpg –help [alice@localhost]# gpg –gen-key
您将被提示多种的密钥参数。选择缺省的选项。当询问您的细节的时候,设定真实的名称为Alice。其他的信息您随便填写。您同时将被会问及您的密码。您可以使用任何密码(但是您必须自己记得住!);或者简单的敲两下<回车>不使用密码。
对于用户bob采用相同的步骤,设定其“真实的名称”为Bobby(gpg抱怨bob太短了)
3. 检查alice的公钥和密钥,该公钥和密钥存储在pubring.g上一页 [1] [2] [3] [4] [5] [6] 下一页 |