• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

liunx-用户-ID

linux 搞代码 3年前 (2022-03-03) 26次浏览 已收录 0个评论
文章目录[隐藏]

liunx 用户 ID

组 ID 同 用户 ID,不多赘述。

理论用户 ID(real user ID)

以后用户登录 shell 时所应用的的用户 ID。

无效用户 ID(effective user ID)

无效用户 ID 用于一些零碎调用权限的判断,比方,文件读/写。(在 linux 上文件关上权限另外算的,要判断文件系统用户 ID)

  • 个别情景:
    用户启动过程,主动设置 无效用户 ID = 理论用户 ID
  • 可执行文件设置了 set-user-ID 位:
  1. 可执行文件指 linux 下为 ELF 格局的可执行文件,不含相似 bash 可执行文件,能够应用 file filename 查看文件的类型。

    $ file  shell_test/test
    shell_test/test: Bourne-Again shell script, ASCII text executable
    
    $ file  /usr/bin/passwd
    /usr/bin/passwd: setuid ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=191e5ed22855b6344cf01659f8ae7b7cf4767798, for GNU/Linux 3.2.0, stripped
  2. set-user-ID 位可应用 chmod 命令设置,设置之后,启动该可执行文件,无效用户 ID 为该文件的属主,比方:文件A属于用户甲,设置了 set-user-ID 位,用户乙执行文件A,对应过程的无效用户 ID 是乙。

    # 设置 set-user-ID 位前察看
    $ ls -l copy
    -rwxrwxr-x 1 XXX XXX 28200 Jun  4 19:46 copy
    
    # 设置 set-user-ID 位
    $ chmod u+s copy
    
    # 设置 set-user-ID 位后察看
    # 用户的可执行权限位,由 x 变为 s
    $ ls -l copy
    -rwsrwxr-x 1 XXX XXX 28200 Jun  4 19:46 copy
  3. tlpi 的 9.7 节介绍的零碎调用能够扭转无效用户 ID。

保留的 set-user-ID(saved set-user-ID)

最开始无效用户 ID 的正本。过程开始执行会先依据,set-user-ID 位确认无效用户 ID,再将之保留为 saved set-user-ID。过程执行过程中,无效用户 ID 可能扭转(后面有提及),saved set-user-ID 不会变。

文件系统用户 ID(file-system user ID)

区别于无效用户 ID,文件系统用户 ID 用于判断是否有文件关上、批改文件属主、扭转文件权限位的权限。

  1. 个别情景:文件系统用户 ID 追随文件无效用户 ID 变动。
  2. 历史遗留:特权过程想显示调用 setfsuid() 批改文件系统用户 ID。

文件系统用户 ID 历史遗留问题的再阐明

须要文件系统用户 ID 的非凡场景形容:甲过程向乙过程发送信号;丙过程是一个特权过程;丙须要批改本人的用户 ID 用于查看过程乙对应可执行文件的信息,但又不心愿收到甲过程发送给乙过程的信号。

依据 kill(2) 的 man page 形容,整顿不同 linux 版本的判断信号是否可发送的根据(形容的是个别过程):

  • 1.0 – 1.2.2:发送方的无效用户 ID = 接管方无效用户 ID;或者发送方的理论用户 ID = 接管方理论用户 ID。
  • 1.2.3 – 1.3.77:发送方的无效用户 ID = 接管方无效用户 ID或理论用户 ID。
  • 1.3.78 – 至今:发送方的无效用户 ID 或理论用户 ID = 接管方保留的设置用户 ID(saved set-user-ID)或理论用户 ID

即,对于 1.3.78 版本之前的 linux 内核,为了合乎后面形容的非凡场景(丙过程须要查看乙过程对应文件的属主信息,又不想受到发送给乙的信号),linux 设计了文件系统用户 ID,把局部文件权限独立进去。

对于 1.3.78 及当前版本的 linux 内核,只须要将丙过程的无效用户 ID 设置为乙过程的无效用户 ID,就能够实现既能查看其对应文件的属主信息,又收不到多余的信号,也就不必设置文件系统用户 ID ,所以说文件系统用户 ID 就成了一个零碎遗留问题,但为了兼容以前的代码,当初的文件系统用户 ID 追随无效用户 ID 变动。

tlpi 9.5 节中也举了一个相似甲给乙发送信号的例子,但我认为它的例子中的形容实际上跟它后面的定义是自圆其说的。我举的例子是从 setfsuid(2) man page 中找到的,我认为比拟精确形容了对应的情景。

参考

  • linux/unix 零碎编程手册(tlpi) 第9章落第20章第5节:https://book.douban.com/subje…
  • setfsuid(2):https://man7.org/linux/man-pa…
  • kill(2):https://man7.org/linux/man-pa…

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:liunx-用户-ID

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址