Permissões definidas em novos arquivos e pastas por padrão ACLs

4

Eu quero configurar a permissão padrão dentro de uma pasta, para que todas as novas pastas e arquivos criados tenham essa permissão padrão.
Então fiz algumas pesquisas e o melhor tópico que encontrei foi este .

Então eu criei este pequeno "teste":

#!/bin/bash

# setup folder
rm -rf ./test
mkdir ./test
cd ./test

# Reset all files/folders
sudo chmod -R 0000 ./ # delete all permissions
sudo chmod -R -st ./ # remove all special bits
sudo setfacl -Rdx u::,g::,o:: ./ # remove all default user/group permissions

# set new permissions and ownership
sudo chown -R christopher:users ./ # Set user and group for all files/folders
sudo chmod -R 550 ./ # set default permissions to all files/folders
sudo chmod 750 ./ # set folder main permission
sudo setfacl -d -m u::rx ./ # set user default permission (same as 550)
sudo setfacl -d -m g::rx ./ # set group default permission (same as 550)

# test the default permissions
nano myFile # write some data in it and save

Agora eu quero testá-lo.
Primeiro com getfacl ./ o que cria esta saída:

# file: .
# owner: christopher
# group: users
user::rwx
group::r-x
other::---
default:user::r-x
default:group::r-x
default:other::---

Depois disso, também tentei getfacl ./myFile com a seguinte saída:

# file: myFile
# owner: christopher
# group: users
user::r--
group::r--
other::---

Isso obviamente não está funcionando, então tenho duas perguntas:

  1. O que estou fazendo de errado? O novo arquivo criado myFile deve ter as permissões r-xr-x --- como no comando setfacl especificado. Então, por que não é esse o caso?
  2. Isso também não está funcionando, quando eu configuro o sinalizador SUID / GUID / OUID (sst). Mas também não tenho certeza, como usá-los porque a definição diz set the SUID or GUID flag on a folder will inherit its own permission to new created files within the folder . Há alguma permissão? ou apenas o usuário / grupo do proprietário?
  3. Talvez você possa me ajudar a consertar meu pequeno roteiro. Mas também se você fizer isso, ainda há o problema, que eu preciso de permissão padrão diferente para novas pastas criadas e também permissão padrão para novos arquivos criados. Porque novas pastas criadas devem sempre obter a permissão 550 enquanto novos arquivos criados devem sempre obter a permissão 440. Em comandos como find -type a diferença pode ser feita. Então eu poderia fazer algo como find ./ -type d -exec chmod 550 {} \; o que instantaneamente define a permissão de todas as pastas para 550. ( type f analógico para arquivos). Mas isso só é possível em pastas / arquivos já criados e existentes. Mas preciso de uma permissão "padrão" para novas pastas e arquivos criados, mas permissões padrão para ambos separadamente.
por christopher2007 26.08.2016 / 11:15

1 resposta

2

As permissões definidas pela ACL padrão são mascaradas com qualquer que seja o modo que o programa que cria o arquivo fornece. Geralmente, um programa que cria um arquivo regular configura as permissões para 0666 (ou seja, nenhum bit de execução) e permite que o umask manipule a remoção do acesso do grupo e de outros. Para diretórios, o modo geralmente é definido como 0777 , de modo que os x-bits são , uma vez que são geralmente necessários.

Um programa que cria um arquivo "privado", como chaves SSH, especifica as permissões como 0600 , para garantir que ninguém, a não ser o usuário, tenha acesso.

O manual acl(5) diz que:

OBJECT CREATION AND DEFAULT ACLs

  1. The access ACL entries corresponding to the file permission bits are modified so that they contain no permissions that are not contained in the permissions specified by the mode parameter.

Portanto, como a ACL u:: corresponde aos bits de permissão usuais para o usuário do arquivo, as permissões são mascaradas pelo que o programa de criação fornece. (Em certo sentido, a ACL padrão parece tomar o lugar da umask.) Eu suspeito que, se você criar um diretório, verá que ele obtém o x -bit como você queria.

Tecnicamente, isso não afeta as entradas da ACL para um usuário específico , como em u:foo:rwx , mas elas são limitadas pela máscara ACL. A máscara tem uma correspondência com os bits de permissão de grupo tradicionais, e parece que a regra citada acima também se aplica à máscara, de forma que a máscara de ACL é limitada pelos bits de permissão de grupo definidos quando o arquivo é criado.

Vamos tentar:

$ mkdir dir ; chmod 750 dir ; setfacl -d -m u::rx -m g::rx -m u:foo:rwx dir 
$ touch dir/file ; mkdir dir/subdir

O arquivo criado tem os x-bits mascarados ( getfacl aqui mostra os bits definidos e os valores efetivos após a aplicação da máscara):

$ getfacl dir/file
user::r--
user:foo:rwx                    #effective:rw-
group::r-x                      #effective:r--
mask::rw-
other::---

Mas o diretório não:

$ getfacl dir/subdir/
user::r-x
user:foo:rwx
group::r-x
mask::rwx
...

Isso pode responder (1) e (3). Quanto a (2): IIRC, o setgid -bit ( g+s ) em um diretório faz com que novos arquivos criados dentro dele herdem o grupo do diretório (não o modo ). O bit pegajoso ( +t ) controla a exclusão de arquivos não pertencentes a você e, na verdade, não tenho idéia do que o bit setuid ( u+s ) faria em um diretório.

    
por 26.08.2016 / 12:00

Tags