ファイルの権限を変更しました(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としてそのファイルを編集できません。なぜそうなのですか?
承認された回答:
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
を開始します プロセス(起動後の最初のプロセス)はrootとして実行され、すべてのプロセスは最終的にそのプロセスの子孫になります¹。 login
プロセス(またはsshd
、またはログインするデスクトップマネージャの一部)はまだrootとして実行されています。その仕事の一部は、root権限を削除し、適切なユーザーとグループに切り替えることです。
1つの例外があります。それは、setuidまたはsetgidプログラムの実行です。そのプログラムは追加のアクセス許可を受け取ります。親プロセスのメンバーシップのさまざまなサブセットに加えて、setxid実行可能ファイルを所有するユーザーまたはグループの追加のメンバーシップの下で動作することを選択できます。特に、setuidルートプログラムにはroot権限があるため、すべてを実行できます²。これがsu
のようなプログラムのやり方です およびsudo
彼らの仕事をすることができます。
¹init(initrd、udev)から派生していないプロセスが存在する場合がありますが、原則は同じです。rootとして開始し、時間の経過とともに特権を失います。
²SELinuxなどのマルチレベルセキュリティフレームワークを除く。