GNU/Linux >> Tutoriels Linux >  >> Linux

Donner des autorisations de groupe aux fichiers d'autres utilisateurs ?

J'utilise Debian 7 et j'ai créé un nouvel utilisateur (site Web) avec un répertoire htdocs comme celui-ci :

$ sudo adduser website
$ sudo mkdir -p /home/website/htdocs
$ sudo chown -R website /home/website

Maintenant, j'aimerais que les utilisateurs d'un autre groupe (développeurs) aient accès au répertoire de l'utilisateur. J'ai essayé :

$ sudo chown -R :developers /home/website

Je peux voir que le groupe est assigné (avec ls -la ou stat ) et que les utilisateurs sont dans le groupe, mais ils n'ont pas le droit d'accès ?

drwxr-xr-x     3     website     developers     4096 May 3 09:09     website

Je souhaite également :

  • Autoriser un autre groupe, les « sous-traitants », à accéder aux fichiers du site Web

  • Restreindre l'accès des utilisateurs du site Web à leurs répertoires personnels uniquement

  • Assurez-vous que les nouveaux fichiers du site Web héritent de ces autorisations

Devez-vous utiliser des listes de contrôle d'accès ? Ou existe-t-il un meilleur moyen de le faire (comme ne pas utiliser un utilisateur distinct pour chaque site) ?

Réponse acceptée :

Il est difficile de donner des commandes précises sans connaître le système d'exploitation ou la distribution ; et oui! ACL fonctionnerait, mais il existe également une méthode standard.

Il y a adduser et useradd , l'un d'entre eux sur votre distribution peut créer automatiquement le répertoire personnel de l'utilisateur. Si oui, alors le contenu de /etc/skel/ serait copié dans le répertoire personnel de l'utilisateur, les autorisations définies et peut-être que d'autres actions appropriées pourraient avoir lieu.

Il peut exister des groupes prédéfinis pour le partage, tels que "personnel" ; mais, si nous voulons créer notre propre groupe de partage, il n'y a rien de mal à cela. Alors, créez un nouveau groupe ou utilisez un groupe existant. Assurez-vous que les utilisateurs qui doivent être membres du groupe ont été définis comme tels avec usermod , moduser , ou vigr peut-être, selon le système d'exploitation. Chaque utilisateur actuellement connecté doit se déconnecter et se reconnecter pour devenir membre d'un nouveau groupe.

Créez un répertoire commun à tous les utilisateurs, tel que /home/share_directory/ ou tout autre répertoire qui convient le mieux à votre situation. Une bonne pratique pertinente consiste à ne pas utiliser un répertoire dans le répertoire personnel de n'importe quel utilisateur. Si personne, à l'exception du propriétaire et du groupe, ne doit pouvoir voir les fichiers dans le répertoire, changez les autorisations du répertoire en 0770. Si la lecture est correcte pour "d'autres", alors utilisez 0775. Le propriétaire du répertoire doit presque certainement être root.

chown root:group_name /home/share_directory/

Ensuite, changez le bit setuid.

chmod +s /home/share_directory/

Si aucun utilisateur ne doit pouvoir modifier le fichier d'un autre utilisateur, définissez également le stick bit.

chmod +t /home/share_directory/

Ces exemples définissent à la fois les bits setuid et sticky en utilisant la notation octale.

chmod 5775 /home/share_directory/

ou

chmod 5770 /home/share_directory/

Pour la question mise à jour, il semble que ACL soit le bon outil. La plupart des distributions Linux incluent maintenant le acl option dans les defaults option. Si votre distribution n'inclut pas le acl option par défaut, alors ce petit travail est nécessaire pour commencer à l'utiliser. Montez d'abord les systèmes de fichiers avec acl option dans /etc/fstab.

sudo vim /etc/fstab
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx / ext4 defaults,acl 0 1

Si nécessaire, remontez le système de fichiers :sudo mount -o remount,acl / . Créez ensuite un groupe auquel un utilisateur peut appartenir à cet effet. Vous devrez peut-être également installer les outils ACL :apt-get install acl .

sudo groupadd developers
sudo usermod -a -G developers $username

(Ou le groupe peut être des « sous-traitants ».) Un utilisateur actuellement connecté doit se déconnecter et se reconnecter pour devenir membre du nouveau groupe. Bien sûr, ne le faites pas si vous avez du contenu dans le répertoire /var/www que vous souhaitez conserver, mais juste pour illustrer sa configuration pour commencer :

