chmod g+w testfile
file() の権限を変更して実行すると、ls -l testfile
次のようになります。
-rwxrwxr-x 1 user1 user1 0 2011-01-24 20:36 testfile
その後、グループにユーザーを追加しました(「/etc/グループ「行user1:x:1000:user2
)、user2ではファイルを編集できません。なぜこれが起こりますか?
答え1
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として実行されています。そのタスクの一部は、root権限を放棄し、正しいユーザーとグループに切り替えることです。
1つの例外があります。実行setuid または setgidプログラム。プログラムは追加の権限を受け取ります。オプションで、親プロセスメンバーシップのさまざまなサブセットとsetxid実行可能ファイルを所有するユーザーまたはグループの追加メンバーシップで機能できます。具体的には、setuid rootプログラムはroot権限を持っているので、プログラムは必要に応じてすべての操作を実行できますsu
² sudo
。
1
時々init(initrd、udev)から分岐しないプロセスがありますが、原則は同じです。ルートで始まり、時間の経過とともに権限を失います。
²SELinuxなどのマルチレベルセキュリティフレームワークの使用は禁止されています
。
答え2
user2をログアウトしてから再度ログインする必要があるかもしれません(またはsshを介してログインして新しいログインセッションを作成してみてください)。出力を確認して、id --groups
ユーザーの数値グループ ID を表示します。
答え3
sudo su $(whoami)
本質的に同じ解決策ssh localhost
ですが、SSHサーバーをインストールしなくても使用できます。
ルートがある限り。ただし、新しいグループを追加して権限を変更した場合は、機能することができます。
答え4
場合によっては、ホストにControlMaster sshコマンドを使用すると、ユーザーのログアウトは役に立ちません。グループにアカウントを追加した後、同じControlMaster接続内でログアウトしてから再度ログインしても、セッションに新しいメンバーは表示されません。マスターとの接続を強制的に切断する必要があります。
ssh -O exit hostname
再ログインする前に