Une fois connecté, je peux effectuer les tâches suivantes:
mkdir foo
touch foo/bar
chmod 400 foo/bar
chmod 500 foo
Ensuite, je peux ouvrir vim (pas en tant que root
), éditer bar
, forcer une écriture avec w!
, et le fichier est modifié.
Comment puis-je faire en sorte que le système d'exploitation n'autorise aucune modification de fichier?
MISE À JOUR 02 mars 2017
chmod 500 foo
est un fouillis rouge: l'autorisation d'écriture sur un répertoire n'a rien à voir avec la possibilité de modifier le contenu d'un fichier - uniquement la possibilité de créer et de supprimer des fichiers.chmod 400 foo/bar
empêche en fait le contenu du fichier d'être modifié. Toutefois , cela n'empêche pas les autorisations d'un fichier d'être modifiées - le propriétaire d'un fichier peut toujours modifier les autorisations de son fichier (en supposant qu'il puisse accéder au fichier, c'est-à-dire qu'il dispose d' une autorisation d'exécution sur tous les répertoires ancêtres). En fait, strace (1) révèle que c’est ce que fait vim (7.4.576 Debian Jessie): vim appelle chmod (2) pour ajouter temporairement l’autorisation d’écriture du propriétaire du fichier, le modifie, puis appelle chmod ( 2) à nouveau pour supprimer l'autorisation d'écriture. C'est pourquoi en utilisantchattr +i
works - seul root peut appelerchattr -i
. Théoriquement, vim (ou n'importe quel programme) pourrait faire la même chose avec chattr comme avec chmod sur un fichier immuable s'il était exécuté en tant que root.
la source
vim
est en train de modifier les autorisations, puis de les rétablir.root
?Réponses:
Vous pouvez définir l'attribut "immuable" avec la plupart des systèmes de fichiers sous Linux.
Pour supprimer l'attribut immuable, vous utilisez
-
au lieu de+
:Pour voir les attributs actuels d'un fichier, vous pouvez utiliser lsattr:
La page de manuel chattr (1) fournit une description de tous les attributs disponibles. Voici la description pour
i
:la source
chattr
commande faisait partie due2fsprogs
package de mon système. C'est pourquoi j'ai fait cette déclaration. J'ai mis à jour la réponse en fonction de votre commentaire.Vous pouvez:
root
ou un nouveau nom d'utilisateur crééchmod 440
pour permettre la lecture par groupe (qui est vous).Si le bon utilisateur n'est pas le seul de ce groupe, vous devez créer un nouveau groupe, y ajouter uniquement celui-ci et utiliser ce groupe pour celui-ci. Cependant, vous n'êtes pas le propriétaire du fichier, vous
vi
ne pouvez donc pas changer le propriétaire du fichier.la source
:w!
). vim ne va cependant pas jusqu'à changer les permissions du répertoire temporairement. Donc, garder le répertoire non-inscriptible devrait être sûr.Pour rendre une arborescence de répertoires complète en lecture seule:
Pour le rendre à nouveau lisible, changer
+i
en-i
.la source