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.
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.
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 <slrnhp1oo9.kik.knatschke@rayleigh.systella.fr>:
Ç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.
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.
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).
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).
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).
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.
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.
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 <slrnhp1oo9.kik.knatschke@rayleigh.systella.fr>:
Ç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.
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.