Bash & 'su'-Skript mit dem Fehler "Standard in muss ein tty sein"

7

Leute, ich habe ein Problem mit einem Bash- Skript, das einen bestimmten Befehl als anderer Benutzer ausführt .

Der Hintergrund: Unter einer Linux-Box (CentOS) ist das Skript recht einfach und startet die Hudson-CI- Anwendung.

declare -r HOME=/home/hudson
declare -r RUNAS=hudson
declare -r HOME=/home/hudson
declare -r LOG=hudson.log
declare -r PID=hudson.pid
declare -r BINARY=hudson.war

su - ${RUNAS} -c "nohup java -jar ${HOME}/${BINARY} >> ${HOME}/${LOG} 2>&1; echo $! > ${HOME}/${PID}" &

Dies ist die gekürzte Version des Skripts. Wenn das Skript ausgeführt wird, wird es mit "Standard in muss ein tty sein" beendet . Irgendwelche Ideen, was ich falsch machen könnte? Ich habe Dr. Google ausprobiert und alle Ratschläge haben bisher nicht geholfen.

Andere Referenz: Mandriva Linux 'su' Bug

shaond
quelle

Antworten:

12

Versuchen Sie in Ihrer Datei / etc / sudoers, die Zeile "Defaults requireetty" auskommentieren. Dies hat Auswirkungen auf die Sicherheit. Fügen Sie stattdessen die folgende Zeile hinzu:

Defaults:[username] !requiretty

Verwenden Sie zum Bearbeiten dieser Datei unbedingt den Befehl visudo und nicht einen normalen Texteditor.

Eric3
quelle
Sie können Sicherheitsadministratoren auch glücklicher machen, indem Sie den Umfang Ihrer Aufhebung von Einschränkungen einschränken, indem Sie den Benutzer angeben, der einen Befehl ohne tty ausgeben kann. siehe: serverfault.com/questions/111064/…
benvolioT
4
Beides hat bei mir nicht funktioniert.
Cerin
5
Gilt / etc / sudoers nicht für das sudoTool, nicht für coreutils su?
Felipe Alvarez
Warum müssen Sie verwenden visudo? Bitte erweitern Sie
8bitjunkie
1
@ 8bitjunkie Deshalb sollte man visudo unix.stackexchange.com/questions/27594/… verwenden
MadMike