Linux系统管理技术手册第三章习题实践
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配置文件创建两项:
- 一项让用户matt,adam和drew负责在printserver这台机器上为打印机服务,消除夹纸,如何重新启动打印机的守护进程;
- 一项让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来设定邮件的主题。
建议继续学习:
- Linux系统管理手册习题实践 (阅读:2790)
- linux系统管理技术手册第十二章系统实践 (阅读:2328)
- Linux系统管理技术手册第10章系统实践 (阅读:2249)
- Linux系统管理技术手册第五章习题实践 (阅读:2179)
- Linux系统管理技术手册第四章习题实践 (阅读:2149)
- Linux系统管理技术手册第十三章系统实践 (阅读:2063)
- Linux系统管理技术手册第8章习题实践 (阅读:1950)
- Linux系统管理技术手册第七章习题实践 (阅读:1874)
- Linux系统管理技术手册第六章习题实践 (阅读:1801)
- Linux系统管理手册第二章习题实践 (阅读:1754)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:mlsx 来源: Linux|系统管理|WEB开发
- 标签: Linux系统管理技术手册 习题
- 发布时间:2009-11-27 00:11:40
- [52] 图书馆的世界纪录
- [52] IOS安全–浅谈关于IOS加固的几种方法
- [51] 如何拿下简短的域名
- [50] android 开发入门
- [49] Oracle MTS模式下 进程地址与会话信
- [49] Go Reflect 性能
- [47] 【社会化设计】自我(self)部分――欢迎区
- [45] 读书笔记-壹百度:百度十年千倍的29条法则
- [37] 程序员技术练级攻略
- [28] 视觉调整-设计师 vs. 逻辑