Obtendo novos arquivos para herdar permissões de grupo no Linux

87

Estou tendo um problema com as permissões em um servidor Linux. Estou acostumado a BSD. Quando um diretório pertence a um grupo no qual o usuário não pertence, como www-data, os arquivos criados nele pertencem a esse grupo. Isso é importante porque quero que os arquivos sejam legíveis pelo servidor da web (que não executarei como raiz), mas assim um usuário ainda poderá colocar novos arquivos no diretório. Não consigo colocar os usuários no www-data porque eles podem ler todos os sites de outros usuários.

Quero que o servidor da Web leia todos os sites, quero que os usuários possam mudar seus próprios.

As permissões são definidas assim nas pastas no momento ....

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

É um comportamento padrão no BSD que as permissões funcionem dessa maneira. Como faço para obter o Linux para fazer isso?

John Tate
fonte
2
Você pode usar ACLs?
slm

Respostas:

128

Parece que você está descrevendo a funcionalidade do bit setgid em que, quando um diretório que o definiu, forçará qualquer novo arquivo criado a ter seu grupo definido no mesmo grupo definido no diretório pai.

Exemplo

$ whoami
saml

$ groups
saml wheel wireshark

configurar um diretório com permissões + propriedades

$ 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/

toque em um arquivo como saml neste diretório

$ whoami
saml

$ touch somedir/afile
$ ll somedir/afile 
-rw-rw-r--. 1 saml apache 0 Feb 17 20:11 somedir/afile

Isso fornecerá aproximadamente o que parece que você deseja. Se você realmente deseja exatamente o que descreveu, acho que precisará recorrer à funcionalidade Listas de controle de acesso para obter isso (ACLs).

ACLs

Se você deseja obter um pouco mais de controle sobre as permissões nos arquivos criados no diretório, somediradicione a regra de ACL a seguir para definir as permissões padrão dessa maneira.

antes

$ ll -d somedir
drwxr-s---. 2 saml apache 4096 Feb 17 20:46 somedir

definir permissões

$ sudo setfacl -Rdm g:apache:rx somedir
$ ll -d somedir/
drwxr-s---+ 2 saml apache 4096 Feb 17 20:46 somedir/

Observe o +no final, isso significa que este diretório tem ACLs aplicadas a ele.

$ 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::---

depois de

$ 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::---

Observe com as permissões padrão ( setfacl -Rdm) definidas para que as permissões sejam ( r-x) por padrão ( g:apache:rx). Isso força qualquer novo arquivo a ter apenas o rbit ativado.

slm
fonte
Isso parece fornecer a funcionalidade que eu queria, obrigado.
John Tate
Isso parece resolver meu problema semelhante também. No entanto, não entendo bem a última frase: "Isso força qualquer arquivo novo a ter apenas o seu r bit ativado". Por que a permissão x não está ativada? Existe uma maneira de habilitá-lo por padrão?
Yaobin 06/04/19
1
@yaobin Eu acho que é uma coisa de segurança, você realmente não quer ter um arquivo executável por padrão
cdarken
Isso não funciona unzip?
datasn.io 6/03
@ datasn.io - veja a página de manual do unzip. Especificamente o -Xinterruptor.
slm
37

TL: DR; para fazer com que novos arquivos herdam o grupo da pasta do contêiner:

$ chmod g+s somefolder

Nota: está implícito na resposta aceita, este é apenas um trecho.

também Malbarez
fonte
3
setgid significa que novos arquivos e pastas terão o grupo certo, mas lembre-se de que, se você mover arquivos para a árvore, eles não terão o proprietário certo configurado. A abordagem da ACL lida com isso (em geral).
Chris Morgan
@ChrisMorgan, como ele lida com isso? As soluções da resposta aceita não fizeram nada para arquivos movidos no meu caso.
Dan M.
@ DanM .: nos modos de arquivo, você define permissões que não são herdadas; mas com ACLs, você definir as permissões que são herdadas (embora as crianças podem especificar ACLs próprias que override isso), sendo verificado em tempo de execução.
Chris Morgan
@ChrisMorgan yes. Como você faz isso? A solução usando a resposta aceita pelo formulário da ACL não funciona.
Dan M.
10

Como complemento à resposta do slm, observe que, em um sistema de arquivos ext2 / 3/4, é possível replicar o comportamento do BSD que você descreve usando a bsdgroupsopção mount na partição. Na mount(1)página do manual:

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