
我正在嘗試執行這個命令:
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
,因此您不會透過第二個更具限制性的條目獲得任何內容。)