Il comando newgrp
può solo significato essere utilizzato da una shell interattiva, AFAICT. In effetti, ho rinunciato a questo ... beh, diciamo abbastanza tempo fa che la sostituzione che ho scritto è ora eleggibile per votare sia nel Regno Unito che negli Stati Uniti.
noti che newgrp
è un comando speciale 'incorporato nella' guscio. Strettamente, si tratta di un comando esterno alla shell, ma la shell ha una conoscenza integrata su come gestirla. La shell in realtà è il programma exec
, quindi ottieni subito una nuova shell. È anche un programma di root setuid. Su Solaris, almeno, newgrp
sembra anche ignorare la variabile di ambiente SHELL.
Ho una varietà di programmi che risolvono il problema che newgrp
era destinato a risolvere. Ricordate, il comando pre-date la capacità degli utenti di appartenere a più gruppi in una sola volta (vedi la Version 7 Unix Manuals).Poiché newgrp
non fornisce un meccanismo per eseguire comandi dopo aver eseguito, a differenza su
o sudo
, ho scritto un programma newgid
che, come newgrp
, è un programma setuid root e permette di passare da un gruppo all'altro. È abbastanza semplice: solo main() più una serie di funzioni di reporting degli errori standardizzate utilizzate. Contattami (il primo punto è valido a gmail dot com) per la fonte. Ho anche un comando molto più pericoloso chiamato 'asroot
' che mi consente (ma solo a me - sotto la compilazione di default) di modificare gli elenchi di utenti e gruppi molto più 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
(Questo programma cresciuto: sono stati ho rifatto da zero, io accetto ID utente o nome utente senza richiedere diverse lettere di opzione; idem per ID gruppo o il nome del gruppo.)
Può essere difficile per ottenere il permesso di installare i programmi di root setuid. Ci sono alcune soluzioni alternative ora a causa delle strutture multi-gruppo. Una tecnica che può funzionare è impostare il bit setgid nelle directory in cui si desidera creare i file. Ciò significa che, indipendentemente da chi crea il file, il file apparterrà al gruppo che possiede la directory. Questo spesso raggiunge l'effetto che ti serve, anche se conosco poche persone che lo usano costantemente.
fonte
2008-11-18 19:47:58
Le citazioni possono aiutare? come in exec sg nas_bio3 "$ @" –
Non so perché una risposta per Linuxen è stata accettata quando la domanda è stata contrassegnata come Solaris. Sono nella stessa situazione, e "sg" non esiste sulla mia scatola Solaris. – Jolta