Pregunta

Necesito configurar mi proceso para que se ejecute bajo 'nobody', he encontrado os.setuid (), pero ¿cómo puedo encontrar uid si tengo login ?

Descubrí que los uids están en / etc / passwd, pero tal vez haya una forma más pitónica que escanear / etc / passwd. ¿Alguien?

¿Fue útil?

Solución

Es posible que desee echar un vistazo al módulo pwd en python stdlib, por ejemplo:

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

usa / etc / passwd (bueno, técnicamente usa la API posix C, por lo que supongo que podría funcionar en un sistema operativo si no usaba / etc / passwd pero expone las funciones necesarias) pero es más limpio que el análisis manualmente

Otros consejos

Nunca escanee directamente / etc / passwd .

Por ejemplo, en un sistema Linux que administro, las cuentas de usuario no están en / etc / passwd , sino en un servidor LDAP.

La forma correcta es usar getpwent / getgrent y funciones C relacionadas (como en la respuesta de @ TFKyle), que obtendrá la información sobre la forma correcta para cada sistema (en Linux glibc, lee /etc/nsswitch.conf para saber qué bibliotecas dinámicas NSS cargar para obtener la información).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top