sudo rm -rf /var/www
sudo mkdir -p /var/www/public
sudo chown -R root:developers /var/www/public
sudo chmod 0775 /var/www/public
sudo chmod g+s /var/www/public
sudo setfacl -d -m u::rwx,g::rwx,o::r-x /var/www/public
sudo setfacl -m u::rwx,g::rwx,o::r-x /var/www/public
sudo setfacl -d -m u::rwx,g:contractors:rwx,o::r-x /var/www/public
sudo setfacl -m u::rwx,g:contractors:rwx,o::r-x /var/www/public

Ci-dessus, la différence entre le setfacl commandes sont les suivantes :la première instance utilise le groupe par défaut (groupe propriétaire de l'annuaire) tandis que la seconde spécifie explicitement un groupe. Le -d switch établit le masque par défaut (-m ) pour tous les nouveaux objets du système de fichiers dans le répertoire. Pourtant, nous devons également exécuter à nouveau la commande sans le -d switch pour appliquer l'ACL au répertoire lui-même. Remplacez ensuite les références à "/var/www" par "/var/www/public" dans un fichier de configuration et rechargez.

sudo vim /etc/apache2/sites-enabled/000-default
sudo /etc/init.d/apache2 reload

Si nous voulions restreindre la suppression et le renommage de tous sauf l'utilisateur qui a créé le fichier :sudo chmod +t /var/www/public . De cette façon, si nous voulons créer des répertoires pour les frameworks qui existent en dehors de la racine du document Apache ou peut-être créer des répertoires inscriptibles par le serveur, c'est toujours facile.

En relation :Debian – Comment convertir un système basé sur Debian 32 bits (x86) en 64 bits ?

Répertoire des journaux en écriture Apache :

sudo mkdir /var/www/logs
sudo chgrp www-data /var/www/logs
sudo chmod 0770 /var/www/logs

Répertoire de la bibliothèque lisible par Apache :

sudo mkdir /var/www/lib
sudo chgrp www-data /var/www/logs
sudo chmod 0750 /var/www/logs

Un peu de "jeu" dans un répertoire qui n'a pas d'importance devrait vous aider à faire en sorte que cela corresponde à votre situation.

Sur les restrictions, j'utilise deux approches différentes :le shell, rssh , a été conçu pour fournir un accès SCP/SFTP mais pas d'accès SSH ; ou, pour limiter l'utilisation à un répertoire personnel, vous pouvez utiliser le sous-système internal-sftp, configuré dans /etc/ssh/sshd_config .

Subsystem sftp internal-sftp

Match group sftponly
  ChrootDirectory /home/%u
  X11Forwarding no
  AllowTcpForwarding no
  ForceCommand internal-sftp

Créez un groupe nommé, par exemple, sftponly. Rendez les utilisateurs membres du groupe sftponly. Remplacez leurs répertoires personnels par / à cause du chroot. Le répertoire, /home/username, doit appartenir à root. Vous pouvez également définir le shell de l'utilisateur sur /bin/false pour empêcher l'accès SSH. Je suis surtout préoccupé par l'accès interactif, alors allez généralement avec le rssh chemin. (Ils ne peuvent écrire nulle part sauf là où j'ai défini la capacité d'écriture.)


Linux
  1. Rendre tous les nouveaux fichiers d'un répertoire accessibles à un groupe ?

  2. Obtenir de nouveaux fichiers pour hériter des autorisations de groupe sous Linux ?

  3. Forcer de nouvelles autorisations sur les fichiers après Rsync depuis Seedbox ?

  4. Qu'est-ce qui fait que les fichiers perdent les autorisations ?

  5. Comment ajouter un utilisateur au groupe sudo dans un VPS Linux ?

Comment modifier récursivement les autorisations de fichiers sous Linux

Comment trouver des fichiers en fonction de leurs autorisations sous Linux

Optimiser les fichiers PDF (avec Ghostscript ou autre)

Comment forcer le groupe et les autorisations pour les fichiers créés dans un répertoire spécifique ?

Comment configurer les autorisations Linux pour le dossier WWW ?

Pourquoi chmod -R 777 / destructif ?