A partir de um script shell bash, estou criando uma pasta e armazenando o mysqldump lá. Tenho certeza de que não há nenhum comando relacionado a permissões em meu script. Para permitir que outro usuário acesse esses arquivos, usei ACL, mas quando ele tentou acessar o arquivo, obteve problema de permissão negada, e o problema é com effective
permissões de ACL.
O proprietário do diretório é ola
o novo usuário que está tentando acessar a pasta uber
e a pasta égettaxi
Permissões do diretório pai
[/omega/olabooktmp]# getfacl .
# file: .
# owner: ola
# group: ola
user::rwx
user:uber:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:uber:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
Permissões do diretório filho
[/omega/olabooktemp]# getfacl gettaxi/
# file: gettaxi/
# owner: ola
# group: ola
user::rwx
user:uber:rwx #effective:---
group::r-x #effective:---
mask::---
other::---
default:user::rwx
default:user:uber:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
Vejo que as novas gettaxi
permissões de máscara de diretório são mask::---
, então acho que isso está causando o problema, mas não consigo entender completamente e como resolver esse problema.
Qualquer sugestão será muito apreciada.
Obrigado.
Responder1
Você pode alterar a máscara com o seguinte comando:
setfacl -m m:rwx filename/directory
Responder2
Se entendi bem sua pergunta, o usuário ola
está criando arquivos no diretório:/omega/olabooktmp/gettaxi
e você deseja restringir o acesso a esses arquivos, mas concedendo acesso ao usuário uber
.
Nota: /omega/olabooktmp/gettaxi
é propriedade deola
Vamos começar sem ACL ainda:
ls -ld /omega/olabooktmp/gettaxi
drwxr-x--- 2 ola ola 4096 mars 21 08:16 /omega/olabooktmp/gettaxi
Para conceder rwx
permissão para uber
usar ACL você pode usar:
setfacl -m u:uber:rwx,d:u:uber:rwX,o:--- /omega/olabooktmp/gettaxi
O que permitirá uber
direitos de usuário rwx
na pasta /omega/olabooktmp/gettaxi
e também concederárwx
de como default
e d:
. X
Ele concede permissão para arquivos previamente presentes na pasta e concede concessões herdadas ao arquivo. E também remova todas as outras permissões other
para restrição, é claro. O proprietário ainda tem sua própria permissão.
O resultado:
getfacl /omega/olabooktmp/gettaxi
getfacl: Removing leading '/' from absolute path names
# file: omega/olabooktmp/gettaxi
# owner: ola
# group: ola
user::rwx
user:uber:rwx
group::r-x
mask::rwx
other::---
default:user::rwx
default:user:uber:rwx
default:group::r-x
default:mask::rwx
default:other::---
Teste:
ola
cria alguns arquivos (executados como root):
su - ola -c "for i in {1..3}; do date > /omega/olabooktmp/gettaxi/$RANDOM; done"
Resultado:
ls -l /omega/olabooktmp/gettaxi/
total 32
-rw-r----- 1 ola users 32 mars 21 08:43 17606
-rw-r----- 1 ola users 32 mars 21 08:43 22286
-rw-r----- 1 ola users 32 mars 21 08:42 31484
-rw-r----- 1 ola users 32 mars 21 08:43 31848
-rw-r----- 1 ola users 32 mars 21 08:42 667
-rw-r----- 1 ola users 4 mars 21 08:16 one
-rw-r----- 1 ola users 6 mars 21 08:16 three
-rw-r----- 1 ola users 4 mars 21 08:16 two
Não pode ser acessado por um usuário normal (executado como root):
su - debian -c "ls -l /omega/olabooktmp/gettaxi"
ls: cannot open directory '/omega/olabooktmp/gettaxi': Permission denied
Mas o uber pode (executar como root):
su - uber -c "ls -l /omega/olabooktmp/gettaxi"
total 32
-rw-r----- 1 ola users 32 Mar 21 08:43 17606
-rw-r----- 1 ola users 32 Mar 21 08:43 22286
-rw-r----- 1 ola users 32 Mar 21 08:42 31484
-rw-r----- 1 ola users 32 Mar 21 08:43 31848
-rw-r----- 1 ola users 32 Mar 21 08:42 667
-rw-r----- 1 ola users 4 Mar 21 08:16 one
-rw-r----- 1 ola users 6 Mar 21 08:16 three
-rw-r----- 1 ola users 4 Mar 21 08:16 two
Se você alterar sua ACL com alguns testes, poderá remover todas as ACL com:
setfacl -R -b /omega/olabooktmp/gettaxi
E comece de novo.
Responder3
Sim, a máscara está diminuindo as permissões. A permissão efetiva é a de uma permissão e da máscara. (user::
(o usuário proprietário) e other
não é afetado pela máscara).
Você pode alterar a máscara com: por exemplosetfacl -m m:r-x file-name
.
Quando você faz umls -l
, se o modo termina com um +
, então os bits do modo intermediário (tradicionalmente os bits do grupo) são a máscara.
Às vezes, os bits de modo são definidos de acordo com os bits do grupo em umask
. Ainda não elaborei as regras sobre quando isso acontece e quando a máscara padrão é usada. Usandocp
para copiar um arquivo, parece usar a extensão umask
.
Uma solução alternativa
Certifique-se de que os usuários tenham seu próprio grupo e que este esteja definido como o grupo padrão. Em seguida, defina umask
como 007
.
Responder4
Suspeito que o comportamento seja um bug. Postei sobre isso no mês passado (consulte unix.stackexchange.com/questions/570795). O que está acontecendo é que as permissões do arquivo de origem estão sendo copiadas para a máscara acl pelo comando cp. Isso é o que eu esperava para cp -p, não para cp. Descobri que posso fazer cópias usando cat
cat afile > bfile
ou canalizando através de alcatrão
(cd A; tar -cf -)|(cd B; tar-xf -)
E os ACLs são respeitados conforme o esperado.
Eu também ofereci uma recompensa para que esse comportamento do cp fosse explicado. Ninguém explicou isso. Estou pensando em preencher um relatório de bug. Ou seja, este deve ser o comportamento ´cp -p´, não o comportamento vanilla cp. (E o sistema deduziu os pontos de recompensa mesmo que ninguém pudesse dar uma resposta. Fiquei surpreso com isso também.)