El comando newgrp
solo se puede utilizar de manera significativa desde un shell interactivo, AFAICT. De hecho, me di por vencido sobre ... bueno, digamos hace mucho tiempo que el reemplazo que escribí ahora es elegible para votar tanto en el Reino Unido como en los Estados Unidos.
Tenga en cuenta que newgrp
es un comando especial 'integrado' en el shell. Estrictamente, es un comando que es externo al shell, pero el shell tiene un conocimiento incorporado sobre cómo manejarlo. El shell realmente es el programa exec
, por lo que obtienes un nuevo intérprete de comandos inmediatamente después. También es un programa raíz setuid. En Solaris, al menos, newgrp
también parece ignorar la variable de entorno SHELL.
Tengo una variedad de programas que solucionan el problema que newgrp
estaba destinado a tratar. Recuerde, el comando es anterior a la capacidad de los usuarios para pertenecer a múltiples grupos a la vez (consulte Version 7 Unix Manuals).Dado que newgrp
no proporciona un mecanismo para ejecutar comandos después de su ejecución, a diferencia de su
o sudo
, escribí un programa newgid
que, como newgrp
, es un programa raíz setuid y le permite cambiar de un grupo a otro. Es bastante simple, solo main() más un conjunto de funciones de informe de error estandarizadas. Ponte en contacto conmigo (primer punto por último en punto com de gmail) para la fuente. También tengo un comando mucho más peligroso llamado 'asroot
' que me permite (pero solo a mí, bajo la compilación predeterminada) ajustar las listas de usuarios y grupos mucho más a fondo.
asroot: Configured for use by jleffler only
Usage: asroot [-hnpxzV] [<uid controls>] [<gid controls>] [-m umask] [--] command [arguments]
<uid controls> = [-u usr|-U uid] [-s euser|-S euid][-i user]
<gid controls> = [-C] [-g grp|-G gid] [-a grp][-A gid] [-r egrp|-R egid]
Use -h for more help
Option summary:
-a group Add auxilliary group (by name)
-A gid Add auxilliary group (by number)
-C Cancel all auxilliary groups
-g group Run with specified real GID (by name)
-G gid Run with specified real GID (by number)
-h Print this message and exit
-i Initialize UID and GIDs as if for user (by name or number)
-m umask Set umask to given value
-n Do not run program
-p Print privileges to be set
-r euser Run with specified effective UID (by name)
-R euid Run with specified effective UID (by number)
-s egroup Run with specified effective GID (by name)
-S egid Run with specified effective GID (by number)
-u user Run with specified real UID (by name)
-U uid Run with specified real UID (by number)
-V Print version and exit
-x Trace commands that are executed
-z Do not verify the UID/GID numbers
Mnemonic for effective UID/GID:
s is second letter of user;
r is second letter of group
(Este programa se desarrolló: se me rehacer desde cero, aceptaría ID de usuario o nombre de usuario sin requerir diferentes letras de opciones; lo mismo para el ID de grupo o nombre de grupo.)
Puede ser difícil para obtener permiso para instalar programas raíz setuid. Hay algunas soluciones disponibles ahora debido a las instalaciones de varios grupos. Una técnica que puede funcionar es establecer el bit setgid en los directorios donde quiere que se creen los archivos. Esto significa que independientemente de quién crea el archivo, el archivo pertenecerá al grupo que posee el directorio. Esto a menudo logra el efecto que necesita, aunque conozco a pocas personas que lo usan de manera consistente.
¿Pueden las cotizaciones ayudar? como en exec sg nas_bio3 "$ @" –
No sé por qué se aceptó una respuesta para Linuxen cuando se etiquetó la pregunta Solaris. Estoy en la misma situación y "sg" no existe en mi cuadro de Solaris. – Jolta