Domanda

Devo impostare il mio processo in modo che venga eseguito su "nobody", ho trovato os.setuid (), ma come posso trovare uid se ho login ?

Ho scoperto che gli uid sono in / etc / passwd, ma forse c'è un modo più pitonico della scansione di / etc / passwd. Chiunque?

È stato utile?

Soluzione

Potresti dare un'occhiata al pwd nel python stdlib, ad esempio:

import pwd
pw = pwd.getpwnam("nobody")
uid = pw.pw_uid

usa / etc / passwd (beh, tecnicamente usa l'API di posix C, quindi suppongo che potrebbe funzionare su un sistema operativo se non usa / etc / passwd ma espone le funzioni necessarie) ma è più pulito dell'analisi manualmente

Altri suggerimenti

Non scansionare mai direttamente / etc / passwd .

Ad esempio, su un sistema Linux che gestisco, gli account utente non si trovano su / etc / passwd , ma su un server LDAP.

Il modo corretto è usare getpwent / getgrent e le relative funzioni C (come nella risposta di @ TFKyle), che otterrà le informazioni sul modo corretto per ciascun sistema (su Linux glibc, legge /etc/nsswitch.conf per sapere quali librerie dinamiche NSS caricare per ottenere le informazioni).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top