ファイルの読み取り、書き込みを許可するが削除は許可しない方法


12

私はユーザーに他のユーザーディレクトリに書き込みおよび読み取りファイルを作成する機能を与えたいが、作成後にファイルを削除するオプションがないようにしたい(スティッキービットはここでは機能しない...)例:

私は、ユーザーが持っているmanager ディレクトリでrepository
、私は、ユーザー持っているworker1必要が書き込みにファイルをすること/manager/repositoryが、ファイルを削除することはできません
私は、ユーザーが持っているのworker2に対して、書き込みファイルへの必要性という/manager/repository ファイルを削除することはできませんが
、私は、ユーザーが持っているしworker3ていることへの書き込みファイルへの必要性/manager/repository はなくはできませんファイルを削除する

しかしworker 1-2-3のみ作成後にファイルを削除することはできませんmanagerし、rootファイルを削除することができますworker 1-2-3作成します。

私はいくつか試したchownし、chmod成功せずにスティッキービットを適用するとトリック。


1
くださいworker*ユーザーが特定の方法でディレクトリに書くのか?ログファイルがここに入るとコメントで述べましたが、それは、特定の実行可能ファイルがここにファイルを作成するために起動されることを意味しますか?その場合、実行可能ファイルをとして実行する権限をworkerグループに与えることができます。次に、実行可能ファイルは、ワーカーとして読み取り可能なユーザーとしてログを作成します。sudomanagermanager
Centimane

ユーザーがファイルを変更できる場合は、その内容も消去できるため、効果的に「削除」できます。ファイルシステムではなく、何らかの「提出」インターフェースが必要なようです。メールが最も簡単です。
ybungalobill

回答:


8

Windowsとは異なり、Unix / Linuxでは明確な削除権限はありません。ファイルを削除(または作成または名前変更)する権限は、それを含むディレクトリにバインドされます。/manager/repository/ワーカーによるファイルの作成、削除、名前変更を拒否するには、ワーカーの書き込み権限を削除します。

ファイルの作成は許可することはできませんが、ファイルの削除を拒否することはできます。


ログファイルの場合は常にファイルが書き込まれるため、書き込み権限を削除するには
user63898

。それが真であるために使用されるが、多くの近代的なシステムは、Windows NTのACLとして同様の機能を与えるのFreeBSD、SolarisまたはLinux(Richaclパッチ)でサポートされている拡張ACL(のNFSv4 ACLをサポートし、あなたの株式のLinuxディストリビューションは、おそらくかかわらず、それを持っているではありません。
StéphaneChazelas 2016

@ user63898は、ファイル自体からではなく、ファイルが存在するディレクトリから書き込み権限を削除します。
GnP 2016

6

まず、システムでACLが有効になっていることを確認してから、このコマンドを実行します

setfacl -d -R -m user::rwx,user:worker1:---,user:worker2:---,user:worker3:--- \
/manager/repository

使い方

  • このコマンドは、ディレクトリの所有者に読み取り、書き込み、実行のアクセス許可を与えます/manager/repository。それはのためにすべての権限を取り消しますworker1worker2worker3

  • これにより、他のユーザーには読み取りと書き込みのアクセス権が付与されますが、削除アクセス権は拒否されます。


からman setfacl

-d, --default
       All  operations  apply to the Default ACL.

-R, --recursive
       Apply operations to all files and directories recursively.

-m, --modify
       Options to modify the ACL of a file or directory.

おかげで、問題はユーザーが常に作成されることです。そしていくつかは管理者によって削除されます。つまり、setfaclを使用してディレクトリを毎回更新する必要があるということです。より一般的な解決策はありますか?
user63898 2016

はい、worker1からファイルを作成しようとするとtouch /manager/repository/x.txt im getting:touch:cannot touch `/manager/repository/x.txt ':Permission denied
user63898

ls -ldレポジトリを取得すると、依然としてアクセス許可が拒否されますim
get

setfacl -d -R -m user :: rwx、user:worker1:--- repository /を実行し、worker1 touch /manager/repository/x.txtからファイルを作成しようとすると、im得る:touch:タッチできない `/ manager /repository/x.txt ':アクセスが拒否されました
user63898

5
これはまだ誰かが空のファイルをここに書き込むことを許可しませんか?同様にecho " " > $file、ファイルの内容を ""で上書きします。これは技術的には書き込みですが、内容を効果的に削除します。ここでは、svnのような実際のレポが最善の策のようです。
2016

3

アクセス許可でこれを行うには、NFSv4 ACLと同様のACLをサポートするシステムが必要です。たとえば、FreeBSDでは、ファイルシステムがnfsv4aclsフラグでマウントされている場合、次のようにできます。

mkdir testdir
chown manager:worker-group testdir
chmod 775 testdir
setfacl -m group@:D::deny testdir

グループのメンバーへのアクセス許可を明示的に拒否します。delete_childworker-group

ただし、ワーカーは自分が作成したファイルの所有者であるため、それらのACLを変更することができ、自分にdelete権限を付与することdelete_childで、親ディレクトリの権限よりも優先されることに注意してください。それを回避する方法があることを確認してください(少なくともFreeBSDのUFSファイルシステムでは)。たとえば、次のことができます。

$ touch file
$ rm -f file
rm: file: Operation not permitted
$ setfacl -m owner@:d::allow file
$ rm -f file
$

0

/manager/repositoryフォルダから書き込み権限を取得します。したがって、root以外のすべてのユーザーは、内のファイルに対して書き込みまたは削除を行うことができ/manager/repositoryますが、このディレクトリからファイルを削除することはできません。

chmod 755 /manager/repository

0

ファイルとフォルダは変更できますが、削除することはできません。

属性を削除するには、次のコマンドを実行します。

ファイルの場合:

$ sudo chattr -R -a file.txt

ディレクトリの場合:

$ sudo chattr -R -a dir1/

(1)ドキュメントによれば、a属性は追加のみを意味します。ユーザーはこれらのファイルを編集できますか?(2)aディレクトリに属性を設定するとどのような影響がありますか?
スコット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.