Quando eu uso setfacl para gerenciar quais permissões os arquivos / diretórios filhos devem ter, por algum motivo os arquivos têm todas as permissões, exceto a de executar (“x”).
someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ getfacl . # file: . # owner: someuser # group: webs # flags: -s- user::rwx group::rwx other::rwx default:user::rwx default:group::rwx default:other::rwx someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ touch file someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ mkdir dir someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ ls -l total 4 drwxrwsrwx+ 2 someuser webs 4096 paź 31 13:35 dir -rw-rw-rw- 1 someuser webs 0 paź 31 13:35 file
Achei que tivesse algo a ver com umask, mas alterá-lo de várias maneiras nunca dá o resultado esperado, a menos que esteja faltando alguma coisa.
Como isso pode ser consertado?
Resposta
A resposta de Hauke Laging está tentando dizer:
Qualquer programa que cria um arquivo ou diretório especifica o modo (permissões) que deseja que esse arquivo tenha. Quase sempre é codificado no programa C (ou em qualquer linguagem que seja usada ) e dificilmente é diretamente acessível ao usuário. Então, o valor umask
e a ACL padrão podem desativar os bits de permissão, mas não adicione-os.
Seu problema é que, embora mkdir
especifique um modo de 777 (rwxrwxrwx
), quase todos programas que criam arquivos especificam 666 (rw-rw-rw-
). Isso inclui touch
, o shell (para redirecionamento de E / S; por exemplo, program > file
), os editores (vi
, vim
, emacs
, etc…), dd
, split
e assim por diante. Portanto, você não obterá permissões de rwxrwxrwx
em um arquivo simples imediatamente após a criação (por qualquer um desses programas), não importa o que você faça com ACLs; você deve criar o arquivo e, em seguida, chmod
.
Existem algumas exceções a esta regra:
-
cp
e programas relacionados (por exemplo,cpio
,tar
, etc.) que copiam ou re -criar um arquivo, que irá (tentar) definir o novo arquivo para o mesmo modo do arquivo original. - Compiladores, que criam arquivos binários executáveis, especificam um modo de 777 (pelo menos, se o a compilação for bem-sucedida), então o usuário será capaz de executar o programa que acabou de compilar.
Comentários
Resposta
Você não menciona o que ” resultado esperado “é. Presumo que sejam os arquivos com os x
bits definidos.
Você não pode impor isso como ACL padrão (como umask) apenas impede as permissões, mas não os define. Um novo diretório ou arquivo não obtém mais permissões (para usuário, grupo e outros) do que open()
ou mkdir()
chamada que o cria solicitações.
Para arquivos geralmente, apenas a permissão de leitura e gravação é solicitada. Mas se um compilador cria um arquivo binário, ele também solicita permissão de execução.
Comentários
- Sua resposta é bastante caótica do ponto de vista em inglês. Você pode corrigi-la? Eu ‘ não tenho certeza o que você quer dizer. Dê uma olhada no meu código. Para diretórios, sempre funciona.Para arquivos, também sempre funciona, exceto o bit ” x “. Além disso, se ‘ não for a maneira correta de fazer isso, o que é, exceto definir um umask cada vez que um diretório é acessado?
Resposta
$ touch file && chmod a+x file
As explicações em outras respostas são excelentes. Quero adicionar algo que realmente dê uma resposta à pergunta,
Como isso pode ser corrigido?
com código específico. @Scott disse como fazer isso,
você deve criar o arquivo e, em seguida,
chmod
ele.
O código em minha resposta mostra como fazer isso e destaca colocando-o primeiro.
Mais explicações
Para começar, para simplificar, eu simplesmente adiciono ao touch
comando dado pelo OP, especificamente touch file
torna-se touch file && chmod a+x file
.
someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ touch file && chmod a+x file someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ mkdir dir someuser@someuser-MS-7816:/opt/lampp/htdocs/project$ ls -l total 4 drwxrwsrwx+ 2 someuser webs 4096 paź 31 13:35 dir -rwxrwxrwx 1 someuser webs 0 paź 31 13:35 file
Aqui, configurarei a mesma situação em minha máquina (Cygwin) para mostrar que funciona e, em seguida, farei o mesmo em uma caixa virtual do Ubuntu para mostrar as diferenças na configuração . (Observe que o comando real para consertar as coisas não muda, eu simplesmente quero mostrar algumas diferenças que podem surgir com setfacl
, bem como verificar por mim mesmo se funciona .)
$ uname -a | head -n 1 CYGWIN_NT-10.0 my_machine 2.10.0(0.325/5/3) 2018-02-02 15:16 x86_64 Cygwin $ pwd /home/me $ mkdir user294034 $ setfacl -m u::rwx user294034/ $ setfacl -m d:u::rwx user294034/ $ setfacl -m g::rwX user294034/ setfacl: illegal acl entries $ setfacl -m g::rws user294034/ setfacl: illegal acl entries $ # I guess I don"t know how to get the `flags: -s-` on Cygwin $ setfacl -m g::rwx user294034/ $ setfacl -m d:g::rwx user294034/ $ setfacl -m o::rwx user294034/ $ setfacl -m d:o::rwx user294034/ $ cd user294034 $ getfacl . # file: . # owner: me # group: my_group user::rwx group::rwx other:rwx default:user::rwx default:group::rwx default:other:rwx $ # I admitted that I don"t know how to get `# flags: -s-` $ umask 0022 $ umask 0000 $ touch file $ mkdir dir $ # Here, we"ll see the same problem $ ls -l total 0 drwxrwxrwx+ 1 me my_group 0 Sep 18 20:31 dir -rw-rw-rw- 1 me my_group 0 Sep 18 20:31 file $ # Here, we"ll fix the problem $ rm file $ touch file && chmod a+x file $ ls -l total 0 drwxrwxrwx+ 1 me my_group 0 Sep 18 20:31 dir -rwxrwxrwx 1 me my_group 0 Sep 18 20:32 file
Resposta
Você pode tentar este script simples substituindo os registros ACL de cada arquivo e diretório, fornecendo as permissões padrão especificadas.
$ cd ~ $ mkdir .config $ cat <<"EOF" >> .config/dacl user::rwx group::rwx other:r-x default:user::rwx default:group::rwx default:other:r-x EOF $ cat <<"EOF" >> .config/facl user::rw- group::rw- other:r-- default:user::rw- default:group::rw- default:other:r-- EOF $ cd / $ find $1 -type d -exec setfacl -f ~/.config/dacl {} \; $ find $1 -type f -exec setfacl -f ~/.config/facl {} \; $ getfacl . # file: . # owner: MyUser # group: Administrators user::rwx group::rwx other::r-x default:user::rwx default:group::rwx default:other::r-x
user
,group
eother
Entradas ACL. Se você tiver entradas ACL padrão para usuários ou grupos nomeados, eles ‘ serão herdados conforme especificado, certo?