sudo ohne passworteingabe?

öhm, joa^^

gibts ne möglichkeit einem Benutzer zu erlauben Befehle als anderer User auszuführen ohne dass er dass er das Passwort eingeben muss?
also
sudo -u user [befehl]
bzw
su - user -c "[befehl]"

Grund ist, ich bin mal wieder am Basteln eines webinterfaces, allerdings möchte ich den Apache aus Sicherheitsgründen nur ungern als der betroffene User laufen lassen...

Ich habs mit expect versucht, allerdings funktioniert das auch nur wenn es grad mal lust hat...
Ein oder Zwei mal hintereinander funktioniert es, dann schickt es beim Passwortprompt das Passwort nichtmehr ab, sonden schreibt es auf den Bildschirm und bleibt hängen...
hier mal das script
Code:
#!/usr/bin/expect

spawn "su-script.sh user [befehl]'"
expect "password:"
send "[passwort]"
send "\r"
expect eof
Code:
#!/bin/bash
su - $1 -c "$2"

Der User sollte wenn möglich nur scripte in einem bestimmten Ordner als anderer User ausführen können...

MFG - keks
 
bei sudo -u benötigt man das userpw, bei su - user -c das root-pw^^
naja egal...

Wichtiger ist, dass SUID nur bei Binärdateien funktioniert, nicht aber bei anderen Scripten...
Gibt es noch eine andere Möglichkeit?
 
Hallo,
was passiert denn, wenn der User gar kein Passwort hat?

Sonst ein Programm basteln, ähnlich wie sudo. Es leitet Befehle die als Argument übergeben wurden an das System weiter, und bei dem Prog. setzt du dann eben die SUID des entsprächenden Users.

Musst ja dann einfach nur system() aufrufen und dabei das übergebene Argument weiterleiten.
 
Oder einfach mal RTFM.

Code:
%root   ALL=(ALL)       NOPASSWD: ALL

^^^ Das kleine Sniplet da eingetragen in /etc/sudoers gibt allen Mitgliedern der Gruppe 'root' Zugang zu root Rechten ohne dabei nach einem Passwort zu fragen.
 
Original von Moe
Oder einfach mal RTFM.

Code:
%root   ALL=(ALL)       NOPASSWD: ALL

^^^ Das kleine Sniplet da eingetragen in /etc/sudoers gibt allen Mitgliedern der Gruppe 'root' Zugang zu root Rechten ohne dabei nach einem Passwort zu fragen.

Genau das soll aber nicht sein, es sollen nur bestimmte Scripte von bestimmten usern ausgeführt werden dürfen (scheiß satzbau xD).

SUID wär dafür genau richtig, funktioniert ja aber leider nur mit Binär-Dateien...

Ich habs mal mit 2 versionen die ich bei Google aufgetrieben hab versucht:
[username] ALL=(ALL) NOPASSWD: /pfad/zum/script
[username] ALL=NOPASSWD: /pfad/zum/script

jedoch bekomm ich trotzdem eine Passwortabfrage...
Diese Möglichkeit war mein erster Gedanke...


[ EDIT: ]
btw: is dieses Verhalten von expect eigentlich normal?
also dass es nur funktioniert wenn es grad Lust dazu hat?
 
Da du "Pfad zum Skript" geschrieben hast, liegt vermutlich dein Problem darin, daß du auch noch den Interpreter für das Skript zulassen mußt:

Code:
[benutzername] ALL = NOPASSWD: /pfad/zum/skript, /pfad/zum/interpreter

Dein expect-Problem müßtest du bitte etwas genauer erläutern ("macht was es will" ist nicht gerade sehr hilfreich bei der Fehleranalyse) oder einen extra Thread dafür aufmachen.
 
Der Interpreter wäre in dem Falle die bash-shell, es ändert aber nichts am verhalten von sudo...
Die Login-Shell des Users ist übrigens ebenfalls die bash.

@expect-problem

naja, manchmal geht es eben, ander mal nicht...
wie oben im meinem Eröffnungpost beschrieben
 
Dann verwendest du in diesem Skript ja offenbar noch expect. Jedes Programm, das in dem Skript aufgerufen wird, muß (logischerweise) auch zugelassen werden.
 
nein ^^
in diesem script verwende ich kein expect, da das ja nicht funktioniert...
also alles nochmal von vorne:

Ich hab ein Webinterface dass Server unter einem bestimmten user starten/stoppen/... soll geschrieben.
Problem an der Sache ist, dass ich ja logischerweise den Benutzer wechseln muss da der Webserver nicht als der "Server-User" laufen soll.

Mein erster versuch war die sudoers so zu bearbeiten dass der Webserver-User kein Passwot benötigt um die Serverscripte auszuführen.
-> geht net, Passwortabfrage kommt trotzdem

Dann hab ich versucht mit expect was zu bauen
(irgendwo hier im Forum ist ein Threat darüber)
-> expect funktioniert nicht richtig... man kann das expect-script 1 mit Glück 2 mal ausführen und dann bleibt es an der PAsswortabfrage hängen (es schreib das Passwort im Klartext auf den Bildschirm und hängt ab diesem Zeitpunkt)

Das Script dass ausgeführt weden soll ist ein reines Bash-Script.
 
Und dein Webinterface startet die Befehle mit exec() oder system() nehme ich an und startet die Befehle/Skripte auch mit 'sudo befehl'? Expect bekommt auch immer die Daten, die es erwartet (in deinem Fall also nicht mehr als ein simples 'password:' ohne irgendwelchen Text davor oder ein Freizeichen dahinter)?
 
naja da expect " in den Befehlen net besonders mag hab ich ein shellscript geschrieben dass von expect ausgeführt wird (steht ebenfalls oben) expect gibt diesem Script 2 Argument mit, den User und den Befehl.
su-script.sh
Code:
#!/bin/bash
su - $1 -c "$2"
expect-script.exp
Code:
#!
/usr/bin/expect
spawn "/.../su-script.sh [user] [befehl]
expect "Password:"
send "[Passwort]"
send "\r"
expect eof
PHP-Script.php
PHP:
<?php

shell_exec('bash -c "/.../expect-script.exp");

?>

expect ist es auch egal ob ich "Password:", "Password: " oder "word:" schreibe, kommt alles aufs gleiche raus...
Manchmal gehts, manchmal net...


[ EDIT: ]

so funktioniert es jetzt:
/etc/sudoers
Code:
[username] ALL=(root) NOPASSWD: /.../script.sh

der Standartuser von sudo ist doch "root" wieso muss dieser noch extra mitgegeben werden?
 
Zurück
Oben