使用 sudo 切換到不同使用者後執行命令

使用 sudo 切換到不同使用者後執行命令

我正在嘗試執行這個命令:

echo hello | sudo su - dp-postgres

但我明白了:

-bash: line 1: hello: command not found

我也嘗試過這個:

sudo su - dp-postgres -c 'echo hello'

但這是在詢問我目前用戶的密碼。

我需要切換到dp-postgres,然後以dp-postgres使用者身分執行任何命令。

答案1

sudo命令允許以另一個用戶身份執行命令。預設情況下,它會要求當前使用者密碼,這是正常行為(顯然,使用者還必須具有sudo使用權限)。如果你想阻止詢問密碼的行為,你需要更改你的/etc/sudoers檔案並使用NOPASSWD選項,該選項將允許你執行 sudo 而不會被要求輸入密碼。

對於您的命令,您可以執行以下操作:

sudo su - dp-postgres <<-EOF
  echo hello
EOF

你的第二個命令也應該有效:

sudo su - dp-postgres -c 'echo hello'

這是一個例子:

$ sudo su - -c 'echo hello; id'
hello
uid=0(root) gid=0(root) groups=0(root)

我這邊不需要密碼,因為初始使用者在sudo群組中並且具有類似的內容:

%sudo   ALL=(ALL:ALL) NOPASSWD:ALL

/etc/sudoers文件中。

答案2

正如其他地方所寫的,該sudo命令允許適當授權的使用者以其他人的身分執行命令。預設情況下,這其他人是root,但(需授權)它可以是任何使用者。另外,預設sudo會詢問目前使用者的密碼。

如果您想以使用者echo hello身分執行該命令dp-postgres,可以這樣做:

sudo -u dp-postgres echo hello

如果您需要設定登入環境,請包括-i

sudo -iu dp-postgres echo hello

請注意,這兩個範例不會先變更為用戶root,然後變更為用戶dp-postgres,因此您可以選擇設定自訂sudoers條目以允許存取該dp-postgres用戶,但不允許存取root。對於root應限制和/或管理存取的多用戶環境來說,這是一個很好的解決方案。 (但是,我注意到您已經有權訪問root,因此您不會透過第二個更具限制性的條目獲得任何內容。)

相關內容