¿Cuál es la forma canónica de hacer que un trabajo inicial cambie su ID de usuario y ejecute el script como un usuario sin privilegios?
Obviamente uno puede usar su
o sudo
, pero esto parece hacky (y puede generar líneas de registro innecesarias).
initctl --version
para encontrar su versión actual de advenedizo.Al preguntar sobre el canal #upstart en freenode, la opinión oficial sobre el asunto es:
fuente
su
ese medioexpect fork
e inclusoexpect daemon
no atrapan el PID final.exec su -s /bin/sh -c 'HOME=/foo/bar exec "$0" "$@" &>/var/log/foobar.log' username -- /path/to/command [parameters...]
¿Qué tal usar start-stop-daemon?
Del libro de cocina Upstart :
Nota:
start-stop-daemon
no admitido en RHEL.fuente
Hay varias formas de hacerlo, todas con una semántica ligeramente diferente, particularmente en relación con la pertenencia a grupos:
setuidgid
te colocará en el grupo que especifiques.setuidgid
lo pondrán solo en ese grupo, por lo que no podrá acceder a los archivos que pertenecen a otros grupos de los que es miembro.setuidgid
de daemontools-bis y lasetuidgid
del conjunto de herramientas nosh ambos tienen una-s
(también conocido como--supplementary
opción), que le pondrá en ese grupo, y también le puso en todos los grupos suplementarios para el usuario que especifique.Usando
newgrp
una vez que te has convertido en el usuario menos privilegiado añadirá un solo grupo a su groupset, sino que también crea una nueva subcapa, por lo que es difícil de usar dentro de las secuencias de comandos.start-stop-daemon
preserva la membresía de su grupo y hace mucho más que solo setuid / setgid.chpst -u username:group1:group2:group3... commandname
le permitirá especificar exactamente qué membresías de grupo adoptar, pero (en Ubuntu ) solo viene con elrunit
paquete, que es una alternativa aupstart
.su -c commandname username
recoge todas las membresías de grupos de nombre de usuario, como lo hacesudo -u username commandname
, por lo que probablemente sean la ruta para menos asombro.fuente
Uso
setuidgid
del paquetedaemontools
.Documentación aquí: http://cr.yp.to/daemontools/setuidgid.html
fuente
En una instancia de Ubuntu 10.10 en Amazon EC2, tuve mejor suerte con el
start-stop-daemon
comando.También luché con algunas de las otras estrofas advenedizas . Estoy llamando a una aplicación python con un
virtualenv
parámetro específico y algunos para mi programa ejecutado.Lo siguiente es lo que funcionó para mí.
El
PYTHONPATH
objetivo es instalar algunos paquetes desde el origen en la ruta del módulo PYTHON cuando se ejecuta este trabajo inicial. Tenía que hacer todo en caminos absolutos porque lachdir
estrofa no parecía funcionar.fuente
Estaba usando CentOS 6, y no pude conseguir que el truco recomendado (para Upstart 0.6.5) funcionara para mí, ni el truco 'su' porque la cantidad de horquillas involucradas (4 creo) no fue rastreada por 'fork esperada 'o' esperar demonio '.
Finalmente acabo de hacer
(es decir, establecer el bit setuid y cambiar la propiedad).
Puede que no sea el método más seguro, pero para un proyecto interno de I + D, en nuestro caso no importó.
fuente
chmod 1700
o al menos unachmod u+sx,go-x
allí en lugar de solo+s
, calificaría como "lo suficientemente seguro". :)Hay una tercera posibilidad dependiendo de lo que intente lograr. Es posible que pueda aflojar los controles de acceso en los archivos / dispositivos en cuestión . Esto puede permitir que un usuario sin privilegios monte o acceda a elementos que normalmente no se les permitiría. Solo asegúrate de no estar regalando las llaves del reino en el proceso.
También puede cambiar el tiempo de espera de la caché de contraseñas sudo . Pero no lo recomiendo a menos que su máquina sea físicamente segura (es decir, cree que es poco probable que un transeúnte intente obtener acceso a sudo).
Hay una buena razón por la que hay muy pocas formas de realizar acciones privilegiadas y que realizan registros
innecesarios ynecesarios . Las restricciones flojas serían un peligro para la seguridad de su sistema, y la falta de registro significaría que no hay forma de saber qué sucedió cuando se vio comprometido.Si el tamaño de sus archivos de registro es una preocupación, entonces probablemente algo esté mal. Sudo genera solo una línea por uso en condiciones normales.
fuente
En CentOS 6, upstart 0.6.5, lo siguiente es lo que funcionó para mí.
o:
Cuando uso
No se puede detener el proceso de trabajo
initclt stop
. Creo que la razón es:fuente