passwd und C oder andere Sprache

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
itgchris
Beiträge: 99
Registriert: 08.07.2007 13:32:29
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Suttgart-Vaihingen
Kontaktdaten:

passwd und C oder andere Sprache

Beitrag von itgchris » 09.02.2010 03:35:36

Hallo, ist es möglich, dass ich über in c Skript das Passwort eines Shell Users ändern kann? Früher gab es mal ein Modul für MySQL womit ich direkt Shell User über MySQL anlegen kann / konnte, doch libnss-mysql wird schon lange nicht mehr weiterentwickelt und gerade falls man andere Distributionen einsetzt als Debian, z.b. CentOS gibt es schon Probleme bezüglich der Lauffähigkeit von Skripten. Was ich mir Wünsche wäre z.b. über eine MySQL Datenbank ein Passwort zu bekommen, z.b. im Plain oder auch schon in md5 oder crypt, dieses soll dann über ein c skript oder perl / python skript in die shadow oder passwd eingetragen werden / geändert werden oder der user sollte gelöscht werden können, ist sowas möglich? Gibt es da einfache Methoden dazu oder nur Umwege? Gibt es dafür eine Umfangreiche Lektüre, die ich mir aneingen sollte?

Benutzeravatar
Meillo
Moderator
Beiträge: 9254
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: passwd und C oder andere Sprache

Beitrag von Meillo » 09.02.2010 09:04:44

Grundsätzlich: Je nach dem wie die Daten in die DB kommen solltest du dir über die Sicherheit Gedanken machen.

Wenn du die Passwörter von fremden Usern ändern willst, musst du root sein.

Vermutlich musst du das Passwort als Klartext vorliegen haben. Dann kannst du die herkömmlichen Tools passwd(1), adduser(8), deluser(8) verwenden. Das ist IMO auch der sinnvollste Weg.

Wenn du nur die Passwort-Hashes hast, dann müsstest du dein Loginsystem auf dem Rechner schon auf MD5-Hashes umstellen. Das wird wohl irgendwie möglich sein, aber AFAIK ist MD5 nicht sicher.


Ein Ansatz wäre: Ein Programm das per Cron als root läuft. Es fragt die DB ab und ruft dann passwd und Co. auf.

Die Sicherheit ist hier ein zentrales Thema. Mache dir ausreichend Gedanken dazu und frage Personen die sich auskennen um ihre Meinung.


(btw: C-Scripte gibt es nicht, C-Programme werden kompiliert.)
Use ed once in a while!

itgchris
Beiträge: 99
Registriert: 08.07.2007 13:32:29
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Suttgart-Vaihingen
Kontaktdaten:

Re: passwd und C oder andere Sprache

Beitrag von itgchris » 09.02.2010 14:03:06

Ja sorry wegen skript ;)

Aber wie kann ich dann ein passwort hash direkt übergeben?!

weil bei passwd gibt es ja keinen parameter der mir erlaubt direkt ein passwort zu setzten... Das mit dem Cronskript hab ich mir auch überlegt, oder ich bau ein prozess der einfach immer jede minute die db abfrägt und sich um alle dienste kümmert..

Benutzeravatar
Meillo
Moderator
Beiträge: 9254
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: passwd und C oder andere Sprache

Beitrag von Meillo » 09.02.2010 14:32:29

itgchris hat geschrieben: Aber wie kann ich dann ein passwort hash direkt übergeben?!

weil bei passwd gibt es ja keinen parameter der mir erlaubt direkt ein passwort zu setzten...
Bei passwd(1) musst du das Passwort als Klartext nach stdin schreiben. Bei usermod(8) musst du es zuerst durch crypt(3) jagen und das Ergebnis als Parameter -p angeben.

Mir scheint, meine obigen Aussagen waren nicht korrekt. [0] erklärt wie man sehen kann welcher Art ein Hash ist ($1$ für MD5 z.B.).

[0] http://en.wikipedia.org/wiki/Crypt_(Uni ... nder_Linux

Ich habe also in einer /etc/shadow nachgeschaut. Dort stehen MD5-Hashes. (MD5 scheint noch sicher genug zu sein.)
Andere Systeme verwenden vielleicht andere Hashfunktionen.

Ich vermute, dass usermod(8) das was ihm übergeben wird so in /etc/shadow schreibt. Somit muss die Hashfunktion passen.

Wie liegt das Passwort denn in deiner Datenbank? Als Hash wäre natürlich besser, doch dann muss es der gleiche Hash sein wie der der vom Login-System verwendet wird.
Use ed once in a while!

itgchris
Beiträge: 99
Registriert: 08.07.2007 13:32:29
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Suttgart-Vaihingen
Kontaktdaten:

Re: passwd und C oder andere Sprache

Beitrag von itgchris » 09.02.2010 20:32:34

Zurzeit hab ich noch keine Datenbank, aber ich will mir ein Skript schreiben, dass es mir über nginx einfacher ermöglicht neue Webspace User anzulegen / löschen / ändern und da möchte ich dieses mal keine Virtuelle User haben, eben über libnss, da ich einfach nicht mehr auf ein System setzten möchte, dass nicht mehr entwickelt wird und in nicht jeder Distribution auftaucht. ich denke das ich die passwörter in Crypt in eine DB schreiben lasse, da soviel ich weiß die PHP Crypt auch dem Crypt von unix entspricht..

Antworten