📄 00000004.htm
字号:
<BR> [wanghy@openlab /etc]$ cat passwd <BR> <BR> root:x:0:0:root:/root:/bin/bash <BR> <BR> bin:x:1:1:bin:/bin: <BR> <BR> daemon:x:2:2:daemon:/sbin: <BR> <BR> adm:x:3:4:adm:/var/adm: <BR> <BR> lp:x:4:7:lp:/var/spool/lpd: <BR> <BR> sync:x:5:0:sync:/sbin:/bin/sync <BR> <BR> shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown <BR> <BR> halt:x:7:0:halt:/sbin:/sbin/halt <BR> <BR> mail:x:8:12:mail:/var/spool/mail: <BR> <BR> news:x:9:13:news:/var/spool/news: <BR> <BR> uucp:x:10:14:uucp:/var/spool/uucp: <BR> <BR> operator:x:11:0:operator:/root: <BR> <BR> games:x:12:100:games:/usr/games: <BR> <BR> gopher:x:13:30:gopher:/usr/lib/gopher-data: <BR> <BR> ftp:x:14:50:FTP User:/ftp: <BR> <BR> nobody:x:99:99:Nobody:/: <BR> <BR> xfs:x:100:101:X Font Server:/etc/X11/fs:/bin/false <BR> <BR> gdm:x:42:42::/home/gdm:/bin/bash <BR> <BR> postgres:x:40:233:PostgreSQL Server:/var/lib/pgsql:/bin/bash <BR> <BR> squid:x:23:23::/var/spool/squid:/dev/null <BR> <BR> lyf:x:500:500::/home/lyf:/bin/bash <BR> <BR> wanghy:x:501:501::/home/wanghy:/bin/bash <BR> <BR> testvv:x:502:502::/home/testvv:/bin/bash <BR> <BR> 在每个用户名字后面有两个数字,前一个是uid,后一个是gid,gid用于标志用户属于 <BR>哪个组。你可以看到root的uid和gid都是0。如果有一个用户的uid被设置成为0,那么他 <BR>就自动地获得了root权限。 <BR> <BR> 一个有趣的问题是passwd的属性,显然passwd必须确保至多仅对root可写,但是如果 <BR>设置成400(仅超级用户可读)会如何呢?在大部分Linux上系统仍然能够工作,然而它会 <BR>抱怨不知道哪个uid到底叫什么名字(“我不知道我叫什么名字“)。 <BR> <BR> 除了超级用户之外,系统定义uid<10的用户为系统用户,而新建的用户将使用500以上 <BR>的uid。 <BR> <BR> 2.4.3 setuid和setgid <BR> <BR> 缺省情况下,Linux的用户保护机制不仅对于直接对文件的存取,也用于设置用户执行 <BR>的程序,一个用户所启动的程序通常自动具有了这个用户的权限,也就是这个程序对文 <BR>件的存取按照用户的权限执行。这使得用户不能绕过文件存取机制破坏文件系统。 <BR> <BR> 然而很多情况下我们必须绕过文件保护机制,例如passwd程序,它用来更改用户的口 <BR>令,在Linux的实现中它去修改/etc/passwd和/etc/shadow文件,因此它必须设计为以超 <BR>级用户身份执行。为此,Linux提供setuid程序来完成这种工作。 <BR> <BR> setuid是一种文件特殊属性,它使得被设置了setuid位的程序无论被哪个用户启动, <BR>都自动具有文件拥有者的权限,可以看到passwd文件的属性是 <BR> <BR> [wanghy@openlab bin]$ ls -l passwd <BR> <BR> -r-s--x--x 1 root root 22312 Sep 25 11:52 passwd <BR> <BR> 文件属性中的s代表setuid,因为passwd程序的拥有者是root,因此passwd程序执行时 <BR>自动获得超级用户权限,所以无论谁执行passwd程序都可以修改系统的口令文件。(说 <BR>实话,这是UNIX的设计中的一个噩梦)另一个例子是web页面服务器,缺省时httpd服务 <BR>器是利用nobody的权限执行,而且没有人愿意将自己的目录设置成777,因此httpd启动 <BR>的程序无法修改用户的程序。对于需要写私人信息的cgi程序这显然是不可使用的,但是 <BR>你可以为cgi程序加上setuid,这样你自己的cgi程序就可以修改自己的私有文件了。 <BR> <BR> setgid与setuid类似,只是具有setgid的可执行文件运行时自动获得文件对应的组权 <BR>限,因为组权限不像用户权限那样精确,所以用setgid的程序不是很多。 <BR> <BR> setuid和setgid都是对正常的UNIX安全机制开的后门,原则上,只有在明确的非用不 <BR>可的功能中才能使用setuid和setgid。特别是,具有root的setuid的应用程序经常是系 <BR>统遭受攻击的目标。在安全性的部分我们将更详细地讨论setuid和setgid的问题。 <BR> <BR> 要给一个文件加上setuid位,使用命令: <BR> <BR> chmod u+s 文件名 <BR> <BR> 同样,要加上setgid位,使用命令 <BR> <BR> chmod g+s 文件名 <BR> <BR> 尽管理论上可以给不可执行的文件加上setuid和setgid,但是这样做通常没有什么意 <BR>义。 <BR> <BR> 2.5 进程和守护 <BR> <BR> 进程概念是一切多任务操作系统的基础。本节介绍基本的进程管理命令。另外,还要 <BR>介绍与服务器紧密相关的一大类进程,即守护进程。在术语中,守护进程称为daemon。 <BR> <BR> 2.5.1 进程和作业管理 <BR> <BR> UNIX是一个多任务的操作系统,这是通过CPU在各个任务之间进行时间片轮转实现的, <BR>为此,UNIX/Linux通过进程的概念进行作业管理。 <BR> <BR> 理论上,进程包括一个程序以及与它的执行状态对应的上下文,如内存分配,文件存 <BR>取状态等等,不过你完全可以简单地把进程说成是“一个执行中的程序”。除了少数核 <BR>心进程之外,其他的用户级进程就是这样一些东西。 <BR> <BR> 一般把进程的状态分成下列几种: <BR> <BR> 运行态:进程随时可以执行 <BR> <BR> 睡眠:由于进程缺少某些必要的资源,所以陷入了挂起的状态,只有得到某个信号才 <BR>能继续运行 <BR> <BR> 阻止:由于某个原因,系统向进程发出了一个阻止信号,于是进程暂时停止运行,直 <BR>到接受到一个“继续运行”的信号才可以继续。 <BR> <BR> 僵尸:进程本来应该已经死亡,但是由于某种原因,进程占用的id号还没有被释放。 <BR> <BR> 为了显示系统中的所有进程,可以使用ps -aux命令,例如,下面是一个例子: <BR> <BR> USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND <BR> <BR> root 1 0.1 0.1 1104 368 ? S 14:34 0:05 init [3] <BR> <BR> root 2 0.1 0.0 0 0 ? SW 14:34 0:05 [kflushd] <BR> <BR> root 3 0.0 0.0 0 0 ? SW 14:34 0:03 [kupdate] <BR> <BR> root 4 0.0 0.0 0 0 ? SW 14:34 0:00 [kpiod] <BR> <BR> root 5 0.2 0.0 0 0 ? SW 14:34 0:08 [kswapd] <BR> <BR> bin 358 0.0 0.1 1196 288 ? S 14:36 0:00 portmap <BR> <BR> root 413 0.0 0.0 1156 180 ? S 14:36 0:00 syslogd -m <BR>0 <BR> <BR> root 424 0.0 0.0 1448 0 ? SW 14:36 0:00 [klogd] <BR> <BR> daemon 440 0.0 0.1 1128 296 ? S 14:36 0:00 /usr/sbin/a <BR>td <BR> <BR> root 456 0.0 0.0 1304 188 ? S 14:36 0:00 crond <BR> <BR> root 476 0.0 0.1 1124 436 ? S 14:36 0:00 inetd <BR> <BR> root 492 0.0 0.1 1176 436 ? S 14:36 0:00 lpd <BR> <BR> root 521 0.0 0.1 2104 284 ? S 14:36 0:00 sendmail: a <BR>ccept$ <BR> <BR> root 538 0.0 0.1 1144 384 ? S 14:36 0:00 gpm -t ps/2 <BR> <BR> root 554 0.0 0.0 2560 68 ? S 14:36 0:00 httpd <BR> <BR> root 744 0.0 0.4 2216 1100 pts/0 S 14:59 0:00 login -wang <BR>hy$ <BR> <BR> wanghy 745 0.0 0.3 1744 980 pts/0 S 14:59 0:00 -bash <BR> <BR> root 815 3.2 0.4 1656 1088 tty1 S 15:26 0:26 ncftp <BR> <BR> wanghy 827 0.0 0.3 2680 968 pts/0 R 15:40 0:00 ps -aux <BR> <BR> root 845 0.0 0.3 1576 856 pts/0 T 15:48 0:00 vi <BR> <BR> 第一栏里给出的是进程的拥有者。不过这里有一些微妙的事情,进程有四个跟拥有者 <BR>相关的数值,分别是uid,gid和euid、egid。后两者是进程执行时使用的“实际”身份, <BR>它们通常和uid与gid相同,然而对于一个setuid或者setgid程序,这里将显示进程的实 <BR>际使用的权限。 <BR> <BR> 第二栏的数值是进程的唯一pid号,或者进程标志符,操作系统用这个数字来标出进程 <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -