Команда newgrp
может использоваться только из интерактивной оболочки AFAICT. На самом деле, я отказался от этого по поводу ... ну, скажем так, достаточно давно, что написанная мною замена теперь имеет право голосовать как в Великобритании, так и в США.
Обратите внимание, что newgrp
- это специальная команда, встроенная в оболочку. Строго говоря, это команда, внешняя по отношению к оболочке, но оболочка обладает встроенными знаниями о том, как ее обрабатывать. Оболочка на самом деле exec
- это программа, поэтому вы сразу получаете новую оболочку. Это также корневая программа setuid. По крайней мере, в Solaris newgrp
также игнорирует переменную среды SHELL.
У меня есть множество программ, которые решают проблему, которую newgrp
должен был решить. Помните, что команда предшествует возможности пользователей принадлежать к нескольким группам одновременно (см. Версия 7 Руководств Unix ). Поскольку newgrp
не предоставляет механизма для выполнения команд после его выполнения, в отличие от su
или sudo
, я написал программу newgid
, которая, подобно newgrp
, является корневой программой setuid и позволяет вам переключаться с одна группа в другую. Это довольно просто - просто main () плюс набор стандартных функций отчетов об ошибках. Свяжитесь со мной (первая точка последняя в gmail точка com) для источника. У меня также есть гораздо более опасная команда под названием 'asroot
', которая позволяет мне (но только мне - при компиляции по умолчанию) настраивать списки пользователей и групп гораздо тщательнее.
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
(Эта программа выросла: если бы я ее переделывал с нуля, я бы принял идентификатор пользователя или имя пользователя, не требуя других букв опций; то же самое для идентификатора группы или имени группы.)
Может быть сложно получить разрешение на установку корневых программ setuid. В настоящее время доступны некоторые обходные пути из-за возможности использования нескольких групп. Один из методов, который может работать, - установить бит setgid в каталогах, в которых вы хотите создать файлы. Это означает, что независимо от того, кто создает файл, файл будет принадлежать группе, которой принадлежит каталог. Это часто дает нужный вам эффект - хотя я знаю мало людей, которые постоянно используют это.