
ユーザー用に複数のフォルダー (userA/、userB/ など) を作成しています。これらのフォルダーでは、誰でも任意のディレクトリにファイル/フォルダーを作成/読み取りできます (userC は userA/ 内に fileX を作成できます)。ただし、そのフォルダー内のファイルを変更または削除できるのは、ディレクトリの所有者だけです (userC は userC/ 内のファイルのみを変更/削除できます)。
ディレクトリの権限を 7777 に変更しようとしましたが、SUID はディレクトリに適用されません。
アップロードされたファイルがディレクトリ所有者を継承できるようにするにはどうすればよいですか?
編集:UserZ はディレクトリ dirZ/ を所有します。UserZ は dirZ/ 内のすべてのものを作成 (アップロード)、変更、削除、および読み取りできます。
同様に、UserY はディレクトリ dirY/ を所有します。User Y は dirY/ 内のすべてのものを作成、変更、削除、および読み取りできます。
UserY は dirZ/ にアクセスできます。UserY は dirZ/ 内の任意のものを作成または読み取ることができます。UserYできないdirZ/ 内のあらゆるものを変更または削除します。
同様に、UserZ は dirY/ にアクセスできます。UserZ は dirY/ 内の任意のものを作成または読み取ることができます。UserZできないdirY/ 内のあらゆるものを変更または削除します。
答え1
ほとんどの UNIX バリアントでは、正当な理由により、ユーザーが別のユーザーに属するファイルを作成することは許可されていません。
それが必要になるのはむしろ奇妙です。userC が / 内のファイルを作成および削除できるようにするにはuserA
、userC にディレクトリへの書き込み権限を与えます。あなたの設定では、最も簡単な方法は、これらすべてのユーザーを共通のグループに入れてmygroup
、そのグループがすべてのユーザー ディレクトリに書き込みできるようにすることです。
chgrp mygroup userA userB userC
chmod g+w userA userB userC
使用アクセス制御リスト (ACL)より柔軟な対応が必要な場合(複数のグループにこれらのディレクトリへのアクセスを許可するなど)。ディレクトリ内のすべての新規ファイルをグループがアクセスできるようにするシステムで ACL をアクティブ化する際にサポートが必要な場合。
ユーザーが自分のディレクトリ以外のディレクトリにあるファイルを変更できるようにするには、ファイルをグループ書き込み可能にするか、ディレクトリにデフォルトの ACL を設定します。
setfacl -d -m group:mygroup:rwx userA userB userC
ファイルの所有者を本当に変更する必要がある場合 (ただし、すべてのファイルが同じユーザー セットにアクセス可能なので、変更がなぜ問題になるのでしょうか)、ファイルのアップロード時に root として実行されるジョブを通じて変更することができます。Linux の場合inotifyをベースにしたツールを使うことができます本当に必要な場合はそうしますが、アップロードを実行するツールを変更した方がよいでしょう (1 つには、inotify ベースのソリューションでは、ファイルの所有権が間違っている時間が少しあります)。
答え2
Unix ファイル システムには、ファイルの作成と変更を区別できる Windows のようなアクセス制御がありません。ユーザーにディレクトリ内にファイルを作成する権限 (chmod +w) を与えると、そのユーザーはファイルを変更できるようになります。したがって、この追加機能はサーバー側で提供する必要があります。
例えばvsftpd
、chown
匿名接続 - 他のユーザー アカウントにも (多かれ少なかれ簡単に) 拡張できると予想されます。また、他の FTP デーモンにはすでにこの機能が搭載されている可能性があります。
FTPを使用する必要がない場合は、Samba
必要なことはできそうです - (1 株あたり)inherit owner
オプションを確認してください。