facl ignorando a permissão "x", mas apenas em arquivos

5

Quando uso o setfacl para gerenciar as permissões que os arquivos / diretórios filhos possuem, por algum motivo, os arquivos têm todas as permissões, exceto a de execução ("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

Eu pensei que tem algo a ver com umask, mas mudá-lo de várias maneiras nunca dá o resultado esperado, a menos que eu esteja perdendo alguma coisa.

Como isso pode ser corrigido?

    
por user294034 31.10.2014 / 14:38

3 respostas

6

A resposta de Hauke Laging está tentando dizer:

Qualquer programa que crie um arquivo ou diretório especifica o modo (permissões) que ele quer que o arquivo tenha. Isso quase sempre é codificado no programa C (ou qualquer idioma usado) e dificilmente é diretamente acessível ao usuário. Em seguida, o valor umask e a ACL padrão podem desativar os bits de permissão, mas não adicioná-los.

O problema é que, enquanto mkdir especifica um modo de 777 ( rwxrwxrwx ), quase todos os 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 na criação (por qualquer um desses programas), não importa o que você faça com as ACLs; você deve criar o arquivo e, em seguida, chmod it.

Existem algumas exceções a essa regra:

  • cp e programas relacionados (por exemplo, cpio , tar , etc.) copiar ou recriar um arquivo, que tentará () configurar o novo arquivo para o mesmo modo que o arquivo original.
  • Compiladores, que criam arquivos executáveis binários, especificam um modo de 777 (pelo menos, se a compilação for bem sucedida), para que o usuário possa realmente executar o programa que acabou de compilar.
por 31.10.2014 / 19:27
4

Você não menciona qual é o "resultado esperado". Eu suponho que são os arquivos que possuem o x bits definido.

Você não pode impor isso como ACL padrão (como umask) apenas impede as permissões, mas não as define sozinho. Um novo diretório ou arquivo não recebe mais permissões (para usuário, grupo e outros) que a chamada open() ou mkdir() que 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.

    
por 31.10.2014 / 14:44
0

$ touch file && chmod a+x file

As explicações em outras respostas são excelentes. Eu quero adicionar algo que realmente dê uma resposta à pergunta,

How can this be fixed?

com código específico. @ Scott contou como fazer isso,

you must create the file and then chmod it.

O código na minha resposta mostra como fazer e destaca-o colocando-o primeiro.

Mais explicação

Para começar, para simplificar, eu simplesmente adiciono ao comando touch dado pelo OP, especificamente touch file se torna 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 na minha máquina (Cygwin) para mostrar que ela funciona, depois faça 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 isso 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
    
por 19.09.2018 / 04:00