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

  • Presumo apenas que aplica-se aos modos de permissão Unix tradicionais, que correspondem a user, group e other Entradas ACL. Se você tiver entradas ACL padrão para usuários ou grupos nomeados, eles ‘ serão herdados conforme especificado, certo?
  • Isso é uma citação de algum lugar? Em caso afirmativo, adicione a fonte e, se não, remova a formatação da citação.
  • @terdon: Não é uma citação; é (conforme descrito) uma paráfrase da resposta de Hauke Laging . Como isso deve ser tratado? (1) Eu poderia ter editado a outra resposta, mas sei que reescrever em massa as postagens de outras pessoas é desaprovado. (E observe, FWIW, que meu representante neste site era < 2000 em outubro de 2014.) (2) Eu poderia ter postado como um comentário sobre a outra resposta. Ou melhor, eu poderia ter postado como uma série de três comentários, já que tem > 1.200 caracteres. Mas isso não é consistente com meu entendimento do propósito dos comentários. … (Cont.)
  • Ei, não era ‘ uma reclamação! Esta é uma boa resposta e só a encontrei porque estava me perguntando a mesma coisa. Gostaria apenas de remover a formatação da citação, que ‘ é tudo. Postar uma resposta esclarecendo uma existente é bom, desde que você mencione o original (o que você fez). Sim, adicionar um link seria uma boa ideia, mas ‘ não é grande coisa. Você claramente não está apenas copiando a resposta dele para a sua.
  • Não achei que fosse uma reclamação; obrigado pelo elogio. Mas certamente você percebe que qualquer pedido de uma pessoa com losango tem o ar de um punho de ferro em uma luva de veludo. 🙂 P.S. Editei minha resposta de acordo com sua sugestão.

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 

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *