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.
root
?
vim
est en train de modifier les autorisations, puis de les rétablir.