Am nevoie de ajutor cu a sudo -A
comandă într-un script shell. Opțiunea -A este pentru AskPass. In conformitate cu pagina de manual sudo:
În mod normal, dacă sudo necesită o parolă, o va citi din cea a utilizatorului
Terminal. Dacă este specificată opțiunea -A (askpass), un (eventual
grafic) se execută programul de ajutor pentru a citi parola utilizatorului și
trimite parola la ieșirea standard. Dacă SUDO_ASKPASS
variabila de mediu este setată, specifică calea către helper
program.
Sunt interesat de AskPass pentru că rulez apache2 (v 2.4.41) pe un server Ubuntu 16.04. Pagina web Apache trebuie să execute un script shell. Pagina web execută scriptul ca utilizator www-data
. Dar scriptul trebuie să ruleze un alt program care poate fi rulat doar ca utilizator utilizator1
. Deci am nevoie sudo --AskPass
deci acel utilizator www-data
poate rula utilizatorul utilizator1
codul lui.
Configurația mea: Urmând exemple precum Aici și Aici, am scris aceste două scenarii în /var/www/html/
director:
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$
(Grup TestUtilizatori
include utilizatorii www-data
și utilizator1
.) Micul passwdScript.sh
scriptul este menit să trimită parola utilizatorului 1 la STD OUT:
user1@myUbuntu:/var/www/html$
user1@myUbuntu:/var/www/html$ mai mult passwdScript.sh
#!/bin/sh
ecou 'myPassword'
user1@myUbuntu:/var/www/html$
user1@myUbuntu:/var/www/html$ ./passwdScript.sh
parola mea
user1@myUbuntu:/var/www/html$
(Da, știu că acest lucru este foarte nesigur, dar voi fi singura persoană care folosește acest server. Sunt îngrijorat doar de funcționalitate.)
Bine: Acum că sunt configurate cele de mai sus, iată-mi webpageScript.sh
script, care este menit să apeleze sudo --AskPass
:
echo „Scriptul rulează”.
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 „S-a terminat de rulat scriptul”.
Iată rezultatul mai puțin impresionant:
user1@myUbuntu:/var/www/html$
user1@myUbuntu:/var/www/html$ sudo -u www-data ./webpageScript.sh
Scriptul rulează.
Testare :: /var/www/html/passwdScript.sh
/home/user1/path/to/other/directory
Îmi pare rău, mai încearcă.
Îmi pare rău, mai încearcă.
sudo: 3 încercări incorecte de parolă
S-a terminat de rulat scriptul.
user1@myUbuntu:/var/www/html$
user1@myUbuntu:/var/www/html$
Deci, evident sudo --askpass
comanda nu reușește să accepte utilizator1
parola lui. Toată ziua am încercat variante ale acelei comenzi. Vede cineva ce greșesc?