[英]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.