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

Empêcher les modifications d'un fichier

13 réponses
Avatar
JKB
Bonjour à tous,

Je cherche le moyen d'empêcher la modification d'un fichier binaire
sur un fs quelconque. J'ai ressorti ma bible POSIX, mais soit rien
n'est prévu pour cela, soit j'ai raté quelque chose. En gros,
j'arrive à poser des verrous coopératifs ou exclusifs sur un
fichier, mais ça n'empêche pas qu'un tiers vienne virer ou modifier
le fichier en question s'il ne cherche pas à acquérir le verrou.
La solution (pas propre) pourrait donc être le verrouillage de
l'inode, mais je n'ai rien trouvé de probant.

Remarquez, je m'y prends peut-être comme un manche ;-) Mon problème
est le suivant : je calcule une somme de contrôle sur un fichier
sensible avant de l'utiliser. Le but est de verrouiller ce fichier
pour qu'il ne puisse pas être modifié dans le dos de l'utilisateur
entre le moment où est calculée cette somme de contrôle et la
lecture des données. Je ne peux pas garder l'ensemble des données
dans la mémoire, ce serait trop simple.

Une idée ?

Merci d'avance,

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.

3 réponses

1 2
Avatar
JKB
Le 05-03-2010, ? propos de
Re: Empêcher les modifications d'un fichier,
JB ?crivait dans fr.comp.os.unix :
Nicolas George wrote:

JKB wrote in message :
Ça change au contraire tout puisque les données restent à
l'intérieur de l'outil et ne sont pas envoyées à un préprocesseur
externe.



Tu n'as pas compris ce que je te suggérais : fais une copie de ton machin
dans un répertoire où tu es le seul à avoir les droits. Après ça, tu fais
ce que tu veux.



bonsoir,
selinux répond-il aux besoins?



Non. En l'occurrence, le truc tourne sous Solaris et Linux en
production (et à la marge sur du Net/FreeBSD).

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
Avatar
Cyrille Lefevre
JKB a écrit :
Le 05-03-2010, ? propos de
Re: Empêcher les modifications d'un fichier,
JB ?crivait dans fr.comp.os.unix :
Nicolas George wrote:

JKB wrote in message :
Ça change au contraire tout puisque les données restent à  
l'intérieur de l'outil et ne sont pas envoyées à un p réprocesseur
externe.


Tu n'as pas compris ce que je te suggérais : fais une copie de t on machin
dans un répertoire où tu es le seul à avoir les droits . Après ça, tu fais
ce que tu veux.


bonsoir,
selinux répond-il aux besoins?



Non. En l'occurrence, le truc tourne sous Solaris et Linux en
production (et à la marge sur du Net/FreeBSD).



Bonjour,

voila l'information qu'il manquait depuis le début, l'OS...
en ce qui concerne Free/NetBSD, facile, sous Linux, il semble y avoir un
équivalent, je ne sais pas s'il en existe un sous Solaris < 10 ?

sous Linux, chattr +i semble convenir à ton besoin, cela semble avoi r un
lien avec LIDS ?

man 1 chattr
http://www.lids.org/lids-howto/node1.html

sous FreeBSD, direction chflags uchg (ou schg) avec un secure level à 1,
tu ne peux plus rien faire sur ledit fichier sans repasser en single
user via un reboot. alternative, chflags uunlnk (ou sunlnk).

en ce qui concerne le secure level, c'est sysctl kern.securelevel=1,
suivi de echo kern.securelevel=1 >> /etc/sysctl.conf ou de
echo kern_securelevel_enable=YES >> /etc/rc.conf (solution préfà ©rée),
alternative, echo kern_securelevel=1 >> /boot/loader.conf

man 1 chflags
man 8 security

sous NetBSD, c'est echo securelevel=1 >> /etc/rc.conf
pour le reste, c'est pareil hormis /boot/loader.conf qui n'existe pas.

man 1 chflags
man 9 secmodel_securelevel

sous Solaris 10, chmod S+ci, ou S+v immutable devrait aussi faire
l'affaire ?

man 1 chmod :-)

Cordialement,

Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%
supprimer "%nospam% et ".invalid" pour me repondre.
Avatar
JKB
Le 05-03-2010, ? propos de
Re: Empêcher les modifications d'un fichier,
Cyrille Lefevre ?crivait dans fr.comp.os.unix :
JKB a écrit :
Le 05-03-2010, ? propos de
Re: Empêcher les modifications d'un fichier,
JB ?crivait dans fr.comp.os.unix :
Nicolas George wrote:

JKB wrote in message :
Ça change au contraire tout puisque les données restent à
l'intérieur de l'outil et ne sont pas envoyées à un préprocesseur
externe.


Tu n'as pas compris ce que je te suggérais : fais une copie de ton machin
dans un répertoire où tu es le seul à avoir les droits. Après ça, tu fais
ce que tu veux.


bonsoir,
selinux répond-il aux besoins?



Non. En l'occurrence, le truc tourne sous Solaris et Linux en
production (et à la marge sur du Net/FreeBSD).



Bonjour,

voila l'information qu'il manquait depuis le début, l'OS...
en ce qui concerne Free/NetBSD, facile, sous Linux, il semble y avoir un
équivalent, je ne sais pas s'il en existe un sous Solaris < 10 ?

sous Linux, chattr +i semble convenir à ton besoin, cela semble avoir un
lien avec LIDS ?

man 1 chattr
http://www.lids.org/lids-howto/node1.html

sous FreeBSD, direction chflags uchg (ou schg) avec un secure level à 1,
tu ne peux plus rien faire sur ledit fichier sans repasser en single
user via un reboot. alternative, chflags uunlnk (ou sunlnk).

en ce qui concerne le secure level, c'est sysctl kern.securelevel=1,
suivi de echo kern.securelevel=1 >> /etc/sysctl.conf ou de
echo kern_securelevel_enable=YES >> /etc/rc.conf (solution préférée),
alternative, echo kern_securelevel=1 >> /boot/loader.conf

man 1 chflags
man 8 security

sous NetBSD, c'est echo securelevel=1 >> /etc/rc.conf
pour le reste, c'est pareil hormis /boot/loader.conf qui n'existe pas.

man 1 chflags
man 9 secmodel_securelevel

sous Solaris 10, chmod S+ci, ou S+v immutable devrait aussi faire
l'affaire ?



Problème : ce n'est pas portable et ça nécessite un redémarrage
(dans mon cas, c'est problématique car l'outil est en période de
développemnet).

Je suis en train de regarder un autre point : pour calculer ma somme
de contrôle, j'ai lu (et j'ai encore en mémoire) le contenu du
fichier correspondant à ce préprocesseur. Avec l'appel mmap(), je
peux le mettre dans une zone mémoire dans laquelle on peut exécuter
du code (PROT_EXECi et projection anonyme). La question est alors de
savoir comment l'exécuter. Je pensais à quelque chose comme fork() +
exec*(), mais aucun appel système ne semble convenir...

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
1 2