IT技术博客大学习 共学习 共进步

Linux系统管理技术手册第三章习题实践

Linux|系统管理|WEB开发 2009-11-27 00:11:40 浏览 3,065 次

E3.1  使用带有-perm选项的find命令在您的系统上找到5个setuid文件。对于每个文件,试述为什么对于让命令正确发挥其功能来说,setuid机制是必要的。

A:有关find的-perm选项的说明,可以看我之前的帖子,里面描述了如何正确设置perm参数来查找setuid/setgid文件。

$ find /usr/bin /bin -type f -perm +6000

/usr/bin/screen
/usr/bin/X
/usr/bin/passwd
/usr/bin/mail-lock
/usr/bin/newgrp
/usr/bin/kgrantpty
......
/usr/bin/pkexec
/usr/bin/xterm
/usr/bin/kpac_dhcp_helper
/usr/bin/ssh-agent
/usr/bin/crontab
/usr/bin/sudo
/usr/bin/chage
/usr/bin/mlocate
/usr/bin/fileshareset
/usr/bin/chfn
/usr/bin/bsd-write
/usr/bin/mtr
/usr/bin/traceroute6.iputils
/usr/bin/mail-touchlock
/usr/bin/arping
/usr/bin/expiry
/usr/bin/sudoedit
/bin/ping
/bin/ping6
/bin/umount
/bin/fusermount
/bin/mount
/bin/su

使用setuid/setgid位无非就是因为那些程序运行普通用户运行,但是又需要root权限来对系统文件做一定的更改。比如/usr/bin/passwd文件,它是用来修改用户的口令。而我们知道缺省情况下,口令密文保存在/etc/shadow文件里。而这个文件仅仅对root可读。所以为了使得普通用户修改口令时,能修改/etc/shadow文件,不得不让/usr/bin/passwd有setuid权限。
在比如/usr/bin/crontab文件。如果没有setgid位,执行行,会给出下面的错误:

$ crontab  -e
/var/spool/cron/crontabs/wgzhao: Permission denied
 
# ls -ld /var/spool/cron/crontabs/
drwx-wx--T 2 root crontab 4096 2009-09-16 16:16 /var/spool/cron/crontabs/

这是因为crontab自定义配置文件保存在/var/spool/cron/crontabs目录下,以用户名为文件名。而crontabs目录的许可如上面ls的结果所示,对于非root用户和crontab组成员,是无法进入该目录的。因此我们至少需要crontab许可。
所以,/usr/bin/crontab文件的许可就是下面这个样子:

 ls -l /usr/bin/crontab
-rwxr-sr-x 1 root crontab 31712 2009-09-15 21:12 /usr/bin/crontab

在组crontab许可位上设置了setgid位。保证运行crontab指令时,能获得crontab组身份,从而能保存文件到/var/spool/cron/crontabs/目录下。
其他的文件,理由类似,就不再一一描述。

E3.2 创建三个“出人意料的废话”式口令词,但是要保密。通过运行md5sum程序处理这三个口令词,报告结果。为什么公开MD5结果是安全的。

A:创建一个安全的密码不是一件容易的事情。太困难会记不住,一旦忘记,等于这个密码没有意义。太简单就容易猜解或者暴力破解。所以目前有一些工具专门用来生成一些固定长处的密码,比如pwgen,apg,gpw等工具都能做这些事情。该书提到了一个方法就是用一些平常不敢说的,或者没有任何意义的一句话的单词首字母拼接起来。

比如你很痛恨某一个人,但是当面又不敢说,这样你就可以把诅咒他/她的话变成密码短语。英语不是我们的母语。不过我们可以使用拼音字母组合,这实际上比单词拼接更难猜解。因为当前大部分密码字典都是基于英语单词的。比如我们可以创建这样的密码:

wjsbg-s-nwdmm

如果我不解释,恐怕要猜测上面的意思很难,其实去掉两个-符号,上面的字母是“我就是不告诉你我的密码”的拼音首字母拼接。

当然,还可以更复杂的,比如:

7y23hgl1tmm

这是“7月23号改了一台密码”的拼音首字母拼接。

上面两个密码的MD5结果如下:

wjsbg-s-nwdmm  08a71fd8b1e7dfeebb6c6990e2e9f1e0

