特定のディレクトリ内のファイルを作成および読み取るためのアクセス許可をユーザーに与えますが、ファイルを変更または削除することはできません。ユーザーがファイルに追加できる場合は問題ありませんが、私はそうではありません。これはUbuntu Linuxにあります。
これは標準のUnixファイル許可では不可能だと思いますが、おそらくこれはACLを使用して可能ですか?ユーザーは常にSFTPを使用して接続するため、SFTP内でこれを制御する方法が(OSのアクセス許可ではなく)あれば、問題ありません。
明確にするために、私は次のことを望みます。
なぜ私がこれをしたいのか疑問に思っているのなら、それはDuplicatiバックアップシステムをランサムウェアに耐性のあるものにすることです。
次のようにbindfs
を使用できます。
_$ ls -ld dir
drwxr-xr-t 2 stephane stephane 4096 Aug 12 12:28 dir/
_
そのディレクトリはstephaneによって所有され、stephaneグループ(stephaneが唯一のメンバー)を持ちます。また、ユーザーが自分が所有していないエントリの名前を変更したり削除したりできないようにするt
にも注意してください。
_$ Sudo bindfs -u root -p u=rwD,g=r,dg=rwx,o=rD dir dir
_
bindfs
dir
は、ファイルとディレクトリの所有権と権限が固定されています。すべてのファイルはroot
が所有しているように見えます(ただし、実際のディレクトリの下では、まだstephaneが所有しています)。
ディレクトリは_drwxrwxr-x root stephane
_権限を取得しますが、他のタイプのファイルは_-rw-r--r-- root stephane
_権限を取得します。
_$ ls -ld dir
drwxrwxr-t 2 root stephane 4096 Aug 12 12:28 dir
_
これで、ディレクトリが書き込み可能であるため、ファイルの作成が機能します。
_$ echo test > dir/file
$ ls -ld dir/file
-rw-r--r-- 1 root stephane 5 Aug 12 12:29 dir/file
_
ただし、そのファイルに対して2番目のwriteopen()
を実行することはできません。これは、ファイルに対する権限がないためです。
_$ echo test > dir/file
zsh: permission denied: dir/file
_
(追加は許可されないことに注意してください(初期要件の一部ではないため))。
制限:dir
ビットのためにt
のエントリを削除または名前変更することはできませんが、そこに作成する新しいディレクトリにはt
ビットがありません。そこで、エントリの名前を変更したり、エントリを削除したりできます。
chattr +a
オプションは追加のみを許可します。ファイルはそのように変更できますが、ファイルに追加(つまり、行を追加)することによってのみ変更できます。既存のファイルは削除できませんが、新しいファイルを作成できます。これはあなたのニーズに合うかもしれません:
Sudo chattr -R +a /dir/to/apply/to
man chattr
から
「a」属性が設定されたファイルは、書き込みのために追加モードでのみ開くことができます。この属性を設定またはクリアできるのは、スーパーユーザーまたはCAP_LINUX_IMMUTABLE機能を持つプロセスだけです。
(ディレクトリにも適用されることに注意してください)
したがって、リストは次のようになります。
echo hello > test # succeeds, because test doesn't exist, and creation is allowed
echo hello2 > test # fails, because test already exists, and overwriting is not allowed
echo hello3 >> test # succeeds, because appending is allowed
cat test # succeeds, because reads are allowed
rm test # fails, because delete is not allowed