Linuxでグループ許可を継承する新しいファイルを取得する


87

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

私はウェブサーバーにすべてのウェブサイトを読んでもらいたい、ユーザーが自分のウェブサイトを変更できるようにしたい。

現時点では、フォルダに対するアクセス許可は次のように設定されています。

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

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


2
ACLを使用できますか?
slm

回答:


128

setgidビットの機能を説明しているように聞こえますが、それを設定したディレクトリは、その中に作成された新しいファイルに、親ディレクトリに設定された同じグループにグループを設定させます。

$ 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)を使用する必要があります。

ACL

ディレクトリの下に作成されるファイルのアクセス許可をもう少し制御したい場合はsomedir、次のACLルールを追加して、そのようなデフォルトのアクセス許可を設定できます。

$ 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ビットのみが有効になります。


それは、私が望んでいた機能を提供しているようです、ありがとう。
ジョンテート14

これも私の同様の問題を解決するようです。ただし、最後の文「私は、新しいファイルのrビットのみを強制的に有効にする」を理解していません。x許可が有効になっていないのはなぜですか?デフォルトで有効にする方法はありますか?
-yaobin

1
私はそれがセキュリティの事だと思う@yaobin、あなたは本当に、デフォルトでは、ファイルの実行したくない
cdarken

これは動作しませんunzipか?
datasn.io

@ datasn.io-のmanページをご覧くださいunzip。具体的には-Xスイッチ。
slm

37

TL:DR; 新しいファイルがコンテナフォルダのグループを継承するようにするには:

$ chmod g+s somefolder

注:受け入れられた答えで暗示されている、これは単なるスニペットです。


3
setgidは、新しいファイルとフォルダーに適切なグループがあることを意味しますが、ファイルをツリーに移動すると、適切な所有者が設定されないことに注意してください。ACLアプローチはこれに対処します(一般的に)。
クリスモーガン

@ChrisMorganそれにどのように対処しますか?私の場合、受け入れられた答えからの解決策は、移動されたファイルに対して何もしませんでした。
ダンM.

@DanM .:ファイルモードでは、継承されないアクセス許可を設定します。しかし、ACLを使用して、あなたはアクセス権を設定され、実行時にチェックされる(子供がそのオーバーライド、独自のACLを指定することができますが)継承を。
クリスモーガン

@ChrisMorganはい。どうやって?ACLフォームの承認済み回答を使用したソリューションが機能しません。
ダンM.

10

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.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.