簡體   English   中英

在 bash 腳本中使用 sudo:權限被拒絕

[英]Using sudo inside a bash script: permission denied

這是我的第一個真正的 bash 腳本,稱為 makevhost,當我嘗試使用 sudo 執行腳本中的命令時遇到權限錯誤。 站點名稱作為參數提供給 CLI 中的腳本調用。 該文件是可執行的,並且它所在的 bin 目錄被添加到 $PATH。

這個概念很簡單:它在我的 apache 開發服務器(Windows 主機上的 Debian 11 VM)上為網站創建目錄和示例模板,然后創建虛擬主機文件並重新啟動服務器。 我已經嘗試了這里的所有建議,其中大部分我發現在許多網站和論壇上重復出現。

當我運行腳本時,它似乎運行良好,直到第 31 行,我收到“Permission Denied”錯誤。 我在第 43 行遇到另一個錯誤,但權限錯誤是我現在正在處理的問題。

這是我的代碼:

#!/bin/bash

if mkdir -p /var/www/"$1"/public_html; then
    echo "Creating site directories ..."
    cd /var/www/"$1"/public_html
    mkdir style images js
    chown -R $USER:$USER /var/www/"$1"
else
    echo "Could not create site directories"
    exit
fi

echo "Creating index.html and style.css"
cat <<- EOF > index.html
<!DOCTYPE html>
<html lang="en-us">
<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" href="style/style.css"></link>
</head>
<body>

</body>
</html>
EOF

touch style/style.css
echo "Site files created"

sudo cat <<- EOF > /etc/apache2/sites-available/"$1".com.conf
<VirtualHost *:8080>
    ServerAdmin eric@sabresong.com
    ServerName sabresong.local
    ServerAlias "$1"
    DocumentRoot /var/www/"$1"/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
EOF
echo "Virtual Host File created."

if [ sudo a2ensite "$1".com.conf ]; then
    echo "$1 enabled"
    sudo a2dissite 000-default.conf
    echo "Restarting Apache"
    sudo systemctl restart apache2
    echo "Finished!"
else
    echo 'WARNING! Could not enable new site "$1"'
fi

我的 /etc/sudoers.d/eric 只有一行: eric ALL=(root) NOPASSWD: /home/eric/bin/

在 visudo 中,我添加了以下內容: eric ALL=(ALL:ALL) NOPASSWD: /home/eric/bin/我還嘗試了 ALL=(ALL) 的同一行

我知道使用 NOPASSWD 不是最佳實踐,但我是唯一可以訪問這台機器的人,而且我還沒有弄清楚如何將 sudo 密碼用於腳本中的特定行,但不適用於其他行,所以我走這條路,主要是為了學習經驗。

我認為您實際上必須使用 sudo 命令運行腳本。 所以:

sudo ./makevhost

暫無
暫無

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

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