web-dev-qa-db-ja.com

setgidディレクトリの目的は何ですか?

Setgidがどのように機能するかは知っていますが、なぜそれが設計されているのかはわかりません。解決する問題を示す例はありますか?

11
Xiè Jìléi

Setgidファイル/バイナリは明らかに役に立たないかもしれませんが、setgidビットはディレクトリに適用すると非常に便利です。あなたが異なるワーキンググループの一部であり、それぞれが独自のUNIX(許可)グループを持っていると仮定します。確かに、プロジェクトフォルダーにsetgidビットを配置して、新しいファイルを作成するときに正しいグループ所有権が適用されるようにして、そのプロジェクトグループの同僚がそれらのファイルにアクセスできるようにしますか?

18
andol

主な用途は、ファイルのツリーのグループオーナーを保持することです。

[lockie@bubbles tmp]$ mkdir dir1 && touch dir1/file && mkdir dir1/dir
[lockie@bubbles tmp]$ mkdir dir2 && chgrp staff dir2 && chmod 2755 dir2 && touch dir2/file && mkdir dir2/dir
[lockie@bubbles tmp]$ ls -al dir1
total 32
drwxrwxr-x   3 lockie  lockie   4096 Dec 13 19:32 .
drwxrwxrwt 125 root root 20480 Dec 13 19:32 ..
drwxrwxr-x   2 lockie  lockie   4096 Dec 13 19:32 dir
-rw-rw-r--   1 lockie  lockie      0 Dec 13 19:32 file
[lockie@bubbles tmp]$ ls -al dir2
total 32
drwxr-sr-x   3 lockie  staff  4096 Dec 13 19:32 .
drwxrwxrwt 125 root root  20480 Dec 13 19:32 ..
drwxrwsr-x   2 lockie  staff  4096 Dec 13 19:32 dir  < note new dir is g+s, owned by "staff" group, so the setgid behaviour acts recursively
-rw-rw-r--   1 lockie  staff     0 Dec 13 19:32 file < note new file is owned by "staff" group
[lockie@bubbles tmp]$

これは、異なるユーザーがディレクトリの下でファイル/ディレクトリを作成/編集する環境で役立つ傾向があります。すべてのファイル/ディレクトリが同じグループを共有している場合、すべてのユーザーがファイル/ディレクトリを編集/変更できます(許可が許可されています):これにより状況が回避されます「xyzはファイルabcを所有しているため、編集できません」などです。

この方法でsetgidを使用する代わりに、grpidファイルシステムマウントオプションを使用できます。

男マウントから:

grpidまたはbsdgroups/nogrpidまたはsysvgroups

これらのオプションは、新しく作成されたファイルが取得するグループIDを定義します。 grpidが設定されると、それが作成されたディレクトリのグループIDを取得します。それ以外の場合(デフォルト)、ディレクトリにsetgidビットが設定されていない限り、現在のプロセスのfsgidを取得します。この場合、親ディレクトリからgidを取得し、ディレクトリ自体の場合は、setgidビットも取得します。

有効にすると、grpidマウントされたファイルシステムで作成されたfiles/dirsも親ディレクトリのグループを継承します。

[lockie@bubbles ~]$ mount | grep /home
/dev/mapper/VolGroup00-home on /home type ext3 (rw,grpid)
[lockie@bubbles ~]$ mkdir dir3 && touch dir3/file && mkdir dir3/dir
[lockie@bubbles ~]$ ls -al dir3
total 12
drwxrwxr-x  3 lockie users 4096 Dec 13 19:37 .
drwxrwxr-x 12 lockie users 4096 Dec 13 19:37 ..
drwxrwxr-x  2 lockie users 4096 Dec 13 19:37 dir < inherited "users" group from parent dir
-rw-rw-r--  1 lockie users    0 Dec 13 19:37 file  < inherited "users" group from parent dir
[lockie@bubbles ~]$

grpidオプションを使用すると、適切に人的エラーの可能性が減ります(ファイルシステムはdir権限に関係なく機能するため)。

13
Lockie