Linux, por que não consigo escrever, embora tenha permissões de grupo?

108

Desejo criar um arquivo em um diretório pertencente ao grupo staff do qual sou membro. Por que não posso fazer isso?

bmccann@bmccann-htpc:~$ ls -l /usr/local/lib/R/
total 4
drwxrwsr-x 2 root staff 4096 2010-07-31 16:21 site-library
bmccann@bmccann-htpc:~$ id -nG bmccann
bmccann adm dialout cdrom plugdev staff lpadmin admin sambashare
bmccann@bmccann-htpc:~$ touch /usr/local/lib/R/site-library/tmp
touch: cannot touch `/usr/local/lib/R/site-library/tmp': Permission denied
Ben McCann
fonte
1
Você tem permissão de gravação no diretório da biblioteca do site em / usr / local / lib / R?
Ted Hopp de
1
O primeiro comando que postei não mostra que o grupo tem privilégios de gravação?
Ben McCann de
3
Já existe um site-library/tmparquivo / diretório presente?
Jeremiah Willcock

Respostas:

200

Você saiu e fez login novamente depois de fazer as alterações no grupo? Consulte:
Resposta do superusuário envolvendo falha nas permissões de toque

AdamJonR
fonte
1
Se eu abrir uma nova janela de terminal, isso não deveria ser considerado um novo processo? Tenho certeza de que tentei isso e não funcionou, me forçando a sair.
Ben McCann de
7
@Ben: Iniciar um novo processo herda uid / gids de seu pai. Você precisa de um programa privilegiado (como login, su, etc.) para realmente definir uid / gids.
efêmero de
4
Se é inconveniente para o logout / login de volta, como sugere o acima, você pode fazer isso em um terminal: su your-user-name. O shell resultante terá suas permissões de grupo atualizadas.
TJ Crowder
2
Obrigado por isso! Passei cerca de 15 minutos puxando meu cabelo tentando descobrir por que eu não tinha permissões de grupo em uma pasta.
Jeremy Spencer
2
Foi necessário reiniciar o Ubuntu 16.04 x64, não apenas fazer logout e login novamente
Kartikey Tanna
15

Por que o usuário do Linux não pode editar arquivos no grupo do qual faz parte?

Estou usando o Ubuntu 12.04 e tive o mesmo problema em que um usuário não consegue gravar em um arquivo para o qual ele tem permissão de acesso de grupo. Por exemplo:

whoami                                        //I am user el
  el                                            

touch /foobar/test_file                       //make a new file

sudo chown root:www-data /foobar/test_file    //User=root  group=www-data

sudo chmod 474 /foobar/test_file              //owner and others get only read, 
                                              //group gets rwx


sudo groupadd www-data                        //create group called www-data    

groups                                        //take a look at the groups and see
 www-data                                     //www-data exists.

groups el                                     //see that el is part of www-data
  el : www-data                               

Reinicie o terminal agora para garantir que os usuários e grupos tenham entrado em vigor. Faça login como el.

vi /foobar/test_file                          //try to edit the file.

Produz o Aviso:

Warning: W10: Warning: Changing a readonly file"

O que? Eu fiz tudo certo por que não funciona?

Responda:

Faça uma reinicialização completa do computador. Parar o terminal não é suficiente para corrigir esses problemas.

Eu acho que o que acontece é que o apache2 também usa o grupo www-data, então a tarefa estava de alguma forma impedindo os usuários e grupos de serem executados corretamente. Você não só precisa fazer logout, mas também interromper e reiniciar todos os serviços que usam seu grupo. Se a reinicialização não funcionar, você terá problemas maiores.

Eric Leschinski
fonte
1
O que são "problemas maiores"?
Ejaz
13

Eu tive o mesmo problema, verifique se a pasta tem mais regras ACL ou não!

Se você puder ver + (sinal de mais) ao listar a pasta, significa que ela tem regras de acesso especiais. Por exemplo:

[user_in_apache_group@web02 html]$ ls -l
total 16
drwxrwxr-x  16 apache apache 4096 Sep  4 13:46 ilias
drwxrwxr-x+ 15 apache apache 4096 Sep  4 13:46 ilias5

Veja a permissão:

[user_in_apache_group@web02 html] getfacl ilias5
# file: ilias5
# owner: apache
# group: apache
user::rwx
user:user_in_apache_group:r-x
group::rwx
mask::rwx
other::r-x

Isso significa que meu usuário (user_in_apache_group) não tem permissão de gravação para essa pasta.

A solução é o que @techtonik disse, adicione permissão de gravação para o usuário:

[user_in_apache_group@web02 html]$ sudo setfacl -m u:user_in_apache_group:rwx ./ilias5

Verifique a permissão novamente:

[user_in_apache_group@web02 html] getfacl ilias5
...
user:user_in_apache_group:rwx
...

Espero que ajude. ;)

Laszlo Lugosi
fonte
8

Use Linux ACL (listas de controle de acesso) - é uma versão mais refinada do sistema de permissão,

setfacl -R -m 'group:staff:rwx' -m 'd:group:staff:rwx' /usr/local/lib/R/

Isso define os direitos ativos para o diretório e os direitos padrão para qualquer coisa criada dentro.

Se você acabou de adicionar a si mesmo ao staffgrupo, isso não funcionará sem logar novamente , mas você pode definir a permissão apenas para você na sessão atual.

anatoly techtonik
fonte
5

Tive um problema quando um usuário não conseguia acessar o /foo/bar/bazdiretório, mesmo quando tinha permissões, porque ele não tinha acesso ao bardiretório.

Kolyunya
fonte
-2

Verifique se o seu diretório pai tem permissão antes de adicionar conteúdo a esse arquivo

sudo chmod -R 777 /yourDir/file.log
Mani P
fonte