Permissões de grupo permitem, mas ainda recebem permissão negada

43

Eu tenho uma partição ext4 e configurei o proprietário do grupo para todos os subdiretórios para mygroup:

# chgrp -R mygroup /mount/abc
# chmod -R g+swrx /mount/abc

Meu usuário faz parte desse grupo. Dentro dessa partição, há uma pasta que pertence ao usuário 'nobody' e agora ao grupo 'mygroup'. Meu usuário faz parte do 'mygroup'. Aqui está um ls -l:

myuser@host:/mount/abc/folder$ ls -l
drwxr-sr-x 2 nobody      mygroup      4096 Apr 25 12:08 ./
drwxrwsrwx 6 nobody      mygroup      4096 Apr 24 07:57 ../
-rw-r-xr-- 1 otheruser   mygroup    159539 Apr 23 23:44 test.png*

myuser@host:/mount/abc/folder$ groups myuser
myuser : mygroup {... a list of other groups also...} 

myuser@host:/mount/abc/folder$ rm test.png 
rm: remove write-protected regular file ‘test.png’? y
rm: cannot remove ‘test.png’: Permission denied

myuser@host:/mount/abc/folder$ touch test.txt
touch: cannot touch ‘test.txt’: Permission denied

Observe que não consigo excluir nem criar um arquivo pertencente a um grupo do qual meu usuário faz parte.

Acho que não entendo completamente como os grupos funcionam. Eu pensei que se você fizesse parte de um grupo, herdaria as permissões desse grupo. Estou fazendo algo errado?

obrigado

Caos
fonte
Parece que a tríade de permissões é do mundo do grupo de proprietários. Acima, você pode ver drwxr-sr-x para o diretório Portanto, a permissão do grupo é rs. Parece que o chmod -R não definiu recursivamente as permissões para rwx. Quando lancei o w bit para a permissão de grupo da pasta, ele funciona.
Chaos

Respostas:

70

Você adicionou recentemente esse usuário a esse grupo, sem desconectar-se / no meio? Em seguida, "grupos" mostrará o grupo, mas o usuário ainda não tem as permissões de grupo.

Você pode mostrar seus grupos eficazes usando

$ id

Como exemplo, se eu adicionar meu usuário psao grupo faxe digitar

$ id

não mostra o grupo fax, mas

$ groups ps

mostra fax.

Fazer sucom seu próprio usuário fornece a nova afiliação de grupo:

$ su ps
$ id

A saída agora também contém fax.

peschü
fonte
1
Isso é realmente útil saber. Especialmente a parte 'sudo <nome de usuário>'.
Chaos
4
log in / out é tão óbvio que eu perdi o ponto, muito obrigado amigo!
Nicolallias 18/03/2015
1
@ peschü eu tenho sudoe usá-lo regularmente. O erro que mostrei está reclamando que o comando ubuntu(ou seja, o nome do usuário) não é um comando reconhecido. Não acho que sua sugestão seja sintaticamente correta - talvez funcione no seu caso, porque pstambém é um comando e um nome de usuário.
Beldaz 31/05
1
@beldaz oh não! Você está certo! sintaticamente correto é su <username>. Eu editei a postagem.
Peschü 31/05
1
condenar o antigo log out / log in novamente funciona sempre.
Steampunkery
9

O método que você usou parece estar correto. Acabei de tentar replicá-lo e funcionou muito bem.

Não tenho certeza se há um erro de digitação, mas há um pequeno problema com o comando. Não há necessidade de ter "mygroup" mencionado lá. Os seguintes trabalhos

# chmod -R g+swrx /mount/abc

Mesmo, você pode remover a parte s, apenas faça g+rwx. Depois de alterar as permissões, você ls -ldeve exibir os privilégios relevantes.

Vivek Kapoor
fonte
2
Eu removi o erro de digitação com o nome do grupo. O diretório tem as permissões wrx quando você faz ls -l, e não pertence a ninguém: mygroup. Mesmo que myuser faça parte do meu grupo, o myuser ainda não pode criar / excluir arquivos. Espero que faça sentido.
Chaos
3

Você não pode remover o arquivo porque o grupo mygroupnão tem permissões de gravação no arquivo test.pnge na pasta. Para que as operações de gravação funcionem no arquivo, as permissões do arquivo devem se parecer com:

-rw-rwxr-- 1 otheruser   mygroup    159539 Apr 23 23:44 test.png*

Se você olhar mais de perto o formato da permissão

duuugggooo

Os três primeiros marcadores uuusão utilizador r ead, w rito e e x ecute. Os próximos três espaços reservados gggsão para o grupo e ooopara outros. No trecho postado por grupo OP está faltando o w permissão rito.

Ashoka Lella
fonte
2

Para adicionar à resposta aceita (já que ainda não posso comentar):

Se você usar um software como o BitVise para criar uma conexão SSH com o servidor, simplesmente fechar e reabrir um terminal não será contabilizado como login e logout. Ele fará coisas como recarregar o seu ~/.bashrc, mas não realizará as atualizações reais do grupo (se você adicionou o grupo à sua sessão de "login"). Para que isso entre em vigor, você precisará sair totalmente e efetuar login novamente com sua chave SSH / credenciais.

Figidon
fonte
2

Os diretórios precisam de um conjunto de bits x (para o diretório em que esse bit é visto como bit de pesquisa) para abrir. Então, uso o tree para obter apenas o conjunto de pastas e evitar o pesadelo de ter todos os arquivos definidos como executáveis ​​(a opção para o tree é -d List directories only.):

sudo tree -faid /mount/abc | xargs -L1 -I{} sudo chmod 755  "{}"

Aviso!!! você deve levar isso em consideração:

  • o uso de chmod ou chown recursivo no /diretório raiz ou nos diretórios do sistema destruirá seu sistema operacional (na verdade, qualquer coisa recursiva no /diretório ou nos diretórios do sistema é perigosa)

  • essa não é uma boa prática de segurança para definir permissões em massa assim

Eduard Florinescu
fonte
1
Muito obrigado! As palavras "Diretórios precisam de um conjunto de bits x" resolveram meu problema! Eu fiz "sudo chmod g + x <caminho do diretório pai>" e funcionou.
kinORnirvana 19/04