1 votos

En una fiesta de MacOS Mojave script "-w /etc/passwd" es falso incluso para Root

Un viejo golpe script que he probado para ver si un usuario era root viendo si /etc/passwd era escribible. En MacOS High Sierra se volvió realidad para root y falso para cualquier otro. Pero en el MacOS Mojave la prueba sale falsa incluso para root .

Si hago esa prueba [ -w File ] en otros archivos con los mismos permisos y propiedad, como /etc/hosts que devuelve correctamente la verdad para root y falsa para cualquier otra persona tanto en Mojave como en High Sierra. No veo ninguna bandera de archivo especial o atributos extendidos en /etc/passwd .

El script no es un problema para arreglar, pero me gustaría saber cómo/por qué esta prueba es diferente en ese archivo vs. otros archivos y por qué esto es sólo en Mojave. Si esto tiene que ver con SIP, entonces me gustaría saber cómo se puede probar para ver si un archivo o directorio está de alguna manera protegido por SIP.

Actualización: Encontré que desactivando SIP las cosas funcionaron como se esperaba, es decir, para un usuario Root la prueba de bash "-w /etc/passwd" sería verdadera. Habilité SIP de nuevo y todo está funcionando como se esperaba. No sé si debería borrar esta pregunta, o dejarla por si alguien se encuentra con un problema similar. Hacer un "ls -O /etc/passwd" no muestra el archivo como restringido.

3voto

Douglas Puntos 10417

Comprobar si un archivo es "escribible" como una forma de determinar si un usuario es root es una mala manera de comprobar los permisos. Por ejemplo...

  • se puede añadir un usuario a un grupo (es decir. wheel ) que tiene permisos de escritura a un archivo que normalmente es propiedad de Root

  • un archivo puede ser marcado para no tener permisos de escritura incluso por root a pesar de que tienes acceso a root.

  • un archivo puede haber cambiado sus permisos a "no escribible" por Root (intencionalmente o no)

  • SIP, o Protección de la Integridad del Sistema (como ya has descubierto) evitará que incluso el root del usuario de escribir a los archivos del sistema.

Compruebe el ID de usuario

En lugar de eso, deberías mirar el UID de un usuario en particular con la función id

$ id -u

A root usuario, tendrá un ID de 0.

Para ver cómo puedes usar esto en un script para comprobar root privilegios, ver la respuesta en el correo Ejecutando un script con privilegios de administrador .

Comprobando SIP

Esto es en realidad bastante fácil...

$ csrutil status

Sin embargo, si se activa, tendrás que arrancar en el Modo de Recuperación para desactivar SIP . Esto no es algo que se pueda hacer en la línea de comandos (o desde un script) en una sesión normal. Es mucho más fácil simplemente probar la UID como se ha descrito anteriormente.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X