Linux 要查詢某個 Process ID (PID) 的 User (UID) 是誰?
ps aux | grep $pid、/proc/$PID/status,都會拿到 root 或 sudo 的 id,要怎麼找到是哪個使用者執行的呢?
- 註:想要找到此 Process 是誰執行的,看到 sudo、root 都沒救,需要找到最原始的執行者
Linux 查詢 sudo PID 的 UID
由 /proc/$PID/loginuid 可以看到此 Porcess ID 是哪個使用者執行的
- 假設 PID 是 1234 ( ps aux | grep vim 找到 PID)
- sudo cat /proc/1234/loginuid # 1001
- id 1001 # 或者 id -nu 1001 # 直接印出 username
- uid=1001(username) gid=1001(user-group) groups=1001(username),27(sudo)
- id -nu `cat /proc/1234/loginuid` # username
- username
寫 Bash function pid-username() 來查詢
pid-username() { if [ -n "$1" ]; then # $1 not null id -nu "$(</proc/"$1"/loginuid)" fi }
使用 pid-username() Function
- pid-username $pid
- username
若依照上述方法做,結果看到還是其它 id 或 root,代表可能使用下述:
- ssh machine-ip 'do something' # 遠端執行
所以會需要搭配 netstat -tlnpa | grep sshd,再去遠端的那台機器,用上述方法找人
若有大量傳輸,就可以透過 netstat -tlnpa 這語法的 第二個欄位(Recv-Q),那欄位有數字的就是一直在接收資料,藉此可以找到是哪個 IP 在大量存取,連去那台機器再來找人~
- 註:上述作法是透過 pstree | grep command 找到是 sshd 進來執行的