Linuxサーバーの権限に問題があります。私はBSDに慣れています。ディレクトリがwww-dataなどのディレクトリを所有しているユーザーが存在しないグループによって所有されている場合、その中に作成されたファイルはそのグループによって所有されます。これは重要です。なぜなら、私はファイルをWebサーバー(私はrootとして実行しません)で読み取れるようにしたいのですが、ユーザーはまだ新しいファイルをディレクトリに置くことができます。ユーザーをwww-dataに入れることはできません。他のすべてのユーザーのWebサイトを読み取ることができるからです。
ウェブサーバーですべてのウェブサイトを読み取れるようにしたい。ユーザーが自分のウェブサイトを変更できるようにしたい。
現在のところ、フォルダのアクセス権はこのように設定されています。
drwxr-x--- 3 john www-data 4096 Feb 17 21:27 john
これは、このように機能するための許可に対するBSDの標準的な動作です。 Linuxでこれを行うにはどうすればよいですか?
setgid bit 機能を記述しているように聞こえるかもしれませんが、それが設定されているディレクトリが、その中に作成されたすべての新しいファイルに、親ディレクトリで設定されているのと同じグループを強制的に設定させます。
$ whoami
saml
$ groups
saml wheel wireshark
perms +所有権でディレクトリをセットアップします
$ Sudo mkdir --mode=u+rwx,g+rs,g-w,o-rwx somedir
$ Sudo chown saml.Apache somedir
$ ll -d somedir/
drwxr-s---. 2 saml Apache 4096 Feb 17 20:10 somedir/
このディレクトリでファイルをsamlとしてタッチします
$ whoami
saml
$ touch somedir/afile
$ ll somedir/afile
-rw-rw-r--. 1 saml Apache 0 Feb 17 20:11 somedir/afile
これにより、おおよそのサウンドが得られます。あなたが本当にあなたが説明したものを本当に望んでいるなら、それを取得するためにアクセス制御リスト機能に頼る必要があると思います。
ディレクトリsomedir
の下に作成されるファイルのアクセス許可をもう少し制御したい場合は、次のACLルールを追加して、デフォルトのアクセス許可を設定できます。
before
$ ll -d somedir
drwxr-s---. 2 saml Apache 4096 Feb 17 20:46 somedir
権限を設定
$ Sudo setfacl -Rdm g:Apache:rx somedir
$ ll -d somedir/
drwxr-s---+ 2 saml Apache 4096 Feb 17 20:46 somedir/
+
は最後にあります。つまり、このディレクトリにはACLが適用されています。
$ getfacl somedir
# file: somedir
# owner: saml
# group: Apache
# flags: -s-
user::rwx
group::r-x
other::---
default:user::rwx
default:group::r-x
default:group:Apache:r-x
default:mask::r-x
default:other::---
後
$ touch somedir/afile
$ ll somedir/afile
-rw-r-----+ 1 saml Apache 0 Feb 17 21:27 somedir/afile
$
$ getfacl somedir/afile
# file: somedir/afile
# owner: saml
# group: Apache
user::rw-
group::r-x #effective:r--
group:Apache:r-x #effective:r--
mask::r--
other::---
デフォルトの権限(setfacl -Rdm
)権限が(r-x
)デフォルトでは(g:Apache:rx
)。これにより、新しいファイルはr
ビットのみが有効になります。
TL:DR; newファイルにコンテナフォルダのグループを継承させるには:
$ chmod g+s somefolder
注:承認された回答に含まれていますが、これは単なる抜粋です。
Slmの回答を補足するものとして、ext2/3/4ファイルシステムでは、パーティションでbsdgroups
マウントオプションを使用することで、BSDの動作を複製できることに注意してください。 mount(1)
manページから:
grpid|bsdgroups and nogrpid|sysvgroups
These options define what group id a newly created file gets.
When grpid is set, it takes the group id of the directory in
which it is created; otherwise (the default) it takes the fsgid
of the current process, unless the directory has the setgid bit
set, in which case it takes the gid from the parent directory,
and also gets the setgid bit set if it is a directory itself.