1、在远程终端里,用非root账户运行passwd命令,不要输入密码;然后开启另一个远程终端,在此终端内查看刚才被运行的passwd命令的euid,ruid,pid和命令名字。
答:命令:ps a -u weliteh -o cmd,euid,ruid,pid|grep 'passwd'
2、解释上一操作中所看到的euid和ruid的值所代表的意义和关系。
euid:effective user id,为有效用户ID,也就是说当用户做任何一个操作时,最终看它有没有权限,都是在判断有效用户ID是否有权限,如果有,则OK,否则报错不能执行。
ruid: real user ID,为实际用户ID,用于标识一个系统中用户是谁,一般是在登录之后,就被唯一确定的,就是登陆的用户的uid。永远不会变,从该根shell产生的所有进程都会继承ruid,即该用户。
关系:euid和ruid通常情况下是一样的,只有在某可执行文件设置了suid位,然后由非owner用户来执行时不一样:如果user1的可执行文件设置了suid位,且该文件可被user2执行,那么user2执行时,该进程的euid是user1,而ruid是user2.因为user2登录后去执行,所以ruid是user2; 因为user1设置了suid位且该文件是user1的,所以euid是user1.另外特权进程(即euid=0,即euid=root)可以设置euid和ruid为非0值(正如login,su和sudo所做的那样)。一般,一个特权进程一旦将其ruid和euid变成非0值,它就变不回root了。
上述命令(passwd)的解释:
- weliteh用户有权限执行passwd,weliteh登录后执行passwd
- 执行时,ruid仍是weliteh值为1000,而euid是root,特权进程,值为0
- Weliteh之所以能够改变他自己的密码,是因为passwd内部会检查ruid是否是root,若不是,则其行为会局限于修改ruid的密码
- 让euid变成root是必须的,因为密码的改变必然要求写 /etc/shadow 文件,而该文件权限位是 640,即只有root能写,所以euid必须是root.
当普通用户执行passwd命令时,shell会fork出一个子进程,此时进程有效用户ID还是普通用户ID,然后exec程序执行/usr/bin/passwd。在上次实验举例中我们就已知道/usr/bin/passwd有SUID位,于是会把进程的有效用户ID设成设置成文件用户ID,显然就是root, 此时这个进程都获得了root权限, 得到了读写/etc/shadow文件的权限, 从而普通用户可完成密码的修改。exec进程退出后会恢复普通用户的EUID为普通用户ID.这样就不会使普通用户一直拥有root权限。 这就是我们设置用户ID位的作用,它的存在就是为了普通用户在某些需要特权权限时,去临时的改变有效用户ID而获得特权权限。
3、用ps命令以树状结构列出所有sshd程序对应的进程以及子进程。
答:命令:ps –axjf | grep sshd
4、列出系统上所有sshd进程的进程号,用英文的分号 ‘;’ 作为进程号之间的分隔符号。
答:命令:pidof sshd | sed 's/ /;/g'
5、用完整格式显示当前用户的所有进程。
答:命令:ps auw –U $USER
6、用完整格式,结合树状结构,显示当前用户的所有进程
答:命令:ps auwf –U $USER
7、用nohup启动ping命令来查找到www.bing.com的网络响应时间,请确保ping长时间运行,直到其被停止运行。
答:命令:nohup ping www.bing.com &
8、输出该ping命令的执行结果
答:命令:cat nohup.out
9、显示该ping进程的命令名字、PID、nice值
答:命令:ps ao cmd,pid,nice -U $USER | grep 'ping www.bing.com'
10、调整该ping进程的的nice值为5
答:命令:sudo renice 5 -p 16263
11、再次显示该ping进程的命令名字、PID、nice值
答:命令:ps ao cmd,pid,nice -U $USER | grep 'ping www.bing.com'
12、结合ps命令和其他命令, 结束这个ping进程
答:命令:ps ao cmd,pid,nice -U $USER | grep 'ping www.bing.com' ,kill -9 16263
13、运行命令:ping www.bing.com > /dev/null
14、在shell按下ctrl-z,截图
15、列出当前tty里该ping进程的状态(stat,下同)
答:命令:ps –eo cmd,stat,tty | 'ping www.bing.com'
16、用jobs命令列出当前暂停的作业
答:jobs –s
17、用bg命令结合合适的参数将该ping进程转为后台作业
答:命令:bg 1
18、列出当前tty里该ping进程的状态
19、用fg命令结合合适的参数将该ping进程转为前台作业
答:命令:fg 1
20、新起一个shell,用ps命令列出该ping进程的状态