configuración de sudoers de grano fino (argumentos de línea de comandos permitidos)

20

¿Hay alguna forma directa de permitir que un usuario ejecute (por ejemplo)

/usr/bin/pacman -S -u

como root, sin permitirle correr

/usr/bin/pacman -S -u some_package

?

La línea

user ALL=(root) NOPASSWD: /usr/bin/pacman -S -u

permite ambos, y

user ALL=(root) NOPASSWD: /usr/bin/pacman -S -u ""

parece ser semánticamente equivalente.

nisc
fuente

Respuestas:

27

Para su caso intente algo como esto:

Cmnd_Alias PACMAN = /usr/bin/pacman -S -u, ! /usr/bin/pacman -S -u some_package
user ALL=(root) NOPASSWD: PACMAN

Puede usar patrones glob de shell como [az], [0-9], * etc. en su archivo sudoers para excluir paquetes que coincidan con un patrón determinado.

matthias krull
fuente
3

Escribe un script que haga lo que quieras y dale acceso a sudo.

También asegúrese de que cualquier entorno en el que se ejecute no tenga acceso a la red en absoluto, o simplemente pueden usar sus propios dns para suplantar el espejo y luego ejecutar código arbitrario como raíz cuando pacman lo instale.

Daenyth
fuente
esa no es una forma elegante, sudo admite de forma predeterminada el caso exacto dado
matthias krull
1
No es la mejor solución, pero +1 para advertencia de seguridad
Aaron J Lang