OVH Cloud OVH Cloud

buffer or not buffer

99 réponses
Avatar
Herve Autret
Bonjour,

Nous avons deux disques USB "My Passport" d'un To (modèles WDBACX0010BBL
et WDBACX0010BRD). J'ai une question sur le fonctionnement des buffers
disques.

Avec l'un ou l'autre disque, monté en ntfs-g3, je lance plusieurs fois la
commande suivante :
# time tar -C $repertoire_disque -c ./ > /dev/null

La 1ère fois, elle met environ 1'10" à se terminer

Un coup d'oeil sur le site de WDt me dit que le taux de transfert peut
atteindre 480Mo/s en USB-2, ce qui est le cas de mon système.
Déjà là, on dépasse la vitesse théorique de 50% !

Mais la 2ème fois, la commande prend 12", à la 3ème 5,2", puis 4.7", etc.

La comande du se comporte de la même manière ; 1'8" puis 3.7" en
enchaînant les appels avec un disque; mais 53" puis 13" avec l'autre.

Je n'ai que 2Go de RAM, il est impossible que les données des disques
soient bufferisées là. Quelqu'un pourrait me dire si cette évolution des
temps de transfert est normale et à quoi elle est dûe dans ce cas ?

à +
--
Hervé

10 réponses

Avatar
Nicolas George
Yliur , dans le message , a écrit :
Non, mais il permet de faire : je trouve une archive, je la télécharge,
je la décompresse, je clique sur un truc qui est un exécutable mais
j'avais pas vu, ça ne me le lance pas.



Je trouve que ça devient très capilotracté. D'autant que tu peux obtenir le
même effet en utilisant une extension qui sera reconnue comme un script dans
un langage qui permet de faire des appels système ou d'exécuter des
commandes externes. Sur certains systèmes, un simple fichier .tex peut faire
ça.

la procédure habituelle n'étant pas de télécharger
des programmes venus de nulle part comme ça (oui, ça dépend de ton
utilisation bien sûr).



La procédure habituelle, on ne sait pas ce que c'est. D'ailleurs, si on va
dans cette direction : la procédure habituelle n'est pas de lancer des
programmes en cliquant sur leur exécutable : les exécutables sont rangés
dans /bin et on les lance en passant par leur entrée de menu (ou en ligne de
commande, mais ce n'est pas de ça qu'on parle).

Donc s'il y a un problème dans ce que tu décris, c'est dans le fait que
l'interface graphique permette d'exécuter des choses aussi facilement, pas
dans le fait que le noyau ne l'en empêche pas.
Avatar
Nicolas George
Hugues , dans le message , a écrit :
Pour /var/run, ok, mais pour /var/lock ?



Je ne pense à rien qui mérite de rester d'un boot à l'autre dans /var/lock,
et il me semble que certaines distributions nettoient /var/lock au boot au
même titre que /var/run, donc je pense que tu ne cours vraiment aucun
risque.
Avatar
Hugues
Ce cher Nicolas George <nicolas$ a posté :

Hugues , dans le message , a écrit :
Pour /var/run, ok, mais pour /var/lock ?



Je ne pense à rien qui mérite de rester d'un boot à l'autre dans /var/lock,
et il me semble que certaines distributions nettoient /var/lock au boot au
même titre que /var/run,



En principe. :-)

donc je pense que tu ne cours vraiment aucun risque.



Ok, merci de ton avis !

