« Gestion des droits linux » : différence entre les versions
(→Chmod : Ajout d'une astuce pour modifier les droits de tout les fichiers d'un certain type dans une arborescence.) |
|||
(4 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
[[Category:posix]] | [[Category:posix]] | ||
{{chantier}} | |||
=Droits standards= | =Droits standards= | ||
==Chmod== | ==Chmod== | ||
{{Astuce|Pour modifier les droits de tous les fichiers d'un certain type dans une arborescence, il peut être pratique de passer par la commande <source lang="bash" inline>find</source>: <source lang="bash" inline>find /chemin/à/modifier/ -type d -exec chmod +x {} +</source> pour tous les répertoires ou <source lang="bash" inline>find /chemin/à/modifier/ -type f -exec chmod -x {} +</source> pour tous les fichiers réguliers. [https://superuser.com/questions/91935/how-to-recursively-chmod-all-directories-except-files Source].}} | |||
==Chown== | ==Chown== | ||
==Afficher les droits sous forme de chiffres== | |||
La méthode classique pour afficher les droits POSIX consiste en l'usage de la commande <source lang="bash" inline>ls -l</source>. Or cette méthode affiche les droits sous forme de lettres. Il peut être utile, notamment dans un script, d'obtenir cette information sous forme de chiffres (comme avec <source lang="bash" inline>chmod</source>). Pour ce faire, utiliser la commande suivante : | |||
stat --format '%a' <fichier> | |||
===Source de la section=== | |||
* https://unix.stackexchange.com/questions/46915/get-the-chmod-numerical-value-for-a-file | |||
==Empêcher les modifications par root== | ==Empêcher les modifications par root== | ||
Parfois, il est nécessaire d'interdire la modification d'un fichier. De manière générale, la suppression des droits d'écriture via la commande <source lang="bash" inline>chmod</source> est utilisée. Cependant, cette méthode est totalement inefficace si nous voulons interdire la modification du fichier par l'utilisateur root lui même. | Parfois, il est nécessaire d'interdire la modification d'un fichier. De manière générale, la suppression des droits d'écriture via la commande <source lang="bash" inline>chmod</source> est utilisée. Cependant, cette méthode est totalement inefficace si nous voulons interdire la modification du fichier par l'utilisateur root lui même. | ||
Ligne 8 : | Ligne 22 : | ||
Cela peut sembler absurde en premier lieu de vouloir interdire cela à root et pourtant, le cas plus que concret du <source lang="bash" inline>resolv.conf</source> qui ne cesse de se faire modifier par le client DHCP utilisant les droits root est plus qu'insupportable, surtout quand il met l'adresse d'un serveur DNS utilisant une zone RPZ afin de rediriger de manière transparente vers un miroir de dépôt local qui ne contient pas la branche de la distribution en cours d'usage. | Cela peut sembler absurde en premier lieu de vouloir interdire cela à root et pourtant, le cas plus que concret du <source lang="bash" inline>resolv.conf</source> qui ne cesse de se faire modifier par le client DHCP utilisant les droits root est plus qu'insupportable, surtout quand il met l'adresse d'un serveur DNS utilisant une zone RPZ afin de rediriger de manière transparente vers un miroir de dépôt local qui ne contient pas la branche de la distribution en cours d'usage. | ||
{{info|j'ai conscience que c'est un besoin spécifique mais considérez que la seule question de la confidentialité peut être avancé car la modification du serveur DNS est aussi la possibilité de voir tout les domaines que vous visitez. Il n'est donc pas inutile de maîtriser sa modification (wifi publique par exemple).}} | {{info|j'ai conscience que c'est un besoin spécifique mais considérez que la seule question de la confidentialité peut être avancé car la modification du serveur DNS est aussi la possibilité de voir tout les domaines que vous visitez. Il n'est donc pas inutile de maîtriser sa modification (wifi publique par exemple).}} | ||
===Empêcher les modifications=== | ===Empêcher les modifications=== | ||
chattr +i /etc/resolv.conf | chattr +i /etc/resolv.conf | ||
===Cas de problème=== | |||
Dans certains cas que je n'ai pas réussi à identifier avec [[Network manager]], la commande précedente renvoi le message suivant: <source lang="bash" inline>chattr: Opération non supportée lors de la lecture des drapeaux sur /etc/resolv.conf</source>. Pour régler cette merde il faut faire ceci: | |||
'''Arrêter le service réseau''' | |||
systemctl stop NetworkManager.service | |||
'''Supprimer le resolv.conf''' | |||
rm /etc/resolv.conf | |||
'''Recréer ce fichier avec les serveurs voulus''' | |||
echo 'nameserver 192.168.1.1' > /etc/resolv.conf | |||
'''Appliquer l'interdiction de modification''' | |||
chattr +i /etc/resolv.conf | |||
'''Démarrer le service réseau''' | |||
systemctl start NetworkManager.service | |||
===Autoriser les modifications=== | ===Autoriser les modifications=== | ||
chattr -i /etc/resolv.conf | chattr -i /etc/resolv.conf | ||
===Source=== | |||
===Source de la section=== | |||
* http://dev.petitchevalroux.net/linux/interdire-modifier-fichier-linux.397.html | * http://dev.petitchevalroux.net/linux/interdire-modifier-fichier-linux.397.html | ||
=Droits étendus= | =Droits étendus= | ||
Les ACL (access control list) permettent une gestion plus fine des droits POSIX. Dans le cas d'un partage de fichiers entre plusieurs utilisateurs par exemple, les droits standards peuvent vite montrer leurs limites. | Les ACL (access control list) permettent une gestion plus fine des droits POSIX. Dans le cas d'un partage de fichiers entre plusieurs utilisateurs par exemple, les droits standards peuvent vite montrer leurs limites. | ||
Installer le paquet ACL | Installer le paquet ACL | ||
apt install acl | apt install acl | ||
Afficher les ACL | Afficher les ACL | ||
getfacl | getfacl | ||
Définir des acl de manière récursive (à l'utilisateur toto, le groupe root et man, les autre à rien) | Définir des acl de manière récursive (à l'utilisateur toto, le groupe root et man, les autre à rien) | ||
setfacl -Rm u:toto:rwx,g:root:rwx,g:man:r-x,o:--- acl/ | setfacl -Rm u:toto:rwx,g:root:rwx,g:man:r-x,o:--- acl/ | ||
'''setfacl''' peut remplacer '''chmod'''. Équivalent d'un <source lang="bash" inline>chmod 750</source> : | '''setfacl''' peut remplacer '''chmod'''. Équivalent d'un <source lang="bash" inline>chmod 750</source> : | ||
setfacl -m u::rwx,g::r-x:o::--- | setfacl -m u::rwx,g::r-x:o::--- | ||
Définir un '''umask''' personnalisé pour le dossier. Il faut rajouter '''d:''' devant la section qu'on veux définir par défaut. Si on ne le met pas, le droit de la section n'est appliqué que aux élément existant et pas ceux créés par la suite | Définir un '''umask''' personnalisé pour le dossier. Il faut rajouter '''d:''' devant la section qu'on veux définir par défaut. Si on ne le met pas, le droit de la section n'est appliqué que aux élément existant et pas ceux créés par la suite | ||
setfacl -m d:u:yohan:rwx,d:u:root:rwx acl/ | setfacl -m d:u:yohan:rwx,d:u:root:rwx acl/ | ||
{{info|Je me suis limité aux droit utilisateur | |||
{{info|Je me suis limité aux droit utilisateur mais on peut bien sur enchaîner avec les groupes et les autres après des virgules avec un d: devant chaque arguments.}} | |||
Supprimer les acl | Supprimer les acl | ||
setfacl -b acl/ | setfacl -b acl/ | ||
ou, pour la récursivité | ou, pour la récursivité | ||
setfacl -Rb acl/ | setfacl -Rb acl/ | ||
Méthode plus fine où on peut définir quel éléments enlever | Méthode plus fine où on peut définir quel éléments enlever | ||
setfacl -x u:root acl/test5.txt | setfacl -x u:root acl/test5.txt | ||
==Sources== | |||
==Sources de la section== | |||
* https://blog.pastoutafait.fr/billets/Les-ACLs-sous-GNU-Linux | * https://blog.pastoutafait.fr/billets/Les-ACLs-sous-GNU-Linux | ||
* http://lea-linux.org/documentations/Gestion_des_ACL | * http://lea-linux.org/documentations/Gestion_des_ACL |
Dernière version du 3 octobre 2020 à 22:12
EN CHANTIER
Article en cours d'écriture et/ou de test. Certains éléments peuvent être incomplets et mener à un résultat non fonctionnel.Merci de ne pas rager.
Droits standards
Chmod
ASTUCE
Pour modifier les droits de tous les fichiers d'un certain type dans une arborescence, il peut être pratique de passer par la commandefind
: find /chemin/à/modifier/ -type d -exec chmod +x {} +
pour tous les répertoires ou find /chemin/à/modifier/ -type f -exec chmod -x {} +
pour tous les fichiers réguliers. Source.Chown
Afficher les droits sous forme de chiffres
La méthode classique pour afficher les droits POSIX consiste en l'usage de la commande ls -l
. Or cette méthode affiche les droits sous forme de lettres. Il peut être utile, notamment dans un script, d'obtenir cette information sous forme de chiffres (comme avec chmod
). Pour ce faire, utiliser la commande suivante :
stat --format '%a' <fichier>
Source de la section
Empêcher les modifications par root
Parfois, il est nécessaire d'interdire la modification d'un fichier. De manière générale, la suppression des droits d'écriture via la commande chmod
est utilisée. Cependant, cette méthode est totalement inefficace si nous voulons interdire la modification du fichier par l'utilisateur root lui même.
Cela peut sembler absurde en premier lieu de vouloir interdire cela à root et pourtant, le cas plus que concret du resolv.conf
qui ne cesse de se faire modifier par le client DHCP utilisant les droits root est plus qu'insupportable, surtout quand il met l'adresse d'un serveur DNS utilisant une zone RPZ afin de rediriger de manière transparente vers un miroir de dépôt local qui ne contient pas la branche de la distribution en cours d'usage.
INFORMATION
j'ai conscience que c'est un besoin spécifique mais considérez que la seule question de la confidentialité peut être avancé car la modification du serveur DNS est aussi la possibilité de voir tout les domaines que vous visitez. Il n'est donc pas inutile de maîtriser sa modification (wifi publique par exemple).Empêcher les modifications
chattr +i /etc/resolv.conf
Cas de problème
Dans certains cas que je n'ai pas réussi à identifier avec Network manager, la commande précedente renvoi le message suivant: chattr: Opération non supportée lors de la lecture des drapeaux sur /etc/resolv.conf
. Pour régler cette merde il faut faire ceci:
Arrêter le service réseau
systemctl stop NetworkManager.service
Supprimer le resolv.conf
rm /etc/resolv.conf
Recréer ce fichier avec les serveurs voulus
echo 'nameserver 192.168.1.1' > /etc/resolv.conf
Appliquer l'interdiction de modification
chattr +i /etc/resolv.conf
Démarrer le service réseau
systemctl start NetworkManager.service
Autoriser les modifications
chattr -i /etc/resolv.conf
Source de la section
Droits étendus
Les ACL (access control list) permettent une gestion plus fine des droits POSIX. Dans le cas d'un partage de fichiers entre plusieurs utilisateurs par exemple, les droits standards peuvent vite montrer leurs limites.
Installer le paquet ACL
apt install acl
Afficher les ACL
getfacl
Définir des acl de manière récursive (à l'utilisateur toto, le groupe root et man, les autre à rien)
setfacl -Rm u:toto:rwx,g:root:rwx,g:man:r-x,o:--- acl/
setfacl peut remplacer chmod. Équivalent d'un chmod 750
:
setfacl -m u::rwx,g::r-x:o::---
Définir un umask personnalisé pour le dossier. Il faut rajouter d: devant la section qu'on veux définir par défaut. Si on ne le met pas, le droit de la section n'est appliqué que aux élément existant et pas ceux créés par la suite
setfacl -m d:u:yohan:rwx,d:u:root:rwx acl/
INFORMATION
Je me suis limité aux droit utilisateur mais on peut bien sur enchaîner avec les groupes et les autres après des virgules avec un d: devant chaque arguments.Supprimer les acl
setfacl -b acl/
ou, pour la récursivité
setfacl -Rb acl/
Méthode plus fine où on peut définir quel éléments enlever
setfacl -x u:root acl/test5.txt
Sources de la section
- https://blog.pastoutafait.fr/billets/Les-ACLs-sous-GNU-Linux
- http://lea-linux.org/documentations/Gestion_des_ACL
- https://wiki.archlinux.org/index.php/Access_Control_Lists
- https://openclassrooms.com/courses/les-acl-access-control-lists-sous-linux