Linux, pourquoi ne puis-je pas écrire alors que j'ai des autorisations de groupe?

108

Je souhaite créer un fichier dans un répertoire appartenant au groupe du personnel dont je suis membre. Pourquoi je ne peux pas faire ça?

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
la source
1
Avez-vous l'autorisation d'écriture sur le répertoire site-library dans / usr / local / lib / R?
Ted Hopp
1
La première commande que j'ai publiée ne montre-t-elle pas que le groupe a des privilèges d'écriture?
Ben McCann
3
Y a-t-il déjà un site-library/tmpfichier / répertoire présent?
Jeremiah Willcock

Réponses:

200

Vous êtes-vous déconnecté et reconnecté après avoir effectué les modifications du groupe? Voir:
Réponse de super utilisateur impliquant l'échec des autorisations tactiles

AdamJonR
la source
1
Si j'ouvre une nouvelle fenêtre de terminal, cela ne devrait-il pas être considéré comme un nouveau processus? Je suis presque sûr d'avoir essayé cela et cela n'a pas fonctionné, ce qui m'a obligé à me déconnecter.
Ben McCann
7
@Ben: le démarrage d'un nouveau processus hérite des uid / gids de son parent. Vous avez besoin d' un programme privilégié ( par exemple login, suetc.) pour réellement mettre uid / gid.
éphémère
4
S'il est peu pratique de fermeture de session / login revenir, comme le laisse entendre ce qui précède, vous pouvez le faire dans un terminal: su your-user-name. Le shell résultant aura vos autorisations de groupe mises à jour.
TJ Crowder
2
Merci pour cela! J'ai passé environ 15 minutes à m'arracher les cheveux à essayer de comprendre pourquoi je n'avais pas d'autorisations de groupe dans un dossier.
Jeremy Spencer
2
Il a fallu redémarrer pour moi sur Ubuntu 16.04 x64, pas seulement me déconnecter et me reconnecter
Kartikey Tanna
15

Pourquoi l'utilisateur Linux ne peut-il pas modifier les fichiers du groupe dont il fait partie?

J'utilise Ubuntu 12.04 et j'ai eu le même problème lorsqu'un utilisateur ne peut pas écrire dans un fichier auquel il est autorisé à accéder au groupe. Par exemple:

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                               

Redémarrez le terminal maintenant pour vous assurer que les utilisateurs et les groupes ont pris effet. Connectez-vous en tant que el.

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

Produit l'avertissement:

Warning: W10: Warning: Changing a readonly file"

Quoi? J'ai tout fait correctement, pourquoi ça ne marche pas?

Répondre:

Faites un redémarrage complet de l'ordinateur. L'arrêt du terminal ne suffit pas à résoudre ces problèmes.

Je pense que ce qui se passe, c'est qu'apache2 utilise également le groupe www-data, donc la tâche empêchait d'une manière ou d'une autre les utilisateurs et les groupes d'être appliqués correctement. Non seulement vous devez vous déconnecter, mais vous devez également arrêter et redémarrer tous les services qui utilisent votre groupe. Si un redémarrage ne réussit pas, vous avez de plus gros problèmes.

Eric Leschinski
la source
1
Qu'est-ce que les «plus gros problèmes»?
Ejaz
13

J'ai eu le même problème, vérifiez si le dossier contient d'autres règles ACL ou non!

Si vous pouvez voir + (signe plus) lorsque vous répertoriez le dossier, cela signifie qu'il a des règles d'accès spéciales. Par exemple:

[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

Afficher l'autorisation:

[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

Cela signifie donc que mon utilisateur (user_in_apache_group) n'a pas d'autorisation d'écriture pour ce dossier.

La solution est ce que @techtonik a dit, ajoutez une autorisation d'écriture pour l'utilisateur:

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

Vérifiez à nouveau l'autorisation:

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

J'espère que ça aide. ;)

Laszlo Lugosi
la source
8

Utilisez Linux ACL (listes de contrôle d'accès) - c'est une version plus fine du système d'autorisation,

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

Cela définit à la fois les droits actifs pour l'annuaire et les droits par défaut pour tout ce qui y est créé.

Cela ne fonctionne pas sans vous reconnecter si vous venez de vous ajouter au staffgroupe, mais vous ne pouvez définir l'autorisation que pour vous-même pour la session en cours.

anatoly techtonik
la source
5

J'ai eu un problème lorsqu'un utilisateur ne pouvait pas accéder au /foo/bar/bazrépertoire même s'il avait des autorisations car il n'avait pas accès au barrépertoire.

Kolyunya
la source
-2

Vérifiez si votre répertoire parent a l'autorisation avant d'ajouter du contenu à ce fichier

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