Tengo un usuario con acceso limitado en el sistema (es decir, no es un sudoer); Llamemos a lo Bob .
Tengo un script o un binario en el que confío el administrador del sistema y no tendría problemas para ejecutarlo como root; Llamemos al guión get-todays-passphrase.sh
. El trabajo de este script es leer datos de un archivo "privado" (propiedad de un usuario / grupo que no sea Bob, o incluso root) ubicado en /srv/daily-passphrases
, y solo generar una línea específica del archivo: la línea que corresponde con la fecha de hoy .
A los usuarios como Bob no se les permite saber la frase de contraseña de mañana, aunque esté en el archivo. Por esta razón, el archivo /srv/daily-passphrases
está protegido por permisos Unix, por lo que los usuarios no root como Bob no pueden acceder al archivo directamente. Sin embargo, se les permite ejecutar el get-todays-passphrase.sh
script en cualquier momento, lo que devuelve los datos "filtrados".
Para resumir (la versión TL; DR ):
- Bob no puede leer el archivo protegido
- El script puede leer el archivo protegido.
- En cualquier momento, Bob puede ejecutar el script que puede leer el archivo
¿Es posible hacer esto dentro de los permisos de archivos Unix? O si Bob inicia un script, ¿el script siempre estará condenado a ejecutarse con los mismos permisos que Bob?
fuente
Prefacio:
Como se ha señalado en los comentarios y por las razones explicadas en esta respuesta, el kernel de Linux ignora el bit setuid / setguid cuando maneja un script. No voy a duplicar la respuesta de Benjamin, sino que reemplazaré el script con ejecutable para hacer que mi respuesta sea correcta.
Respuesta corta: use setgid
Pasos detallados:
sudo chown :readpass thatfile
sudo chmod g=r,o= thatfile
sudo chmod g+s thatfile
De esa forma, su ejecutable se ejecutará con los permisos del grupo propietario y, por lo tanto, podrá leer el archivo.
fuente
thatfile
con el gruporeadpass
.