[英]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.