Linux 查詢 sudo PID 的 UID

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 是哪個使用者執行的

  1. 假設 PID 是 1234 ( ps aux | grep vim 找到 PID)
  2. sudo cat /proc/1234/loginuid # 1001
  3. id 1001 # 或者 id -nu 1001 # 直接印出 username
    • uid=1001(username) gid=1001(user-group) groups=1001(username),27(sudo)
  4. 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 進來執行的

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料