7y23hgl1tmm      aadf738b3f80d5da52a71a4ef23969ba

实际上md5后的结果比密码明文更难猜解。而且md5属于哈希方式,不存在逆向破解。只能是由明文生成密文后去匹配。破解难度很大。

E3.3  列举一系列修改某个用户口令的命令,展示如何掩盖修改的痕迹。假定您只有sudo的权利(允许使用除shell或者su之外的所有命令)

A:修改密码无非就是修改/etc/shadow中的密文字符串,可以通过指令,也可以通过手工编辑。但是需要解决的一个问题是如何掩盖修改痕迹。

如果直接使用sudo /usr/bin/passwd foo 这样的方式来修改foo的密码,那么系统日志会有类似下面的记录:

Dec 7 10:10:24 work sudo : root: TTY=pts/3; PWD=/root; USER=root; COMMAND=/usr/bin/passwd foo

那这样的话,管理员就会知道你恶意修改了密码。

So,可以有两个办法,第一个是在执行修改密码之前,利用已有的许可,停止系统日志服务。

sudo /etc/init.d/syslogd stop

然后使用sudo /usr/bin/passwd foo 修改密码。

最后恢复删除现有日志,然后恢复日志服务

sudo /etc/init.d/syslogd start

另外一个办法就是书上提到的。虽然限制了shell的使用,但是它是通过指定shell的位置来设定的。我们可以通过拷贝一个shell到某一个“奇怪”的目录,然后sudo到这个shell,变成root,然后在passwd foo来修改密码。而后清空root帐号的history信息。

E3.4 为sudoers配置文件创建两项:

  1. 一项让用户matt,adam和drew负责在printserver这台机器上为打印机服务,消除夹纸,如何重新启动打印机的守护进程;
  2. 一项让drew、smithgr和jimlane终止学生机房的任务并重启机器。

A:老实说,对于打印机的服务我不是太了解。因此我只能写出其sudoers的语法,但不能保证真的可以在实际环境中这么用:

Cmnd_Alias PRINTING=/usr/sbin/lpc,/usr/bin/lprm,/etc/init.d/cups restart
 
Cmnd_Alias STU=/sbin/reboot,/bin/kill
 
#Permissions
 
matt,adam,drew printserver = PRINTING
 
drew,smithgr,jimlane  ALL=STU

E3.5  安装sudo,配置成让它把有关误用的邮件发给您。以本地用户和机器名来测试上一个问题中的sudo配置项;验证sudo是否能正确地把日志写到syslog。检查测试在syslog中生成的日志项(需要root权限,很可能还要调整一下/etc/syslog.conf)

A:在sudo里,和mail相关的,主要是下面几个参数:

mail_always
每次有sudo的使用,就发送邮件给指定用户,缺省是关闭的。
mail_badpass
如果使用sudo的用户没有输入正确的密码,则发送邮件给指定用户,默认关闭。
mail_no_host
如果设置了的话,邮件发给指定用户,当sudo使用者使用了不允许的命名。缺省关闭。
mail_no_perms
如果设置了的话,当然sudo使用者使用了不在sudoer里列出或者显式被拒绝的命令时,发送邮件给指定用户。缺省关闭。
mail_no_user
如果sudo使用者不在sudoer列表里,则发送邮件给指定用户。缺省设置了该参数。

我们可以通过设置mailto 参数来指定邮件接收者,默认是root。另外可以通过设置mailsub来设定邮件的主题。

建议继续学习

  1. Linux系统管理手册习题实践 (阅读 3,524)
  2. linux系统管理技术手册第十二章系统实践 (阅读 3,203)
  3. Linux系统管理技术手册第五章习题实践 (阅读 3,183)
  4. Linux系统管理技术手册第10章系统实践 (阅读 3,141)
  5. Linux系统管理技术手册第四章习题实践 (阅读 3,002)
  6. Linux系统管理技术手册第十三章系统实践 (阅读 2,822)
  7. Linux系统管理技术手册第8章习题实践 (阅读 2,703)
  8. Linux系统管理技术手册第六章习题实践 (阅读 2,546)
  9. Linux系统管理手册第二章习题实践 (阅读 2,405)
  10. Linux系统管理技术手册第七章习题实践 (阅读 2,382)