技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> Linux --> Linux系统管理技术手册第三章习题实践

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

浏览:2154次  出处信息

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系统管理手册习题实践    (阅读:2755)
  2. linux系统管理技术手册第十二章系统实践    (阅读:2279)
  3. Linux系统管理技术手册第10章系统实践    (阅读:2207)
  4. Linux系统管理技术手册第四章习题实践    (阅读:2113)
  5. Linux系统管理技术手册第五章习题实践    (阅读:2106)
  6. Linux系统管理技术手册第十三章系统实践    (阅读:2004)
  7. Linux系统管理技术手册第8章习题实践    (阅读:1897)
  8. Linux系统管理技术手册第七章习题实践    (阅读:1804)
  9. Linux系统管理技术手册第六章习题实践    (阅读:1742)
  10. Linux系统管理手册第二章习题实践    (阅读:1727)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1