92 votes

Donner les droits d'écriture à plusieurs utilisateurs sur un dossier dans Ubuntu

Il y a un dossier qui appartient à l'utilisateur tomcat6 :

drwxr-xr-x 2 tomcat6 tomcat6 69632 2011-05-06 03:43 document

Je veux accorder à un autre utilisateur (ruser) des droits d'écriture sur le dossier document. Les deux utilisateurs (tomcat6 et ruser) n'appartiennent pas au même groupe. J'ai essayé d'utiliser setfacl :

sudo setfacl -m  u:ruser:rwx document

mais cela me donne setfacl: document: Operation not supported erreur. Veuillez m'aider.

175voto

Andrew Lambert Points 7506

Il y a deux façons de le faire : mettre le répertoire en écriture "monde" ou créer un nouveau groupe pour les deux utilisateurs et rendre le répertoire accessible en écriture à ce groupe.

Il est évident que le rendre inscriptible dans le monde entier est une mauvaise chose, donc la deuxième option est préférable.

Sous Linux, les utilisateurs peuvent appartenir à plus d'un groupe. Dans ce cas, vous voulez créer un tout nouveau groupe, appelons-le tomandruser :

sudo groupadd tomandruser

Maintenant que le groupe existe, ajoutez-y les deux utilisateurs :

sudo usermod -a -G tomandruser tomcat6
sudo usermod -a -G tomandruser ruser

Il ne reste plus qu'à définir les permissions sur le répertoire :

sudo chgrp -R tomandruser /path/to/the/directory
sudo chmod -R 770 /path/to/the/directory

Maintenant, seuls les membres du groupe tomandruser peuvent lire, écrire ou exécuter quoi que ce soit dans le répertoire. Notez l'argument -R des commandes chmod et chgrp : il leur indique de faire des recherches dans chaque sous-répertoire du répertoire cible et de modifier chaque fichier et répertoire qu'ils trouvent.

Vous pouvez aussi changer le chiffre 770 en quelque chose comme 774 si vous voulez que d'autres personnes puissent lire les fichiers, 775 si vous voulez que d'autres personnes puissent lire et exécuter les fichiers, etc. Les changements d'affectation de groupe ne prendront effet que lorsque les utilisateurs se déconnecteront et se reconnecteront.

Si vous souhaitez également (et c'est probablement le cas) que les nouveaux fichiers créés dans le répertoire par l'un des utilisateurs soient automatiquement accessibles en écriture par les autres membres du groupe, consultez la rubrique これ .

6voto

alper Points 147

Le script suivant montre un exemple à donner r (read) / w (write) / x (execute) permission pour le chemin du dossier donné /path/to/the/directory pour USER1 et USER2 . Si vous voulez donner seulement l'accès en écriture, remplacez svp rwx avec w .


#!/bin/bash

# Block others and people in the same group to do `r/w/x` on the give folder:    
sudo chmod 700 /path/to/the/directory 

# Give read/write/execute access to USER1 on give folder:
sudo setfacl -R -m user:USER1:rwx  /path/to/the/directory 

# Give read/write/execute access to USER2 on give folder:
sudo setfacl -R -m user:USER2:rwx  /path/to/the/directory

4voto

Frank Nocke Points 677

Réponse d'opinion :

  • J'aime placer mon dossier partagé dans un endroit central. Pas dans le dossier personnel de quelqu'un d'autre, mais /srv/common ou même (pour les chemins impitoyablement courts...) /repo ou similaire.
  • définir un nouveau groupe (généralement pour tous les utilisateurs locaux, que vous voulez rejoindre. Cependant, certains utilisateurs techniques comme wwwuser (à moins qu'il y ait une raison valable)
  • root est bon à avoir en tant que membre, ainsi que d'avoir un propriétaire neutre de ce dossier partagé.
  • setGid est très important, de telle sorte que les nouveaux fichiers deviennent des membres communs du groupe, donc frank:common pas frank:frank

    sudo groupadd -f common
    usermod -aG common root
    usermod -aG common frank
    usermod -aG common mike
    
    # sort of hack for instant group refresh w/o logout
    # superuser.com/a/345051
    su - frank
    
    # sanity test1:
    cat etc/group | grep common
        common:x:1008:root,frank,mike
    # sanity test2:
    groups
        frank adm cdrom ... common
    sudo chown root:common /repo
    
    # (if you have shareable stuff setting somewhere else,
    #  copy it to here now)
    
    # no right to the world, the right rights to user and group
    chmod -R ug+rwXs,o-rwx $dest
    # why uppercase X ?  unix.stackexchange.com/a/416885
    
    # why s ?  superuser.com/a/277785
    # as there is no such thing as an uppercase S (directories only)
    # settings the s attribute on preexisting content would have to happen
    # like so:
    # find /repo -type d -exec chmod g+s {} \\\;

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X