Linux

程序可以告訴它是在 sudo 下執行的嗎?

  • November 11, 2017

我有一個程序,如果它在“sudo”下執行,它的行為應該不同。有沒有辦法確定它是否在 sudo 下執行?

**更新:**有人問我為什麼要這樣做。在這種情況下,在使用 MacPorts 的 Mac 上會有輸出告訴您剪切和粘貼特定命令。如果 MacPorts 命令使用“sudo”執行,它應該在範例命令中包含 sudo:

$ sudo port selfupdate 
--->  Updating MacPorts base sources using rsync
MacPorts base version 2.2.1 installed,
MacPorts base version 2.2.1 downloaded.
--->  Updating the ports tree
--->  MacPorts base is already the latest version

The ports tree has been updated. To upgrade your installed ports, you should run
 port upgrade outdated

^^^^^^^^^ it would be really sweet if it output "sudo port upgrade outdated" instead.  It would be even better if it just did it for you :-)

是的,程序在 sudo 下執行時設置了 4 個環境變數:

$ sudo env |grep SUDO
SUDO_COMMAND=/usr/bin/env
SUDO_USER=tal
SUDO_UID=501
SUDO_GID=20

請注意,這些可以通過簡單地設置來偽造。不要在任何關鍵的事情上相信他們。

例如:在這個程序中,我們需要告訴使用者執行其他程序。如果目前一個是用 sudo 執行的,那麼另一個也是。

#!/bin/bash

echo 'Thank you for running me.'

if [[ $(id -u) == 0 ]]; then
 if [[ -z "$SUDO_COMMAND" ]]; then
   echo 'Please now run: next_command'
 else
   echo 'Please now run: sudo next_command'
 fi
else  echo 'Error: Sadly you need to run me as root.'
 exit 1
fi

請注意,它只測試 SUDO_* 變數,前提是它可以首先證明它是以 root 身份執行的。即使這樣,它也只使用它來更改一些有用的文本。

引用自:https://serverfault.com/questions/568627