簡體   English   中英

Shell腳本和sudo

[英]Shell script and sudo

在我的shell腳本中,我有以下內容:

export PATH=$PATH:/home/$USER/somedir

假設我以Mike用戶身份登錄。 我需要以root用戶身份執行shell腳本,因此我以sudo filename.sh身份運行它,因此$ USER在這種情況下成為我的路徑中的root用戶。

我希望它是運行腳本的用戶的名稱,即mike而不是root。 有沒有辦法做到這一點?

謝謝

必須使用/home/$USER ,還是$HOME可以解決問題? IIRC, sudo不會覆蓋$HOME的值。

使用$SUDO_USER (如果您堅持直接使用$USER ,請如下所示設置其值):

$ cat script.sh
#!/bin/bash

if [ "$SUDO_USER" != "" ]; then
  USER=$SUDO_USER;
fi

export PATH=$PATH:/home/$USER/somedir

或使用$USER作為腳本的第一個參數作弊(錯誤檢查是讀者的一項練習):

$ cat script.sh
#!/bin/bash
USER=$1

export PATH=$PATH:/home/$USER/somedir

然后:

$ sudo ./script.sh $USER

或使用Chris Jester-Young建議的$HOME 您可以使用bash刪除“ / home /”前綴,但這將是一個丑陋的破解。

如果您願意使用su而不是sudo ,則可以

su -cp filename.sh

在保留環境的同時執行命令。

您可以嘗試使用$ UID,該$ UID仍應設置為用戶的真實ID號,並以此為基礎從密碼數據庫中檢索其名稱。

如果需要保護環境,可以使用sudo的-E選項。 但是它需要一些配置和安全策略...如果Chris JY提出的$ HOME解決方案因為更簡單而不適用,則適用。

我的2美分

sudo是不同形式的“ root”用戶。 如果任何用戶具有sudo特權,則意味着他具有用戶“ root”可用的管理員權限。 也就是說,使用sudo不會將用戶更改為root。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM