在 Ubuntu / Apache2 服务器上使用 'sudo --askpass' 的帮助

在 Ubuntu / Apache2 服务器上使用 'sudo --askpass' 的帮助

我需要有关sudo -Ashell 脚本中命令的帮助。-A 选项用于 AskPass。根据sudo 手册页

通常,如果 sudo 需要密码,它会从用户的终端读取密码。如果指定了 -A(askpass)选项,则会执行(可能是图形化的)辅助程序来读取用户的密码并将密码输出到标准输出。如果设置了 SUDO_ASKPASS 环境变量,它会指定辅助程序的路径。

我对 AskPass 感兴趣,因为我在 Ubuntu 16.04 服务器上运行 apache2 (v 2.4.41)。Apache 网页需要执行一个 shell 脚本。网页以用户身份执行该脚本www-data。但脚本需要运行另一个只能以用户身份运行的程序user1。所以我需要sudo --AskPass让用户www-data可以运行用户user1的代码。

我的设置:按照以下示例这里这里,我在目录中写了这两个脚本/var/www/html/

user1@myUbuntu:/var/www/html$ ls -l
-rwxr-xr-x 1   www-data   TestUsers    29 Feb 28 11:34 passwdScript.sh
-rwxrwxr-x 1   www-data   TestUsers  2009 Feb 28 11:32 webpageScript.sh
user1@myUbuntu:/var/www/html$

(组TestUsers包括用户www-datauser1。)这个小passwdScript.sh脚本用于将用户 1 的密码发送到 STD OUT:

user1@myUbuntu:/var/www/html$
user1@myUbuntu:/var/www/html$ more passwdScript.sh
#!/bin/sh
echo 'myPassword'
user1@myUbuntu:/var/www/html$
user1@myUbuntu:/var/www/html$ ./passwdScript.sh
myPassword
user1@myUbuntu:/var/www/html$

(是的,我知道这非常不安全,但我将是唯一使用该服务器的人。我只担心功能。)

好的:现在已经设置好了上述内容,这是我的webpageScript.sh脚本,它旨在调用sudo --AskPass

echo "Script is running."
export SUDO_ASKPASS="/var/www/html/passwdScript.sh"
echo "Test :: $SUDO_ASKPASS"
cd /home/user1/path/to/other/directory
pwd
sudo -u user1 --askpass $SUDO_ASKPASS 'runUser1Script.exe'
echo "Finished running the script."

以下是不太令人印象深刻的输出:

user1@myUbuntu:/var/www/html$
user1@myUbuntu:/var/www/html$ sudo -u www-data ./webpageScript.sh
Script is running.
Test :: /var/www/html/passwdScript.sh
/home/user1/path/to/other/directory
Sorry, try again.
Sorry, try again.
sudo: 3 incorrect password attempts
Finished running the script.
user1@myUbuntu:/var/www/html$
user1@myUbuntu:/var/www/html$

因此,显然该sudo --askpass命令无法接受user1的密码。我整天都在尝试该命令的变体。有人知道我做错了什么吗?

相关内容