web-dev-qa-db-ja.com

Linuxでグループ権限を継承するための新しいファイルの取得

Linuxサーバーの権限に問題があります。私はBSDに慣れています。ディレクトリがwww-dataなどのディレクトリを所有しているユーザーが存在しないグループによって所有されている場合、その中に作成されたファイルはそのグループによって所有されます。これは重要です。なぜなら、私はファイルをWebサーバー(私はrootとして実行しません)で読み取れるようにしたいのですが、ユーザーはまだ新しいファイルをディレクトリに置くことができます。ユーザーをwww-dataに入れることはできません。他のすべてのユーザーのWebサイトを読み取ることができるからです。

ウェブサーバーですべてのウェブサイトを読み取れるようにしたい。ユーザーが自分のウェブサイトを変更できるようにしたい。

現在のところ、フォルダのアクセス権はこのように設定されています。

drwxr-x--- 3 john www-data 4096 Feb 17 21:27 john

これは、このように機能するための許可に対するBSDの標準的な動作です。 Linuxでこれを行うにはどうすればよいですか?

96
John Tate

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

これにより、おおよそのサウンドが得られます。あなたが本当にあなたが説明したものを本当に望んでいるなら、それを取得するためにアクセス制御リスト機能に頼る必要があると思います。

ACL

ディレクトリ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ビットのみが有効になります。

134
slm

TL:DR; newファイルにコンテナフォルダのグループを継承させるには:

$ chmod g+s somefolder

注:承認された回答に含まれていますが、これは単なる抜粋です。

49
alo Malbarez

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.
10
user60039