Conceda privilegios de sudo que no sean de administrador, pero con '~' siendo su propia casa ~

3

He oído que se me advierte que, con la idea general de privilegio mínimo, los usuarios similares a Unix deberían crear otra cuenta sin sudo privilegio, además de la cuenta integrada con sudo privilegio. En Mac, esto se traduce como: se debe crear una cuenta de personal para el uso diario, además de la cuenta de administrador que viene con la computadora, reservándose solo cuando sea necesario.

Para concretar, digamos que bruce es un bastón, que uso a diario, y batman es un administrador, que solo uso cuando es necesario. Pero, ¿cómo puedo, mientras estoy iniciando sesión en batman , realizar tareas sudo, en nombre de bruce , es decir, con las propias bruce ~ y $(whoami) como si estuviera registrando en como bruce con privilegios?

Para ilustrar esto, define /User/bruce/test.sh :

#!/usr/bin/env bash

whoami
cd ~ && pwd
ls ~/Library/Preferences/Preferences/

(Sí, he hecho chmod 744 test.sh ) Elegí la última línea con fines de ilustración artificial que, por lo general, parece que ~/Library/Preferences/Preferences/ no es accesible para un personal (es decir, un no administrador).

Lo que intento recibir, es bruce , /Users/bruce , y ls de salida.

El primer intento es que, de hecho, si abro el terminal de bruce , pero login la fiesta de batman (para obtener el privilegio de sudo), y ejecuto

sudo /Users/bruce/test.sh

Obtengo root , /Users/batman y ls exitoso de ~/Library/Preferences/Preferences/ , lo que muestra que la casa es de batman; esto no es de extrañar

O bien, un posible duplicado (a) afirma ese sudo -i -u bruce me permite ejecutar comandos como bruce . ¡Pero no! Si yo (como arriba) abro el terminal bruce , login la fiesta de batman , y ejecute

sudo -i -u bruce /Users/bruce/test.sh

Obtengo bruce , /Users/bruce y ls: : Permission denied .

Otro posible duplicado (b) indica que sudo -H -u bruce usa la casa de bruce. Bueno, otra vez cuando abro el terminal de bruce , login la fiesta de batman , y ejecuto

sudo -H -u bruce bash /Users/bruce/test.sh

Yo también obtengo bruce , /Users/bruce y ls: : Permission denied .

El lector podría pensar que mi solicitud no es razonable; pero solo quiero saber si es posible otorgar temporalmente el privilegio de sudo a un miembro del personal, lo que a veces puede ser conveniente. Por ejemplo, si se puede hacer esto, cuando hago un script corto ya no necesito evitar $(whoami) o ~ , lo que lo hace más flexible. O, cuando ejecuto un script corto, el sitio que busqué en Google sugiere, ni tengo que reemplazar $(whoami) por bruce y / o ~ por /Users/bruce .

La última vez, por lo que recuerdo, me irritó la restricción de privilegios, probablemente cuando ejecuté un script hecho por laicos que busqué en Google para instalar una fuente LaTeX.

Sin embargo, en este momento solo puedo recordar una instancia. Es decir, después de que yo, al iniciar sesión en batman, brew -ed algo usando homebrew (ya que requiere sudo privilegio), y logout -ed volvió como bruce y brew -ed algo más. Homebrew se quejó de una gran cantidad de permisos incorrectos de ciertas carpetas bajo /usr/local , y me instó a ejecutar sudo chown -R $(whoami) blablabla . Me pareció que brew había establecido cierto permiso para el propio batman , y me enloqueció arreglarlos uno por uno.

¿Qué hace para sortear el momento, por ejemplo, que brew requiere sudo, mientras usa una cuenta de personal? O, después de todo, ¿es la práctica que las cuentas de uso diario deban contener el menor privilegio, simplemente irreal?

    
pregunta Aminopterin 27.11.2016 - 10:22

1 respuesta

2

Probablemente hay una falla en la carpeta de inicio de bruce: los permisos de ~ / Library / Preferences / Preferences son incorrectos. Por lo tanto, el script no funciona como se esperaba.

Verifique la siguiente salida en mi entorno ejecutando el script registrado como administrador. Modifiqué ligeramente el script y reemplacé ls ~/Library/Preferences/Preferences por ls -la ~/Library/Preferences | grep "loginwindow"

/Users/bruce/bin/sh/test-env.sh
batman
/Users/batman
-rw-------    1 batman  staff     192 27 Nov 13:42 com.apple.loginwindow.plist
-rw-------    1 batman  staff     198 24 Okt 21:43 loginwindow.plist

sudo /Users/bruce/bin/sh/test-env.sh
root
/Users/batman
-rw-------    1 batman  staff     192 27 Nov 13:42 com.apple.loginwindow.plist
-rw-------    1 batman  staff     198 24 Okt 21:43 loginwindow.plist

sudo -i -u bruce /Users/bruce/bin/sh/test-env.sh
bruce
/Users/bruce
-rw-------    1 bruce  staff      95 27 Nov 13:40 com.apple.loginwindow.plist
-rw-------    1 bruce  staff     198 27 Nov 13:36 loginwindow.plist

sudo su bruce
/Users/bruce/bin/sh/test-env.sh
bruce
/Users/bruce
-rw-------    1 bruce  staff      95 27 Nov 13:40 com.apple.loginwindow.plist
-rw-------    1 bruce  staff     198 27 Nov 13:36 loginwindow.plist
$USERNAME = root #check this by entering 'env' in the shell additionally

sudo su -l bruce
/Users/bruce/bin/sh/test-env.sh
bruce
/Users/bruce
-rw-------    1 bruce  staff      95 27 Nov 13:40 com.apple.loginwindow.plist
-rw-------    1 bruce  staff     198 27 Nov 13:36 loginwindow.plist
$USERNAME = <empty>

También: hay un gran malentendido sobre cómo funciona realmente sudo / su. Tu administrador batman nunca ejecuta un comando "en nombre" de otro usuario. Si ingresa "sudo some_command" o "sudo -i -u user some_command", siempre será la posición elevada del superusuario (y el privilegio de un administrador para ejecutar sudo según lo determine el archivo sudoers y "convertirse en superusuario" temporalmente), que "ejecuta el comando correctamente en nombre de otro usuario".

Si tiene que ejecutar comandos con privilegios escalados en una base diaria con su usuario no administrador, agréguelo al archivo sudoers y agregue solo un número restringido de comandos.

Ejemplo (control del servidor web Apache):

bruce ALL=(ALL) /usr/sbin/apachectl

o sin el requisito de ingresar una contraseña después de ejecutar sudo apachectl as bruce:

bruce ALL=(ALL) NOPASSWD: /usr/sbin/apachectl

O modifique los scripts de forma adecuada para permanecer dentro del reino de bruce.

Dicho esto, el consejo / práctica de que "el usuario diario no debe ser un sudoer" sigue siendo válido.

Homebrew es una bestia diferente: está diseñado para ser instalado por un solo usuario, un usuario administrador. La mayoría de las aplicaciones / ejecutables proporcionados por el entorno homebrew pueden ser iniciados por un usuario estándar después de modificar el $ PATH del usuario o usar la ruta completa.

Existen varios procedimientos prácticos sobre cómo configurar homebrew como un entorno multiusuario (por ejemplo, Configuración de usuario múltiple de mi Homebrew ). No sé si esto todavía se aplica a las versiones más recientes de sistemas / sistemas de OS X.

    
respondido por el klanomath 27.11.2016 - 19:24

Lea otras preguntas en las etiquetas