web-dev-qa-db-ja.com

ユーザーをグループに追加しましたが、ファイルに対するグループ権限がまだ影響しません

ファイルの権限を変更しました(chmod g+w testfile)と実行中ls -l testfileは以下を与えます:

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

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

19
tshepang

_user2_はログアウトしてから再度ログインする必要があります。グループの権限は次のように機能します。

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

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

1つの例外があります。 setuidまたはsetgid プログラムの実行です。そのプログラムは追加のアクセス許可を受け取ります。これは、親プロセスのメンバーシップのさまざまなサブセットと、setxid実行可能ファイルを所有するユーザーまたはグループの追加メンバーシップの下で動作することを選択できます。特に、setuidルートプログラムにはルート権限があるため、すべてを実行できます²。これがsuSudoのようなプログラムがどのように機能するかです。

¹ Init(initrd、udev)から派生していないプロセスが時々ありますが、原則は同じです。ルートとして開始すると、時間の経過とともに特権が失われます。
² SELinuxなどのマルチレベルセキュリティフレームワークを除外する。

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

10
jsbillings

Sudo su $(whoami)

ssh localhostと本質的に同じ回避策ですが、sshサーバーがインストールされていなくても使用できます。

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

4
RGD2

suで十分な場合もありますが、Sudoは必要ありません。
欠点がある場合は、知っておくと面白いでしょう。コメントしてください。

su --login $(whoami)

man suから:

suを使用すると、代替ユーザーとグループIDでコマンドを実行できます。

su [options] [-] [user [argument...]]

混在環境による副作用を回避するために、常に--loginオプション(ショートカット-ではなく)を使用することをお勧めします。

-, -l, --login実際のログインと同様の環境で、ログインシェルとしてシェルを起動します。

  • TERMおよび変数を除くすべての環境変数をクリアします
    --whitelist-environmentによって指定
  • 環境変数HOMEShellUSERLOGNAMEPATHを初期化します
  • ターゲットユーザーのホームディレクトリへの変更
  • シェルをログインシェルにするために、シェルのargv[0]を「-」に設定します
0
ederag

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

ssh -O exit hostname

再度ログオンする前。

0
Tagwint