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 fooest 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/barempê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 +iworks - 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?
vimest en train de modifier les autorisations, puis de les rétablir.