精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>电脑技术>>● FreeBSD>>网络书籍>>《FreeBSD使用大全》>>FreeBSD连载(26):进程的权限

主题:FreeBSD连载(26):进程的权限
发信人: Hopper()
整理人: hahalee(2000-02-28 20:01:55), 站内信件
http://www.sina.com.cn 1999年11月28日 18:31 王波

进程的权限
  由于FreeBSD是多用户系统,因此进程必须要受到权限的控制和保护。出于安
全性的考虑,一个用户不可能杀死其他用户启动的进程,一个进程也不能非法存
取其他用户的文件数据。只有超级用户和超级用户启动的进程才有最大的权限,
普通进程就只与进程的执行者相关,只具有这个用户的权限。

  一些情况下(特别是执行系统维护任务时),要求普通用户也能完成特殊权
限的任务,那么就必须在进程执行过程中改变进程的身份。改变进程的身份则必
须同时具备两个要求:程序文件本身具有SetUID或SetGID属性,同时程序中需要
相应调用setuid()或setgid()系统调用,这两个系统调用能够检查文件的属性,
并完成更改进程权限的操作。

  通常只有系统程序才需要利用这两个属性,例如系统程序su允许普通用户成
为root用户,就使用的是这个能力。 

$ ls -l a*
-rwxr-xr-x   1 user  wheel  3212 Dec  4 12:36 a1
-rwxr-xr-x   1 user  wheel  3212 Dec  4 12:36 a2
$ chmod u+s a1
$ ls -l a*
-rwsr-xr-x   1 user  wheel  3212 Dec  4 12:36 a1
-rwxr-xr-x   1 user  wheel  3212 Dec  4 12:36 a2
$ chmod g+s a2
$ ls -l a*
-rwsr-xr-x   1 user  wheel  3212 Dec  4 12:36 a1
-rwxr-sr-x   1 user  wheel  3212 Dec  4 12:36 a2
 
 

  上面第一个chmod(chmod u+s a.out)为a.out增加设置属主身份权限,然后
列表中对应属主的执行权限位的 “x” 标志将改变为 “s” (文件属性显示为
rwsr-xr-x)。第二个c hmod (chmod g+s a.out)为a.out增加设置组身份权限
,则列表中对应组的执行权限位的 “x ” 标志将改变为 “s” (文件属性显示
为rwxr-sr-x)。同样,SetUID和SetGID 属性也都有相应的八进制表示方式,Se
tUID为04000,后面的三个八进制位属于文件的读写访问属性设置,相应S etGID
为02000,它们两个属性位处于读写属性位之前。下面是一个更改属性设置的例子
: 

# ls -l /bin/ps
-r-xr-sr-x  1 bin  kmem 163840 May  6 06:02 /bin/ps
# chmod a=r /bin/ps
# su user
$ ps
bash: ps: Permission denied
$ ^D
# chmod a+x /bin/ps
# su user
$ ps
ps: /dev/mem: Permission denied
$ ^D
# chmod g+s /bin/ps
# su user
$ ps
  PID  TT  STAT      TIME COMMAND
  226  p2  S      0:00.56 bash
  239  p2  R+     0:00.02 ps
$
 
 

  第一次以user身份执行ps时,ps的文件属性被改为对所有用户只有读权限,
因此不能执行,shell报告 Permission denied;第二次以user身份执行ps时,p
s报告不能打开/dev/mem文件,这是因为普通用户无权存取内存映象文件。而第三
次执行ps时,由于设置了setgid位,和kmem同组的进程就能够打开 /dev/mem文件
,从而正确执行了ps程序。

  具有SetUID或SetGID属性的程序,能够在进程执行中调用系统调用setuid()
或setgid() ,调用成功后这个进程就具有了程序文件属主和组的权限,就可以完
成以前改变身份之前不能完成的任务。因为通过它们程序可以改变进程的用户标
识,绕过系统的权限设置,因此这两个属性对于系统安全非常重要。尤其是属于
root的文件,并设置了SetUID属性的程序,更是系统安全中值得注意的地方。为
了保证系统安全,必须保证没有非法的SetUID或 SetGID程序的存在,通常管理员
可以使用find命令来完成这个任务,例如查找具有SetUID的程序,则执行:

# find / -perm 4000 -print
 
 

未完,待续。。。  



--
小多子:你知道我们佟家百年不衰的道理么?
        那就是,不要一条路走到黑!

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.190.123]

[关闭][返回]