Moyen de ne pas afficher les arguments d'un process

24 réponses
Avatar
Kevin Denis
Bonjour,

je dois utiliser temporairement un soft sous linux.
Ce soft prend toutes ses options en ligne de commande. La conséquence, c'est
que toute personne qui fait un ps axww peut lire l'ensemble des options
utilisées.

Exemple: $ ./mon_soft -X -login=toto -password=secret -options
Depuis un autre accès: ps axww et à moi le password!

Ca m'ennuie un peu de voir trainer ce genre de choses dans un ps ax.
Existe t'il un moyen simple (avant que je ne change de soft) de lancer
un programme sous linux avec des options sans qu'on les affiche avec un
ps ax? J'ai naïvement tenté de faire un alias ou un wrapper C contenant
un appel system("mon_soft"), mais ça ne fonctionne pas.

Une idée?
Merci
--
Kevin

10 réponses

1 2 3
Avatar
Nicolas George
Kevin Denis , dans le message
, a écrit :
Existe t'il un moyen simple (avant que je ne change de soft) de lancer
un programme sous linux avec des options sans qu'on les affiche avec un
ps ax?



Non. Le programme lui-même peut changer cet affichage, mais à moins de le
ptracer pour le forcer à faire ça, il n'y a pas moyen de le faire de
l'extérieur.

Si ce soft ne prévoit pas de moyen pour recevoir le mot de passe par une
variable d'environnement (les Unix décent ne permettent pas de lire
l'environnement des processus appartenant à autrui) ou un file descriptor,
il est bon à jeter.
Avatar
xtof
Le 02 May 2013 13:10:42 GMT,
Kevin Denis a écrit :

Bonjour,

je dois utiliser temporairement un soft sous linux.
Ce soft prend toutes ses options en ligne de commande. La
conséquence, c'est que toute personne qui fait un ps axww peut lire
l'ensemble des options utilisées.

(...)



Pour masquer les paramètres d'une commande, sous Linux, on peut
utiliser ce vieux truc:


#include <stdio.h>

main(argc, argv) char **argv;
{
int i;
char *p;

for (i = 1; i < argc; i++) {
p = argv[i];
while (*p)
*p++ = 'X';
}

getchar();
}


Verifie que les paramètres ont disparu du fichier /proc/(PID)/cmdline,
qu'utilise ps(1)..

--
christophe.
Avatar
xtof pernod
Le 02 May 2013 13:10:42 GMT,
Kevin Denis a écrit :
(...)

Exemple: $ ./mon_soft -X -login=toto -password=secret -options



Arf, cette ligne ("./mon_soft") m'a fait pensé que tu as la main
sur les sources,, mais c'est peut-être pas le cas. Désolé..


--
christophe.
Avatar
Nicolas George
xtof , dans le message , a écrit :
utiliser ce vieux truc:



Vieux, tu peux le dire. Complètement périmé, même.

#include <stdio.h>

main(argc, argv)



Déclaration de type de retour manquante.

char **argv;



Déclaration de type pré-ANSI. Ça fait un quart de siècle que c'est obsolète.

{
int i;
char *p;

for (i = 1; i < argc; i++) {
p = argv[i];
while (*p)
*p++ = 'X';
}

getchar();
}



return manquant.

Verifie que les paramètres ont disparu du fichier /proc/(PID)/cmdline,
qu'utilise ps(1)..



Ça lui fera une belle jambe, que les paramètres aient disparu d'un programme
qui ne fait rien.
Avatar
Bruno Ducrot
On 2013-05-02, Kevin Denis wrote:
Bonjour,

je dois utiliser temporairement un soft sous linux.
Ce soft prend toutes ses options en ligne de commande. La conséquence, c'est
que toute personne qui fait un ps axww peut lire l'ensemble des options
utilisées.

Exemple: $ ./mon_soft -X -login=toto -password=secret -options
Depuis un autre accès: ps axww et à moi le password!

Ca m'ennuie un peu de voir trainer ce genre de choses dans un ps ax.
Existe t'il un moyen simple (avant que je ne change de soft) de lancer
un programme sous linux avec des options sans qu'on les affiche avec un
ps ax? J'ai naïvement tenté de faire un alias ou un wrapper C contenant
un appel system("mon_soft"), mais ça ne fonctionne pas.




Je ne sais répondre à ta question. Par contre, tu peux utiliser
l'option 'hidepid' lors du montage de ton /proc, ce qui permet
de cacher les process dont l'uid n'est pas celui de l'appelant.

Pour tester :

mount -o remount,hidepid=1 proc /proc
ps axuww (en tant qu'utilisateur normal)
ls /proc

(on voit malgré tout l'arboresecence de tous les process).

mount -o remount,hidepid=2 proc /proc
ps axuww (en tant qu'utilisateur normal)
ls /proc
(les répertoires ne sont plus visibles, par exemple ls /proc/1
renvoie une erreur).

Enfin
mount -o remount,hidepid=0 proc /proc
pour revenir au mode normal.



Il t'appartiendra alors de modifier /etc/fstab en conséquence, par exemple
avec :
proc /proc procfs hidepid=2,gidP0 0 0

Note final, l'option gidP0 permet à un process, dont l'egid est 500, de
pouvoir malgré tout accéder à l'ensemble des process, ce qui peut
s'avérer utile pour certains process dont le rôle est de monitorer
le système.

A plus,

--
Bruno Ducrot

A quoi ca sert que Ducrot hisse des carcasses ?
Avatar
JKB
Le Thu, 2 May 2013 20:23:43 +0200,
xtof écrivait :
Le 02 May 2013 13:10:42 GMT,
Kevin Denis a écrit :

Bonjour,

je dois utiliser temporairement un soft sous linux.
Ce soft prend toutes ses options en ligne de commande. La
conséquence, c'est que toute personne qui fait un ps axww peut lire
l'ensemble des options utilisées.

(...)



Pour masquer les paramètres d'une commande, sous Linux, on peut
utiliser ce vieux truc:


#include <stdio.h>

main(argc, argv) char **argv;
{
int i;
char *p;

for (i = 1; i < argc; i++) {
p = argv[i];
while (*p)
*p++ = 'X';
}

getchar();
}


Verifie que les paramètres ont disparu du fichier /proc/(PID)/cmdline,
qu'utilise ps(1)..



Personnellement, je n'ai jamais essayé, mais j'utiliserais plutôt un
NULL. J'ai pour idée que ./prog "" pourrait joyeusement
segfaulter...

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
xtof pernod
Le 02 May 2013 18:46:12 GMT,
Nicolas George <nicolas$ a écrit :

xtof , dans le message , a écrit  :
> (...)



Merci pour les warnings, justement j'en manque..


Ça lui fera une belle jambe, que les paramètres aient disparu d 'un
programme qui ne fait rien.



Il ne fait pas rien. Il masque les paramètres qu'il a reçu.
A ajouter éventuellement à un programme dont on a le source..

--
christophe.
Avatar
xtof pernod
Le Fri, 3 May 2013 09:19:29 +0000 (UTC),
JKB a écrit :

Le Thu, 2 May 2013 20:23:43 +0200,
xtof écrivait :
> Le 02 May 2013 13:10:42 GMT,
> Kevin Denis a écrit :
>
>> (...)
J'ai pour idée que ./prog "" pourrait joyeusement
segfaulter...

JKB




Nope, ça passe. La boucle est "while (*p)", et s'arrête donc au 1 er
octet nul..


--
christophe.
Avatar
Nicolas George
xtof pernod , dans le message , a
écrit :
Il ne fait pas rien. Il masque les paramètres qu'il a reçu.



Et c'est tout. Il n'en fait strictement rien.
Avatar
JKB
Le Fri, 3 May 2013 13:21:52 +0200,
xtof pernod écrivait :
Le Fri, 3 May 2013 09:19:29 +0000 (UTC),
JKB a écrit :

Le Thu, 2 May 2013 20:23:43 +0200,
xtof écrivait :
> Le 02 May 2013 13:10:42 GMT,
> Kevin Denis a écrit :
>
>> (...)
J'ai pour idée que ./prog "" pourrait joyeusement
segfaulter...

JKB




Nope, ça passe. La boucle est "while (*p)", et s'arrête donc au 1er
octet nul..



J'ai lu le truc en diagonale (et tu l'as effacé de ma réponse). De
mémoire, à un moment, tu colles 'X' dans l'argument courant. Si
l'argument courant était "", il risque de se passer des choses parce
que tu remplaces un caractère de fin de chaîne par un autre
caractère non nul (où se trouve alors la fin de la chaîne ?). Par
ailleurs, je ne suis pas sûr que cette mémoire soit accessible en
écriture de façon portable (si tu fais ça sur un VMS des familles, tu
te prends un coup de pied aux fesses bien mérité).

Enfin, c'était le pinaillage de trolldi.

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
1 2 3