Linux
程序可以告訴它是在 sudo 下執行的嗎?
我有一個程序,如果它在“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 身份執行的。即使這樣,它也只使用它來更改一些有用的文本。