このnewgrp
コマンドは、対話型シェル AFAICT からのみ有効に使用できます。実際、私はそれについてあきらめました...まあ、かなり前に、私が書いた代替品が英国と米国の両方で投票する資格があるとしましょう。
newgrp
シェルに「組み込まれた」特別なコマンドであることに注意してください。厳密には、これはシェルの外部にあるコマンドですが、シェルにはその処理方法に関する知識が組み込まれています。シェルは実際にexec
はプログラムなので、その後すぐに新しいシェルを取得します。また、setuid ルート プログラムでもあります。Solaris では、少なくとも、newgrp
SHELL 環境変数も無視するようです。
newgrp
対処することを意図した問題を回避するさまざまなプログラムがあります。このコマンドは、ユーザーが一度に複数のグループに所属できるようになる前からあることに注意してください (バージョン 7 の Unix マニュアルを参照してください)。またはとnewgrp
は異なり、実行後にコマンドを実行するメカニズムを提供しないため、のようなsetuid ルート プログラムであり、あるグループから別のグループに切り替えることができるプログラムを作成しました。これはかなり単純です。main() と標準化されたエラー報告関数のセットを使用するだけです。ソースについては、私に連絡してください (最初のドットは gmail ドットコムで最後に)。' と呼ばれるはるかに危険なコマンドもあります。su
sudo
newgid
newgrp
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
(このプログラムは成長しました: 私が最初からやり直した場合、別のオプション文字を必要とせずにユーザー ID またはユーザー名を受け入れます。グループ ID またはグループ名についても同様です。)
setuid ルート プログラムをインストールする許可を取得するのは難しい場合があります。マルチグループ機能により、現在利用可能ないくつかの回避策があります。ファイルを作成したいディレクトリに setgid ビットを設定するのが有効なテクニックの 1 つです。これは、ファイルの作成者に関係なく、ファイルはディレクトリを所有するグループに属することを意味します。これにより、必要な効果が得られることがよくありますが、これを一貫して使用している人はほとんどいません。