Execute Shell script ohne sudo-Passwort
Ich habe ein shell-script wie unten angegeben.
#!/bin/bash
sudo -u testuser -H sh -c "
mkdir /usr/local/testdir;
if [ $? -eq 0 ];then
echo "Successfull";
else
echo "Unsuccessfull";
fi
"
Habe ich Privilegien an Benutzer testuser ausführen, shell script mit sudo, aber ohne Passwort gefragt.Für diese füge ich die folgende Zeile in /etc/sudoers
Datei,
testuser ALL=(ALL) NOPASSWD: ALL
Und es funktioniert, könnte ich ausführen von Befehlen mit sudo, aber ohne Passwort gefragt. Aber die oben genannten shell Skript immer geben, setzen ass folgt,
mkdir: cannot create directory `/usr/local/testdir': Permission denied
Successfull
Und es ist nicht zu schaffen-Verzeichnis testdir
innen /usr/local
. Sie beraten mich, was für änderungen soll ich tun müssen, um zu arbeiten, dieses Skript in Ordnung.
Dank.
- ok, also so weit wie ich sehen kann, das hat nichts zu tun mit sudo. Einfach auf die der Benutzer nicht das Recht, das Verzeichnis zu erstellen. Sind Sie vertraut mit unix-Datei Berechtigungen?
- Aber, kann ich das Verzeichnis erstellen mit Befehl
sudo mkdir /usr/local/testdir
, das ist ohne Aufforderung Passwort ! - das root-sudo.
- Beachten Sie, dass Sie sollten beschränken
NOPASSWD
sudo-Zugriff auf einzelne Skripte nur, da sonst jeder Zugriff auf das Benutzerkonto im Grunde wird root... - diese Frage illustriert den Unterschied zwischen
sudo make-me-a-sandwich
vssudo -u honey make-me-a-sandwich
; die erstere wird immer erfolgreich; das letztere kann oder nicht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zwei Probleme:
1.) Sie sagte:
was bedeutet: führen Sie den Befehl als
testuser
, und er nicht über die Berechtigung zum schreiben in die/usr/local
Sie daher immerpermission denied
.Beim entfernen der
-u testuser
ist, wird der Befehl als root ausgeführt (als Standard) (ohne Passwort für dietestuser
) und das Verzeichnis erstellen.Scheint, Sie einfach nur missverstehen, wie die
sudo
und/etc/sudoers
funktioniert. Die-u user
bedeuten2.) zweites problem der
Successfull
Nachricht.Bist du mit Anführungszeichen für
sh -c
. DieVariable expansion
erfolgt VOR diesh -c
selbst beginnt. So verwenden Sie einfache Anführungszeichen, und erhalten die richtigeUnsuccessfull
Nachricht:und verwenden Sie die nächste als Lösung: