讨论unix进程的设置用户ID,有效用户ID,保存设置ID,文件的设置位

来源:互联网 发布:淘宝店家精选怎么上 编辑:程序博客网 时间:2024/05/16 11:11
目的:
       讨论unix进程的设置用户ID,有效用户ID,保存设置ID,文件的设置位在进程权限上的问题。
基础知识:
       进程关联ID:
  每个进程运行时都附带有用户ID和组ID属性,当对一个文件或设备进行操作时,内核会用进程的有效或实际用户(或组)ID去测试这个文件的3组权限位(用户,组,其他),当为真时才执行,否则保存:
  1.实际用户ID,组ID:执行这个程序的用户和其所在的组
  2.有效用户ID,组ID:操作文件时,内核用于测试权限的用户和组。通常和实际用户ID和组ID一致,但可以通过stat.st_uid、stat.st_gid进行改变。
  3.保存的设置用户ID,组ID:该进程调用exec()函数族传递给新进程的有效用户ID和组ID,是当前的有效用户ID和组ID的一个副本。
  说明:
    1.通常进程操作文件时,内核都用有效用户ID(或组ID)去测试文件的相应权限位。
    2.对于access()调用,内核将使用实际用户ID(或组ID)去测试权限位。
    **3.当可执行文件(程序)设置了设置位后,其保存设置用户ID和组ID将被设置成所有者用户ID和组ID,一旦被exec()函数调用,即执行,那进程的有效用户ID和组ID将被设置成保存设置用户ID和组ID,即可执行文件的用户ID和组ID,如果不是进程的实际用户不是ROOT用户,则权限可以被增加或减少(非常重要的运用)**
    为了说明设置位,用passwd命令解释:
    #ls /usr/bin/passwd /etc/passwd -l
    -rw-r--r-- 1 root root  1008 2013-04-03 14:00 /etc/passwd
    -rwsr-xr-x 1 root root 37140 2011-02-15 06:11 /usr/bin/passwd
    众所周知,passwd命令是同伙改变/etc/passwd中相应用户的密码字段来实现。观察/etc/passwd可以知道,只有root用户才有写的权限。
    那么其他普通用户为何也能改变其内容呢?通过/usr/bin/passwd的权限可以看出该文件被设置了设置用户ID位(设置位),那么在其他用
    户调用passwd时,该进程在修改/etc/passwd的内容时,它的有效用户ID被设置成/etc/passwd的保存的设置用户ID(root),经过内核测试后,
    确认可以写入内容,故该进程虽然有其他普通用户调用,但它可以改变了/etc/passwd的内容,从而改变它自己的密码。
      以上解释对组ID也实用。
原创粉丝点击