Shell

如何執行涉及使用 sudo 重定向或管道的命令?

  • May 20, 2020

我正在嘗試遵循我認為使用 sudo 而不是 root 帳戶的最佳做法。

我正在執行一個簡單的 concat 文件操作,例如:

sudo echo 'clock_hctosys="YES"' >> /etc/conf.d/hwclock

對於以普通使用者身份執行的“>>”右側而言,這將失敗。添加額外的 sudos 也會失敗(預期的行為,因為管道到 sudo 命令而不是文件)。

範例僅此而已,但已在 root 帳戶下進行了驗證和測試。

您可以以 root 身份呼叫新的 shell:

sudo sh -c 'echo clock_hctosys=\"YES\" >> /etc/conf.d/hwclock'

您也可以只提升一個程序以寫入文件:

sudo tee -a /etc/conf.d/hwclock > /dev/null << EOF
clock_hctosys="YES"
EOF

另一個同樣安全的選擇是使用sudo-i開關以 root 身份登錄:

$ sudo -i
# echo clock_hctosys=\"YES\" >> /etc/conf.d/hwclock'

這仍然遵循最佳實踐規則,因為 root 帳戶實際上並未啟用,但可以讓您安全地以 root 身份執行操作。來自man sudo

The -i (simulate initial login) option runs the shell
   specified by the password database entry of the target user
   as a login shell.  This means that login-specific resource
   files such as .profile or .login will be read by the shell.
   If a command is specified, it is passed to the shell for
   execution via the shell's -c option.  If no command is
   specified, an interactive shell is executed. 

引用自:https://unix.stackexchange.com/questions/106663