グループにユーザーを追加しましたが、ファイルに対するグループの権限はまだ効果がありません


17

ファイル(chmod g+w testfile)のアクセス権を変更し、実行すると次の結果がls -l testfile得られます。

-rwxrwxr-x 1 user1 user1 0 2011-01-24 20:36 testfile

次に、そのグループにユーザーを追加しました( " / etc / group "にはuser1:x:1000:user2行があります)が、そのファイルをuser2として編集できません。これはなぜですか?


回答:


28

user2 ログアウトして再度ログインする必要があります。グループのアクセス許可は次のように機能します。

  • ログインすると、プロセスはに記載されているメイングループのグループメンバーシップと、に記載され/etc/passwdているユーザーが言及されて/etc/groupいるすべてのグループを取得します。(より正確には、pw_gidフィールドがでgetpw(your_uid)、プラスすべてのグループそのユーザーが明示的なメンバーです。向こう/etc/passwd/etc/group、情報は、NISやLDAPなどのユーザーデータベースの他の種類の中から来るかもしれない。)主なグループは、プロセスのなると実効グループIDそして、他のグループはその補足グループIDになります。
  • プロセスが、ファイルへのアクセスなど、特定のグループのメンバーシップを必要とする操作を実行するとき、そのグループはプロセスの有効なグループIDまたは補助グループIDのいずれかでなければなりません。

ご覧のとおり、ユーザーのグループメンバーシップへの変更は、ユーザーがログインしたときにのみ有効になります。実行中のプロセスの場合、手遅れです。そのため、ユーザーはログアウトして再度ログインする必要があります。それがあまりにも面倒な場合、ユーザーは別のセッションにログインできます(たとえば、別のコンソールで、またはssh localhost)。

内部では、プロセスは特権(ユーザーID、グループID、機能)のみを失うことができます。カーネルはinitプロセスを起動して(ブート後の最初のプロセス)ルートとして実行し、すべてのプロセスは最終的にそのプロセスから派生します¹。のloginプロセス(またはsshd、またはであなたをログに記録し、デスクトップマネージャの一部)は、まだrootで実行されています。その仕事の一部は、ルート権限を削除し、適切なユーザーとグループに切り替えることです。

1つの例外があります。setuidまたはsetgidプログラムの実行です。そのプログラムは追加の許可を受け取ります。親プロセスのメンバーシップのさまざまなサブセットに加えて、setxid実行可能ファイルを所有するユーザーまたはグループの追加メンバーシップの下で動作することを選択できます。特に、setuid rootプログラムはrootパーミッションを持っているため、すべてを実行できます²。これは、プログラムが好きでsuあり、sudo仕事することができるかということです。

¹ 時間をかけて根と失う権限として起動します。init(initrdの、udevの)に由来するが、原理は同じですされていないプロセスが時折あります。
² などのSELinuxなどマルチレベルのセキュリティフレームワークがなければ。


1
デスクトップGUIを使用している場合、単にログアウトしてターミナルウィンドウに再度ログインしても、グループメンバーシップはリセットされません。この問題が発生したため、GUIセッションからもログアウトする必要があります
。þ

3
@ user394ログアウトして再度ログインすると、グループメンバーシップがリセットされます。ターミナルウィンドウを閉じるだけの場合は、ログアウトしていません。
ジル 'SO-悪であるのをやめる'

10

user2をログアウトして再度ログインさせる必要がある場合があります(または、sshでログインして新しいログインセッションを作成します)。の出力を確認してid --groups、ユーザーの数値グループIDを表示します。


1

sudo su $(whoami)

本質的にはと同じ回避策ですssh localhostが、sshサーバーをインストールせずに使用できます。

ルートがある限り。ただし、新しいグループを追加して権限を変更したばかりの場合は、おそらくそうします。


これは、受け入れられているものよりも情報的に完全な答えではありませんが、時計の作り方を知りたい場合や、ちょうど何時かを知りたい場合があります。この答えは、次回ログアウトしてからログインし直すまでうまくいくトリックの助けになりました。ありがとう。
ベンジャミンステイトン

0

ホストにControlMaster sshディレクティブを使用している場合、ユーザーのログアウトが役に立たない場合があります。同じControlMaster接続内でアカウントをグループに追加し、ログオフして再度ログオンしても、セッションには新しいメンバーシップは表示されません。マスター接続を強制的に切断する必要があります

ssh -O exit hostname

再度ログオンする前。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.