簡體   English   中英

為什么Mac上的root用戶執行用戶發出的ps命令?

[英]Why is the ps command issued by a user performed by root user on MacOS?

我最近注意到,當我在術語(Terminal,iTerm等)中運行ps命令時,該命令由root用戶運行。

machine:~ vincent$ ps ux | grep ps
vincent  2846   0,2  0,0  4277992    848 s001  S+    2:10     0:00.00 grep ps
root     2845   0,2  0,0  4287948   1120 s001  R+    2:10     0:00.00 ps ux

在以管理員身份和沒有管理員權限的普通用戶鍵入命令時,都會發生這種情況,這會影響優勝美地和High Sierra(可能會影響許多其他系統版本)。

這是為什么?

是否有其他命令受此行為影響?

我懷疑這樣做是通過setuid權限位完成的,以便允許__proc_info()<sys/libproc.h>函數使用的syscall)訪問其他進程的地址空間,以便讀出例如可執行文件的路徑。 (它沒有存儲在內核中-實際上是從進程的argv[0]讀取的;是的,這的確意味着它可以被偽造。)

您總是可以嘗試制作ps二進制文件的副本(或從源代碼進行編譯),刪除setuid位,以非特權用戶身份運行它,然后看看會發生什么。

如果查看ps文件的權限,您會注意到SUID位為ON(請在權限標志中檢出“ s”)。

ls -ltr /bin/ps
-rwsr-xr-x  1 root  wheel  51280 Dec  1  2017 /bin/ps

這意味着從該文件生成的進程獲得文件所有者的許可,而不是其父進程(可以是您鍵入命令的bash終端)的許可,並且該用戶是root。

這就是sudo和許多其他系統命令的工作方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM