Come trovo userid tramite login (Python in * NIX)
-
08-07-2019 - |
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?
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).