chownは非ルートユーザーに許可されているようです

chownは非ルートユーザーに許可されているようです

当社では、LDAP 認証と、おそらく私がよく理解していない他のものを使用しています。そのため、次の質問はその結果である可能性があります。chownコマンドの奇妙な動作を見つけましたが、これが正常かどうかはわかりません。これが私のシナリオです。

ユーザー mark の GID は SK001936 で、mark のホーム ディレクトリの所有者グループは SK001778 です。ご覧のとおり、これらは同じではありません。グループ SK001778 は、ユーザー mark のホーム ディレクトリを所有者 (mark) として、すべての操作 (rwx) を許可されています。

[mark@machine ~]$ id
uid=48447(mark) gid=41795(SK001936) groups=40119(SUB_SK001936_PPS),41795(SK001936)
[mark@machine ~]$ ls -lad .
drwxrwxr-x   6 mark SK001778  4096 Oct 10 13:30 .

ユーザー michael と mark の GID は両方とも SK001936 です。

[michael@machine mark]$ id
uid=40570(michael) gid=41795(SK001936) groups=40119(SUB_SK001936_PPS),41795(SK001936)
[mark@machine ~]$ id
uid=48447(mark) gid=41795(SK001936) groups=40119(SUB_SK001936_PPS),41795(SK001936)

ユーザー michael は、ユーザー mark のホーム ディレクトリにファイルを作成できません。これは、michael が、mark のホーム ディレクトリへの完全な (rwx) アクセス権を持つグループ (SK001778) に属していないことが原因です。

[michael@machine mark]$ touch michael
touch: cannot touch `michael': Permission denied

通常の状況では、ユーザーはファイルの所有者であっても chown を発行できません。ただし、この例では、ホーム ディレクトリの所有者 (mark) は、自分のホーム ディレクトリの所有者グループを変更できます (したがって、このグループに属するユーザーは自分のホーム ディレクトリにアクセスできるようになります)。

[mark@machine ~]$ chown mark:SK001936 .

現在、マークのホーム ディレクトリにアクセスできるグループは、マイケルの GID と同じグループであるため、マイケルはマークのホーム ディレクトリでファイルやフォルダを作成/削除できるようになります。

[michael@machine mark]$ touch michael

mark は、自分のホーム ディレクトリのグループ所有権を元に戻すことができません (このため、chown を発行できるのは root のみであることに注意してください。なぜ一般ユーザーはファイルを変更できないのか):

[mark@machine ~]$ chown mark:SK001778 .
chown: changing ownership of `.': Operation not permitted

私の質問は、マークがホームディレクトリのグループ所有権を変更できたのはなぜかということです。宣言したchown は root のみが発行できます。ボックスは RedHat 5.6 です。

答え1

グループのみを変更する方法でを使用するとchown、 と同じように動作しますchgrp。ファイルまたはディレクトリの所有者は、自分がメンバーになっている任意のグループにグループを変更できます。

このように機能するのは、 コマンドchownchgrpコマンドの両方が同じ基礎となるシステム コールを使用して、所有者とグループの両方を変更できるためです。 システム コールは、権限チェックを適用するものです。 コマンドとコマンドchownの唯一の違いは、変更内容を指定するために使用する構文です。chownchgrp

Mark はグループ SK001778 のメンバーではないため (また、グループ メンバーシップによって制限されない root ではないため)、グループを SK001778 に戻すことはできません。

答え2

ユーザーは、これらのグループのいずれかに属している場合、これを使用してグループを変更できます。

私が以下のグループに属しているとします。

$ groups
saml vboxusers jupiter newgrp

そして、私はファイルを持っています:

$ ls -l | grep afile
-rw-rw-r--   1 saml saml        0 Oct 10 11:29 afile

このファイルのグループを次のように変更します:L

$ chown saml.newgrp afile 

$ ls -l | grep afile
-rw-rw-r--   1 saml newgrp        0 Oct 10 11:29 afile

次のように使用することもできますchown:

$ chown .saml afile 

$ ls -l|grep afile
-rw-rw-r--   1 saml saml        0 Oct 10 11:29 afile

関連情報