回答:
user2
ログアウトして再度ログインする必要があります。グループのアクセス許可は次のように機能します。
/etc/passwd
ているユーザーが言及されて/etc/group
いるすべてのグループを取得します。(より正確には、pw_gid
フィールドがでgetpw(your_uid)
、プラスすべてのグループそのユーザーが明示的なメンバーです。向こう/etc/passwd
と/etc/group
、情報は、NISやLDAPなどのユーザーデータベースの他の種類の中から来るかもしれない。)主なグループは、プロセスのなると実効グループIDそして、他のグループはその補足グループIDになります。ご覧のとおり、ユーザーのグループメンバーシップへの変更は、ユーザーがログインしたときにのみ有効になります。実行中のプロセスの場合、手遅れです。そのため、ユーザーはログアウトして再度ログインする必要があります。それがあまりにも面倒な場合、ユーザーは別のセッションにログインできます(たとえば、別のコンソールで、またはssh localhost
)。
内部では、プロセスは特権(ユーザーID、グループID、機能)のみを失うことができます。カーネルはinit
プロセスを起動して(ブート後の最初のプロセス)ルートとして実行し、すべてのプロセスは最終的にそのプロセスから派生します¹。のlogin
プロセス(またはsshd
、またはであなたをログに記録し、デスクトップマネージャの一部)は、まだrootで実行されています。その仕事の一部は、ルート権限を削除し、適切なユーザーとグループに切り替えることです。
1つの例外があります。setuidまたはsetgidプログラムの実行です。そのプログラムは追加の許可を受け取ります。親プロセスのメンバーシップのさまざまなサブセットに加えて、setxid実行可能ファイルを所有するユーザーまたはグループの追加メンバーシップの下で動作することを選択できます。特に、setuid rootプログラムはrootパーミッションを持っているため、すべてを実行できます²。これは、プログラムが好きでsu
あり、sudo
仕事することができるかということです。
¹
時間をかけて根と失う権限として起動します。init(initrdの、udevの)に由来するが、原理は同じですされていないプロセスが時折あります。
²
などのSELinuxなどマルチレベルのセキュリティフレームワークがなければ。
user2をログアウトして再度ログインさせる必要がある場合があります(または、sshでログインして新しいログインセッションを作成します)。の出力を確認してid --groups
、ユーザーの数値グループIDを表示します。
sudo su $(whoami)
本質的にはと同じ回避策ですssh localhost
が、sshサーバーをインストールせずに使用できます。
ルートがある限り。ただし、新しいグループを追加して権限を変更したばかりの場合は、おそらくそうします。