Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Modifier un fichier sans l'effacer

14 réponses
Avatar
Remi Moyen
Salut,

Je cherche un moyen de régler les permissions/attributs sur un fichier de
telle sorte que le propriétaire (moi...) puisse le modifier comme il veut,
mais pas l'effacer. Je suis sur un système de fichier en ext3, sous Linux.

Pour la petite histoire, c'est un fichier de données relativement
important pour moi, qui est modifié uniquement par un certain logiciel,
mais qui a la mauvaise idée de se loger directement dans mon home, avec un
nom abscon, et qui risque de passer à la trappe par erreur un jour de
grand ménage de printemps si je le protège pas un peu...

Avec les attributs (chattr/lsattr), je peux le mettre en append-only (a),
il ne peut plus être effacé, mais ça n'a pas l'air de marcher pour écrire
dedans (je comprends pas pourquoi, d'ailleurs...) :
$ touch truc
$ lsattr truc
----------------- truc
$ cat > truc
toto
titi
^D
$ sudo chattr +a truc
$ lsattr truc
-----a----------- truc
$ cat truc
toto
titi
$ cat > truc
bash: truc: Opération non permise
$ rm truc
rm: ne peut enlever `truc': Opération non permise
$ sudo chattr -a truc
$ rm truc
$

Mais de toute façon, ça m'empécherait aussi d'effacer une partie du
contenu du fichier, je crois.

Y'a-t-il donc une solution pour que je puisse lire/écrire librement dans
mon fichier, mais pas l'effacer ?
--
Rémi Moyen
"Malgré les apparences, le temps est très varié à Nancy :
pluie, nuages, neige, brouillard, grêle, ..."

10 réponses

1 2
Avatar
Marc Boyer
Remi Moyen wrote:
Salut,

Je cherche un moyen de régler les permissions/attributs sur un fichier de
telle sorte que le propriétaire (moi...) puisse le modifier comme il veut,
mais pas l'effacer. Je suis sur un système de fichier en ext3, sous Linux.


Sois ~/toto le fichier super important à ne pas effacer
% cd
% mkdir .fichiersSupersImportants
% mv toto .fichiersSupersImportants
% chmod a-w .fichiersSuperImporants
% ln -s ./fichiersSuperImportants/toto

Y'a-t-il donc une solution pour que je puisse lire/écrire librement dans
mon fichier, mais pas l'effacer ?


Cf ci dessus.

Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(

Avatar
Remi Moyen
On Wed, 26 Nov 2003, Marc Boyer wrote:

Je cherche un moyen de régler les permissions/attributs sur un fichier de
telle sorte que le propriétaire (moi...) puisse le modifier comme il veut,
mais pas l'effacer. Je suis sur un système de fichier en ext3, sous Linux.


Sois ~/toto le fichier super important à ne pas effacer
% cd
% mkdir .fichiersSupersImportants
% mv toto .fichiersSupersImportants
% chmod a-w .fichiersSuperImporants
% ln -s ./fichiersSuperImportants/toto


Ah oui, pas mal. Sauf que je peux toujours faire un rm toto. Je n'y perds
que le lien, pas le fichier lui-même, bien sûr, mais ça serait parfait si
je pouvais aussi empécher de l'effacer.
--
Rémi Moyen
"Malgré les apparences, le temps est très varié à Nancy :
pluie, nuages, neige, brouillard, grêle, ..."


Avatar
no
On Wed, 26 Nov 2003 13:04:06 +0100, Remi Moyen wrote:

On Wed, 26 Nov 2003, Marc Boyer wrote:

Je cherche un moyen de régler les permissions/attributs sur un fichier de
telle sorte que le propriétaire (moi...) puisse le modifier comme il veut,
mais pas l'effacer. Je suis sur un système de fichier en ext3, sous Linux.


Sois ~/toto le fichier super important à ne pas effacer
% cd
% mkdir .fichiersSupersImportants
% mv toto .fichiersSupersImportants
% chmod a-w .fichiersSuperImporants
% ln -s ./fichiersSuperImportants/toto


Ah oui, pas mal. Sauf que je peux toujours faire un rm toto. Je n'y perds
que le lien, pas le fichier lui-même, bien sûr, mais ça serait parfait si
je pouvais aussi empécher de l'effacer.


Il faut que le repertoire et le liens appartiennent à root par ex. :

root # mkdir /home/toto/fichiersSupersImportants
root # touch /home/toto/fichiersSupersImportants/toto
root # chown toto.toto /home/toto/fichiersSupersImportants/toto
root # ln -s /home/toto/fichiersSuperimportants/toto /home/toto

toto $ rm -f ./fichierSupersImportants/toto
rm: cannot remove `./fichierSupersImportants/toto': Permission denied
toto $ rm -f toto
rm: cannot remove `toto': Permission denied
toto $ echo "plop" > toto
toto $ cat toto
plop



Avatar
Marc Boyer
Remi Moyen wrote:
Sois ~/toto le fichier super important à ne pas effacer
% cd
% mkdir .fichiersSupersImportants
% mv toto .fichiersSupersImportants
% chmod a-w .fichiersSuperImporants
% ln -s ./fichiersSuperImportants/toto


Ah oui, pas mal. Sauf que je peux toujours faire un rm toto. Je n'y perds
que le lien, pas le fichier lui-même, bien sûr, mais ça serait parfait si
je pouvais aussi empécher de l'effacer.


Si j'avais ton problème, je m'arrêterais à ce niveau de solution,
qui protège des bétises ponctuelles.
Si c'est pour explorer toutes les subtilités de ext3, c'est différent.

Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(


Avatar
Pascal Bourguignon
no writes:

On Wed, 26 Nov 2003 13:04:06 +0100, Remi Moyen wrote:

On Wed, 26 Nov 2003, Marc Boyer wrote:

Je cherche un moyen de régler les permissions/attributs sur un fichier de
telle sorte que le propriétaire (moi...) puisse le modifier comme il veut,
mais pas l'effacer. Je suis sur un système de fichier en ext3, sous Linux.


Sois ~/toto le fichier super important à ne pas effacer
% cd
% mkdir .fichiersSupersImportants
% mv toto .fichiersSupersImportants
% chmod a-w .fichiersSuperImporants
% ln -s ./fichiersSuperImportants/toto


Ah oui, pas mal. Sauf que je peux toujours faire un rm toto. Je n'y perds
que le lien, pas le fichier lui-même, bien sûr, mais ça serait parfait si
je pouvais aussi empécher de l'effacer.


Il faut que le repertoire et le liens appartiennent à root par ex. :


Non, pas à root! Seulement à un autre utilisateur.
Par exemple, pour un utilisateur toto, créer un compte toto-imp, etc:

toto-imp # mkdir /home/toto/fichiersSupersImportants
toto-imp # touch /home/toto/fichiersSupersImportants/toto
toto-imp # chown toto.toto /home/toto/fichiersSupersImportants/toto
toto-imp # ln -s /home/toto/fichiersSuperimportants/toto /home/toto

toto $ rm -f ./fichierSupersImportants/toto
rm: cannot remove `./fichierSupersImportants/toto': Permission denied
toto $ rm -f toto
rm: cannot remove `toto': Permission denied
toto $ echo "plop" > toto
toto $ cat toto
plop



--
__Pascal_Bourguignon__ http://www.informatimago.com/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Living free in Alaska or in Siberia, a grizzli's life expectancy is 35 years,
but no more than 8 years in captivity. http://www.theadvocates.org/




Avatar
Remi Moyen
On Wed, 26 Nov 2003, no wrote:

Ah oui, pas mal. Sauf que je peux toujours faire un rm toto. Je n'y perds
que le lien, pas le fichier lui-même, bien sûr, mais ça serait parfait si
je pouvais aussi empécher de l'effacer.


Il faut que le repertoire et le liens appartiennent à root par ex. :


Malheureusement, dans ce cas précis, je ne contrôle pas le logiciel qui
gère ce fichier, et donc le choix du répértoire dans lequel il écrit.
C'est mon home, point final. Et donc, faire les changements que tu
proposes sur mon home, ça aurait, comment dire... quelques désavantages
annexes ;-) !

J'avais déjà pensé à cette solution, mais le manque de contrôle sur le
répértoire du fichier m'en a rapidement éloigné.
--
Rémi Moyen
"Malgré les apparences, le temps est très varié à Nancy :
pluie, nuages, neige, brouillard, grêle, ..."


Avatar
Remi Moyen
On Wed, 26 Nov 2003, Marc Boyer wrote:

Ah oui, pas mal. Sauf que je peux toujours faire un rm toto. Je n'y perds
que le lien, pas le fichier lui-même, bien sûr, mais ça serait parfait si
je pouvais aussi empécher de l'effacer.


Si j'avais ton problème, je m'arrêterais à ce niveau de solution,
qui protège des bétises ponctuelles.
Si c'est pour explorer toutes les subtilités de ext3, c'est différent.


Ben, disons que j'aime bien essayer de faire les choses à fond, et que je
trouverais moralement plus satisfaisant d'avoir une solution qui réponde à
tous mes critères initiaux, et pas à une partie seulement. C'est du
perfectionnisme, c'est tout ! :-)

Ceci dit, ta solution règle effectivement presque tout le problème (ce qui
manque est plus cosmétique qu'autre chose), et comme le problème initial
est déjà peu probable (quand je fais le ménage chez moi, je regarde quand
même un peu avant d'effacer violemment...).

Au passage, je me rends compte en lisant le man de chattr qu'il y a un
attribut u pour sauvegarder le contenu du fichier quand il est effacé, ça
peut aussi être une solution : à défaut de ne pas pourvoir l'effacer, au
moins, je pourrais le récupérer après l'avoir effacé !

(D'ailleurs, comment je peux récuperer un tel fichier ? Le man parle dit
que "This allows the user to ask for its undeletion", mais sans dire
comment.)
--
Rémi Moyen
"Malgré les apparences, le temps est très varié à Nancy :
pluie, nuages, neige, brouillard, grêle, ..."


Avatar
Stephane Chazelas
2003-11-26, 15:36(+01), Pascal Bourguignon:
[...]
Il faut que le repertoire et le liens appartiennent à root par ex. :


Non, pas à root! Seulement à un autre utilisateur.
Par exemple, pour un utilisateur toto, créer un compte toto-imp, etc:
[...]


Pourquoi, « pas à root » ? Ça me semblait pourtant le plus
approprié.

--
Stéphane ["Stephane.Chazelas" arobase "free.fr"]


Avatar
Pascal Bourguignon
Stephane Chazelas writes:
et mal orthographiée: est.invalide
(Et je plains le pauvre qui héritera de ce nom de domaine quand il sera alloué).

2003-11-26, 15:36(+01), Pascal Bourguignon:
[...]
Il faut que le repertoire et le liens appartiennent à root par ex. :


Non, pas à root! Seulement à un autre utilisateur.
Par exemple, pour un utilisateur toto, créer un compte toto-imp, etc:
[...]


Pourquoi, « pas à root » ? Ça me semblait pourtant le plus
approprié.


Parce qu'en passant par root on a le risque de faire une erreur
catastrophique, et que ça ne marche pas (socialement) quand il y a
plus de deux utilisateurs.

C'est moins risqué de donner N compte à chaque utilisateur, ou de
donner un compte à chaque programme.



Un des gros problèmes avec la sécurité unix, ce n'est pas qu'il n'y
ait que deux anneaux, c'est que les gens ne comprennent pas qu'il y en
a en fait des dizaines de milliers. Quand on passe de multics à unix,
et qu'on simplifie en fait on généralise. Multics était limité à un
nombre fini d'anneaux, unix est illimité!

--
__Pascal_Bourguignon__ http://www.informatimago.com/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Living free in Alaska or in Siberia, a grizzli's life expectancy is 35 years,
but no more than 8 years in captivity. http://www.theadvocates.org/



Avatar
Pascal Bourguignon
Remi Moyen writes:

On Wed, 26 Nov 2003, no wrote:

Ah oui, pas mal. Sauf que je peux toujours faire un rm toto. Je n'y perds
que le lien, pas le fichier lui-même, bien sûr, mais ça serait parfait si
je pouvais aussi empécher de l'effacer.


Il faut que le repertoire et le liens appartiennent à root par ex. :


Malheureusement, dans ce cas précis, je ne contrôle pas le logiciel qui
gère ce fichier, et donc le choix du répértoire dans lequel il écrit.
C'est mon home, point final. Et donc, faire les changements que tu
proposes sur mon home, ça aurait, comment dire... quelques désavantages
annexes ;-) !


Tu peux te créer autant de home que tu veux.

Pour commencer, on peut proprement créer autant de compte qu'on veut
pour chaque utilisateur: remi1, remi2, remi3...

Mais si on ne veut pas trop s'embêter avec les propriétaires des
fichiers, on peut avoir plusieurs répertoires home pour un
_même_utilisateur_, c'est à dire, un même UID:

remi1:x:1002:1002:Remi Moyen:/home/remi1:/bin/bash
remi2:x:1002:1002:Remi Moyen:/home/remi2:/bin/bash
^^^^__ même UID! ^^^^^^^^^^^__ home différent!
remi3:x:1003:1002:Remi Moyen:/home/remi3:/bin/bash
^^^^__ autre UID.

rwxr-xr-x remi1 /home/remi1
r-xr-xr-x remi3 /home/remi2 <-- remi1 ni remi2 n'est propriétaire du home remi2
rwxr-xr-x remi3 /home/remi3

Ainsi on peut exécuter le programme sous le compte remi2, avec les
propriétés voulues.


Une autre solution que peut fonctionner, si le programme en question
en va pas lire /etc/passwd, c'est simplement de modifier la variable
d'environnement HOME:

HOME=$HOME/un/sous/repertoire/protege mauvais-programme


J'avais déjà pensé à cette solution, mais le manque de contrôle sur le
répértoire du fichier m'en a rapidement éloigné.
--
Rémi Moyen
"Malgré les apparences, le temps est très varié à Nancy :
pluie, nuages, neige, brouillard, grêle, ..."


Personnellement, à chaque fois que je suis allé à Nancy, il y avait un
beau ciel bleu.

--
__Pascal_Bourguignon__ http://www.informatimago.com/
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Living free in Alaska or in Siberia, a grizzli's life expectancy is 35 years,
but no more than 8 years in captivity. http://www.theadvocates.org/



1 2