Heidiho,
ich möchte, dass mein Passwortänderungs-CGI ein su $user ausführt und sozusagen das $passwd eingibt, dass es auch vom Webinerface kriegt. Ich versuche dazu folgendes auszuführen:
Python:
os.system('echo '+passwd+'| su '+user+' -c "was_langes"')
bzw. kurz in Bash: $ echo $passwd|su $user -c "was langes"
Aber zu "was_langes" (auch so ein Konstrukt mit passwd drin) kommt das ganze gar nicht erst. Es gibt folgende Meldung:
su: must be run from a terminal
Bei smbpasswd gibts die Option -s, durch die das Programm aufs Terminal verzichtet und von stdin liest. Bei su (und wohl auch passwd) dummerweise nicht. Per ssh/telnet localhost tritt das Problem genau so auf. Weiß jemand Rat?
Für alle Ideen dankbar, Fabian
On Sun, Jun 22, 2003 at 08:17:24PM +0200, Fabian Hänsel wrote:
Heidiho,
Hi Fabian,
Aber zu "was_langes" (auch so ein Konstrukt mit passwd drin) kommt das ganze gar nicht erst. Es gibt folgende Meldung:
su: must be run from a terminal
Yepp, da su die echo Funktion des Terminals auschalten muss, damit nicht jeder User mitlesen kann.
Bei su (und wohl auch passwd)
passwd scheint diese Option auch zu haben (obwohl nicht in der man page erwähnt (hint to Josef :)))
Per ssh/telnet localhost tritt das Problem genau so auf. Weiß jemand Rat?
Schreib dir doch selbst ein kleines C-Programm, das das Passwort von stdin ließt und dann in die /etc/passwd schreibt. Dem Programm kannst du dann das sticky bit verpassen, so das du um das su herum kommst.
Ciao, Tobias
Tobias Koenig tokoe@kde.org wrote:
On Sun, Jun 22, 2003 at 08:17:24PM +0200, Fabian Hänsel wrote:
Aber zu "was_langes" (auch so ein Konstrukt mit passwd drin) kommt das ganze gar nicht erst. Es gibt folgende Meldung:
su: must be run from a terminal
Yepp, da su die echo Funktion des Terminals auschalten muss, damit nicht jeder User mitlesen kann.
Auf normale Art und Weise kann man su also nicht von einem Skript aus verwenden. Kann man Python irgendwie dazu bringen, su ein pty bereitzustellen?
Bei su (und wohl auch passwd)
passwd scheint diese Option auch zu haben (obwohl nicht in der man page erwähnt (hint to Josef :)))
Das wäre sehr praktisch.
Schreib dir doch selbst ein kleines C-Programm, das das Passwort von stdin ließt und dann in die /etc/passwd schreibt. Dem Programm kannst du dann das sticky bit verpassen, so das du um das su herum kommst.
Was macht das sticky bit heutzutage bei Dateien? Suid root wollte ich aus Sicherheitsgründen nicht nehmen. Ich fand das mit dem su so elegant, weil so kein Code, den ich selber schreiben müsste, mit erhöhten Privilegien laufen würde. Auch würde so alles über PAM gehen und wenn das System mal auf LDAP migriert würde, dann würde das so weiterfunktionieren.
Ciao, Tobias
mfg, Fabian
On Sun, Jun 22, 2003 at 09:48:38PM +0200, Fabian Hänsel wrote:
Tobias Koenig tokoe@kde.org wrote:
Hi Fabian,
Schreib dir doch selbst ein kleines C-Programm, das das Passwort von stdin ließt und dann in die /etc/passwd schreibt. Dem Programm kannst du dann das sticky bit verpassen, so das du um das su herum kommst.
Was macht das sticky bit heutzutage bei Dateien?
Aargh... meinte natürlich das suid Bit :)
An sonsten könntest du dir noch die Quellen von su und smbpasswd holen und die -s Option aus Letzteren in su implementieren.
Ciao, Tobias
Tobias Koenig tokoe@kde.org wrote:
On Sun, Jun 22, 2003 at 08:17:24PM +0200, Fabian Hänsel wrote:
Aber zu "was_langes" (auch so ein Konstrukt mit passwd drin) kommt das ganze gar nicht erst. Es gibt folgende Meldung:
su: must be run from a terminal
Yepp, da su die echo Funktion des Terminals auschalten muss, damit nicht jeder User mitlesen kann.
su will tatsächlich nur von einem {p/t}ty aus laufen. Es verwendet aber auch nur PAM. su ruft dann pam_acct_mgmt auf, welches selbst auf stdin nach dem Passwort fragt. pam_acct_mgmt schaltet das echo auf stdout ab, liest aber troztdem von stdin ein. Ich hab mir ein PAM-Programm webauth geschrieben, welches per PAM (pam_chauthtok) nur das passwd einliest, und 0 zurückliefert, wenn es richtig ist und sonst 1. Falls es richtig war kommt dann per Skript ein weiteres suid-root-Programm zum Zuge, das das Passwort ändert.
Bei su (und wohl auch passwd)
passwd scheint diese Option auch zu haben (obwohl nicht in der man page erwähnt (hint to Josef :)))
Die Sache mit dem Einlesen macht PAM, welches sich in der Beziehung komisch verhält: $ (echo alt; echo neu; echo neu)| passwd Changing password for fab (current) UNIX password: <ein bisschen warten> passwd: Authentication token manipulation error
Als momentanes Passwort kriegt passwd/PAM auf diesem Wege offenbar "alt\nneu\nneu\n" geliefert - warum auch immer.
mfg, Fabian
On Sun, Jun 22, 2003 at 08:17:24PM +0200, Fabian Hänsel wrote:
su: must be run from a terminal
Ich hab bei meinen Skripten sudo verwendet und die /etc/sudoers entsprechend angepasst.
Bert
lug-dd@mailman.schlittermann.de