--
Hugues Hiegel [http://www.hiegel.fr/~hugues/]
Avatar
JKB
Le Thu, 24 Nov 2011 00:01:15 +0100,
NiKo écrivait :
Le 23/11/2011 23:23, Nicolas George a écrit :
NiKo , dans le message <4ecd6966$0$27879$, a
écrit :
Quelle bande de bras cassés tous ces gars qui se servent de /dev/shm !

<https://wiki.archlinux.org/index.php/dev/shm>



« There is currently no text in this page. »

Super, ta référence !



<https://wiki.archlinux.org/index.php//dev/shm>


<http://projects.gentoo-fr.org/projects/gentoo-fr/wiki/Tmpfs>



Là, clairement bras cassé. Allez, les plus flagrantes.

* « Je ne saurais trop vous conseillez », « tmpfs est trés simple à utliser
et peux »... no comment.

* Monter /tmp en noexec : merci pour les ./configure qui y font des tests de
compilation et d'exécution.




Quel est le rapport avec /dev/shm ? Parce qu'il y a des fautes
d'orthographe ? Surement que les gens qui sont derrière Arch ou Gentoo
sont des bras cassés à coté de Monsieur George !



J'aimerais aussi savoir quel script configure se permet d'aller
écrire dans /tmp pour effectuer des tests. L'intérêt de configure,
c'est justement de faire abstration de l'OS le temps de pondre un
config.h ou/et un certain nombre de scripts de compilation. Supposer
qu'il y a déjà un /tmp est une connerie sans nom parce que cela
revient à mettre la charrue avant les boeufs.

Quant au noexec,nodev,nosuid sur /tmp, c'est la base de l’administration
des systèmes unix que de ne pas permettre l'exécution dans les
répertoires qui ne sont pas censés contenir des exécutables. Et surtout
dans des répertoires accessibles en écriture à tout le monde tel /tmp.
Mais peut être auraient-ils du, il y a 40 ans, consulter Monsieur George
qui leur aurait expliqué que c'était une aberration !



Ce qui est assez amusant, c'est que les mêmes qui affirment haut et
fort que /tmp (et les autres du même acabit) doivent être montés
sans l'option -noexec sont aussi ceux qui viennent pleurer des
conséquences de leur choix.

Pour revenir au sujet : je trouve assez bizarre d'attaquer quelque
chose dans /dev lorsque je ne veux pas attaquer directement un
device. Mais rien ne m'empêche de le faire. La collision de nom est
possible, mais comme avec tous les autres noms de fichiers dans tous
les autres répertoires. Tu vas me dire qu'on est avancé, mais
/dev/shm n'est là que pour implanter les segments de mémoire
partagés POSIX car les SysV posent un certain nombres des problèmes.
Après, il faut être au courant de la chose et éviter de faire
n'importe quoi. Lorsqu'on ouvre un segment de mémoire partagée, il a
à être par défaut en 0600. Je te mets donc au défi de casser quelque
chose d'autre qu'un programme que tu as lancé dans la même session.
Tu me diras aussi que ce segment peut être en 0666 voire en 0777.
Mais là, autant toujours bosser en root ou changer d'OS.

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Avatar
JKB
Le 24 Nov 2011 08:24:40 GMT,
Nicolas George <nicolas$ écrivait :
YBM , dans le message <4ecdbc00$0$613$, a écrit :
Oui, que "noexec" est en réalité sans intérêt au niveau sécurité.



Je suis content que quelqu'un soulève la question, parce que c'est un point
sans rapport avec la discussion présente qu'il m'embêtait de laisser en
suspens, pour la pollution dans les esprits qu'il propage.

Cette manie de coller du noexec,nodev,nosuid partout est typique des gens
qui appliquent la sécurité comme un dogme, sans comprendre les mécanismes en
jeu. N'importe qui qui a un tant soit peu étudié la question sait que ça
conduit invariablement, comme le « plan vigipirate », à des mesures qui
incommodent les usagers légitimes mais ne freinent pas du tout les
attaquants.

Dans le cas de noexec, il existe de nombreuses méthodes : invoquer le
chargeur dynamique directement, utiliser un langage interprété (NiKo en a
parlé), on peut aussi produire une bibliothèque partagée et forcer un
binaire normal du système à la charger.

Il peut y avoir un sens à mettre les partitions en noexec sur un système
ultra-sécurisé, où on a pris soin de n'installer que le strict minimum, de
mettre tous les binaires en statique, de n'autoriser l'exécution absolument
nulle part, etc. Mais sur une machine d'usage régulier, mettre /tmp en
noexec, c'est comme donner deux tours de verrou à une porte posée sans
chambranle en bordure d'un champ.

Et c'est même pire, parce que beaucoup de programmes légitimes s'attendent à
ce que /tmp permette d'exécuter des programmes : ça ne freine pas les
pirates, ça gène les utilisateurs.

Dans la même série, il y avait nosuid : si on est en position de poser un
binaire SUID, c'est qu'on a déjà les droits du compte incriminé, le piratage
a déjà eu lieu. Poser un binaire SUID, ça permet juste de garder ces droits
au chaud pour plus tard, et ce n'est qu'une manière parmi beaucoup d'autres
de le faire.

Et le nodev, encore pire : si on peut créer des devices, c'est qu'on est
root, et si on est root, ce ne sont pas les options sur un filesystem qui
vont nous gêner.

Pour autant, le nodev,nosuid ont un usage légitime pour la sécurité, juste
pas celui que NiKo et ses semblables croient : ces options sont prévues pour
les cas où on importe un filesystem entier auquel on ne peut pas faire
confiance, en général par réseau ou sur un support amovible. Il est très
facile de graver un CD avec un équivalent de /dev/mem en écriture publique
ou un shell SUID root, donc si le système permet à n'importe quel
utilisateur de monter un CD, il doit le faire avec ces options nodev,nosuid.

D'ailleurs, le man de mount indique que les différentes options qui
permettent à un simple utilisateur de monter un filesystem (user, group,
owner) impliquent par défaut ces deux options (mais pas noexec). Eux,
heureusement, comprennent les problèmes en jeu.



Tu zappes juste un truc avec le noexec. Lorsque tu as des serveurs
apache, par exemple, le noexec est vraiment utile parce qu'un grand
classique, c'est l'injection qui va écrire quelque part dans un /tmp
et qui lance ni vu ni connu son script au travers de l'une des
nombreuses failles des outils écrits en php par des pieds. Le noexec
n'est pas utile lorsqu'on a déjà un accès local, mais en prévention.
De toute façon, le type qui a réussi à avoir un accès local va mettre ses
merdouilles dans un répertoire du style '.. ' et comme l'immense
majorité des distributions vient avec un zoli compilo C, c'est assez
rapidement la fête, noexec ou non.

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Avatar
Nicolas George
JKB , dans le message , a
écrit :
c'est l'injection qui va écrire quelque part dans un /tmp
et qui lance ni vu ni connu son script au travers de l'une des
nombreuses failles des outils écrits en php par des pieds.



Je ne vois pas ce que ça change, il faudra juste utiliser les bonnes options
pour exécuter le truc.

Accessoirement, si on a la sécurité en vue, on commence par désactiver PHP,
avant de changer les options de montage de /tmp.
Avatar
Nicolas George
JKB , dans le message , a
écrit :
J'aimerais aussi savoir quel script configure se permet d'aller
écrire dans /tmp pour effectuer des tests.



Euh, à peu près tous... Par exemple, coreutils :

tmp=`(umask 077 && mktemp -d /tmp/gtXXXXXX) 2>/dev/null` &&
Avatar
Herve Autret
Le Wed, 23 Nov 2011 20:14:18 +0000, Nicolas George a écrit:

Cette phrase ne dit pas ce que tu crois qu'elle veut dire et que tu
expliques juste au dessus.
[...] la libc, de leur
point de vue, n'est qu'une bibliothèque parmi d'autres.



Ok, ok.

Du coup, tu cours le risque d'entrer en conflit avec ce que la libc
s'attend à trouver dans ce répertoire, puisque tu modifies son contenu
sans passer par les fonctions idoines.



Dit comme ça, ça me paraît relever d'un principe de précaution à la
limite de l'excès. Où puis-je me renseigner pour savoir ce que la libc
est censée écrire dans ce répertoire ?

Tu devrais lire plus attentivement la description de cette option,



Ok, ok.

Qu'il y ait conflit de noms, c'est toujours possible ; comme dans /tmp
.


La différence, c'est que l'usage de /dev/shm est normalement réservé à
la glibc,



Je n'arrive pas à trouver où une telle chose serait écrite.

Non, il ne doit pas créer des fichiers dans /dev/shm,



Ben il n'est pas convaincu du bien-fondé de cette directive en général,
mais il évitera de le faire sur un serveur qu'il n'administre pas
personellement sans consulter l'admin, disons.

pas plus qu'il ne
doit créer des fichiers dans /var/lock ou ~/.fontconfig. S'il veut créer
des fichiers temporaires, il les crée dans /tmp.



Comme tout finit par arriver, un utilisateur finira bien à saturer /dev/
shm (qui n'est pas très grand) un soir après le départ de l'admin. Donc
on peut, en effet, déconseiller fortement cette pratique sur une machine
partagée.

à +
--
Hervé
Avatar
JKB
Le 24 Nov 2011 13:50:54 GMT,
Nicolas George <nicolas$ écrivait :
JKB , dans le message , a
écrit :
c'est l'injection qui va écrire quelque part dans un /tmp
et qui lance ni vu ni connu son script au travers de l'une des
nombreuses failles des outils écrits en php par des pieds.



Je ne vois pas ce que ça change, il faudra juste utiliser les bonnes options
pour exécuter le truc.



Sauf que tu n'as pas _forcément_ accès à un shell ou à autre chose
pour changer lesdites options.

Accessoirement, si on a la sécurité en vue, on commence par désactiver PHP,
avant de changer les options de montage de /tmp.



Mauvaise réponse. Souvent, tu ne _peux_ pas le désactiver parce
qu'une application écrite par un pied tourne dessus.

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Avatar
JKB
Le 24 Nov 2011 13:54:49 GMT,
Nicolas George <nicolas$ écrivait :
JKB , dans le message , a
écrit :
J'aimerais aussi savoir quel script configure se permet d'aller
écrire dans /tmp pour effectuer des tests.



Euh, à peu près tous... Par exemple, coreutils :

tmp=`(umask 077 && mktemp -d /tmp/gtXXXXXX) 2>/dev/null` &&



Mauvaise réponse. mktemp crée un fichier temporaire. Rien ne te
garantit qu'il est créé dans /tmp. Je peux te citer au moins deux
systèmes Unix où ce n'est pas vrai.

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr