web-dev-qa-db-ja.com

Linux:ファイルのグループ所有権を失う

Linuxで作成した多数のファイルを含むプロジェクトがあります。

そして、別のユーザーに書き込み権限を与える必要がありました。そこで、彼と私がメンバーである「dev」グループを作成し、ファイルの所有権をこのグループに変更しました。

通常のファイルには、次の権限があります。

-rw-rw-r--  1 phil dev   5617 Jul 14 15:45 profile.html

ただし、ファイルprofile.htmlを編集すると、このように戻り、同僚は編集できなくなります。

-rw-rw-r--  1 phil phil  5617 Jul 14 15:45 profile.html

このように元に戻らないようにするにはどうすればよいですか?所有権を変更するのは間違ったことでしたか?それとも間違ったオプションで行われたのですか?それとも、これは私のエディター(emacs)構成と関係がありますか?

8
interstar

含まれているフォルダーで、グループをdevに変更してから、mark itset-gidを使用します。

chgrp dev <containing-folder>
chmod g+ws <containing-folder>

Set gidビットは、そのフォルダーに作成されたファイルをフォルダーのグループを継承するようにし、新しいフォルダーにsetgidビットをマークします。ファイルをディレクトリに移動すると、既存のアクセス許可が保持されるため、注意が必要です。

17
Frenchie

ディレクトリのsetgidビット を使用して、子によるグループの所有権を保持できます。

chown :dev directory/
chmod g+s directory/
8
Dan Carley

Grpidマウントオプションを使用してファイルシステムをマウントすることもできます(ext2/3を想定)。これにより、ディレクトリに新しいファイルを作成するたびに、グループ所有者が親ディレクトリと同じになります。したがって、これらのファイルが存在するディレクトリがグループ 'dev'によって所有されるようにするだけです。

ルートパーティションの場合に再マウントするには(例):

Sudo mount -o remount,grpid,rw,relatime,errors=remount-ro /

'man mount 8'から:

grpid or bsdgroups / nogrpid or sysvgroups
These options define what group id a newly created file gets.

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

7
Kyle Brandt

Emacsのデフォルトの動作は、名前を変更してバックアップファイルを作成することです。 emacsマニュアルから:

Emacsは、元のファイルの名前をバックアップファイルになるように変更してから、保存されているバッファーを新しいファイルに書き込むことができます。この手順の後、元のファイルの他の名前(つまり、ハードリンク)はバックアップファイルを参照するようになります。新しいファイルは、編集を行うユーザーが所有し、そのグループは、そのディレクトリのユーザーによって、そのディレクトリのユーザーによって書き込まれた新しいファイルのデフォルトです。

これを変更する方法はいくつかあります。

  • 他の人が説明するように、グループとスティッキービットを設定します。
  • ファイルを編集する前に「newgrpdev」を実行して、デフォルトのグループがdevになるようにします。

またはemacs固有:

  • Emacsでfile-precious-flagを設定します。これにより、グループを保持するように動作が変更されますが、他の副作用があります。
  • Emacsでbackup-by-copying-when-mismatchを設定します。これは、所有者またはグループが変更されるときに名前を変更するのではなく、コピーを使用します。

だから、あなたの.emacsに追加してください:

(setq backup-by-copying-when-mismatch 't)

私の好みは実際には「newgrpdev」です。これは「個人」モード(編集するファイルは私のものです)からグループ開発モード(現在編集するファイルはグループ間で共有されます)への明示的な切り替えです。

1
jmanning2k