Alionet - Communauté openSUSE francophone

openSUSE => Sécurité => Discussion initiée par: oh!rocks le 17 Août, 2021, 11:35:41

Titre: Comment savoir quel script actif utilise nohup ?
Publié par: oh!rocks le 17 Août, 2021, 11:35:41
Bonjour toutes et tous,

Depuis quelques jours, j'ai dans mon répertoire perso un fichier nohup.out dont les droits sont  rw pour root seulement.

ohrocks@x240:~> ls -l  nohup.out
-rw------- 1 root root 0 16 août  10:36 nohup.out

Ce fichier se régénère à chaque redémarrage ce qui veut dire qu'un script "système" le crée.
Ce fichier sert normalement à tenir les logs ou les erreurs du script en question mais ce fichier, dans mon cas, reste vide systématiquement.

Questions.

1. comment savoir d'où vient ce fichier ?
2. comment m'en débarrasser ?


Merci, à plus,
oh!rocks
Titre: Re : Comment savoir quel script actif utilise nohup ?
Publié par: Pascal le 18 Août, 2021, 00:04:30
Salut

Alors chez moi il est pas vide et le contenu concerne Yast.

Titre: Re : Comment savoir quel script actif utilise nohup ?
Publié par: denebe le 18 Août, 2021, 07:48:13
Salut,

intéressant ça, chez moi je n'ai rien. Je viens de vérifier dans mon dossier personnel, rien.

nohup sert à rendre un programme indépendant du terminal dans lequel il a été démarré.

Exemple:
terminal1>$ ./programme1.sh &
terminal1>$ nohup ./programme2.sh &
Les deux programmes tournent en tache de fond.
Si tu fermes terminal1, alors programme1 reçoit un SIGHUP (signal hang up) et fermera automatiquement.
Mais programme2 continuera à tourner en tache de fond car il est devenu indépendant du terminal1.

Le seul moyen de fermer programme2 est un kill…

Le man nohup (https://linux.die.net/man/1/nohup) nous dit:
If standard input is a terminal, redirect it from /dev/null.
If standard output is a terminal, append output to 'nohup.out' if possible, '$HOME/nohup.out' otherwise.
If standard error is a terminal, redirect it to standard output.
To save output to FILE, use 'nohup COMMAND > FILE'.

Il s'agit de la sortie standard d'un processus qui a été lancé avec la commande nohup. Un processus est donc probablement lancé en root comme ceci je dirais (ou dans un script…):
# nohup COMMAND > ~Ton_Home/nohup.out &
Si le programme (la commande) n'envoie rien vers sa sortie standard le fichier va rester vide (sauf la sortie error output est non vide…)
Peut-être que le programme est déjà fermé et que le nohup.out reste…
Titre: Re : Comment savoir quel script actif utilise nohup ?
Publié par: denebe le 18 Août, 2021, 09:00:32
Peut-être qu'avec un log il y a une trace…

J'ai un petit test pour voir (un script):
#!/bin/bash

while [ true ]; do
sleep 5
echo "toto" >> /home/thierry/tartar/programme1.log
done
je lance le script en tache de fond avec nohup:
thierry@toto-PC:~/tartar> nohup ./programme1.sh &
[1] 9012
thierry@toto-PC:~/tartar> nohup: Eingabe wird ignoriert und Ausgabe an 'nohup.out' angehängt
thierry@toto-PC:~/tartar>
la commande 'lsof' pourrait peut-être t'indiquer quelle programme interagit avec nohup.out
thierry@toto-PC:~> lsof | grep nohup.out
lsof: WARNING: can't stat() tracefs file system /sys/kernel/debug/tracing
      Output information may be incomplete.
programme 9012                   thierry    1w      REG                8,7         0    1705419 /home/thierry/tartar/nohup.out
programme 9012                   thierry    2w      REG                8,7         0    1705419 /home/thierry/tartar/nohup.out
sleep     9031                   thierry    1w      REG                8,7         0    1705419 /home/thierry/tartar/nohup.out
sleep     9031                   thierry    2w      REG                8,7         0    1705419 /home/thierry/tartar/nohup.out
thierry@toto-PC:~> ps ax | grep programme1
 9012 pts/3    S      0:00 /bin/bash ./programme1.sh
 9047 pts/2    S+     0:00 grep --color=auto programme1
thierry@toto-PC:~>

je kill programme1.sh…
thierry@toto-PC:~> kill 9012
thierry@toto-PC:~>
Titre: Re : Comment savoir quel script actif utilise nohup ?
Publié par: oh!rocks le 18 Août, 2021, 14:58:05
Merci.

Bizarrement, lsof ne me renvoie rien :

ohrocksj@x240:~> lsof | grep nohup.out
lsof: WARNING: can't stat() tracefs file system /sys/kernel/debug/tracing
      Output information may be incomplete.
ohrocks@x240:~>


à plus,
oh!rocks
Titre: Re : Comment savoir quel script actif utilise nohup ?
Publié par: denebe le 18 Août, 2021, 22:46:00
C'est que le "programme" recherché ne tourne plus je pense.

Dans mon exemple (le petit script), programme1.sh tournait en tache de fond, c'est pour cela que 'lsof' l'a détecté comme programme interagissant avec nohup.out.

Il faudrait  trouver un moyen d'inspecter tout ça pendant le boot.

Sinon en regardant le "timestamp" de la création du  fichier (date, heure, minute, seconde), et en cherchant un peu dans tes logs à la même date/heure/minute/seconde, il est peut-être possible de confondre le coupable…

Tschüss.
Titre: Re : Comment savoir quel script actif utilise nohup ?
Publié par: denebe le 04 Septembre, 2021, 14:20:35
Je viens tout juste d'installer Tumbleweed (pour pouvoir utiliser gns3). J'ai un fichier nohup.out dans mon dossier personnel.

J'ai installé/configuré:
packman repositery;
zone firewalld par defaut: home;
port smb ouvert sur le zone home;
conf imprimante réaseau lexmark en ipps;
port ipp-client ouvert sur le zone home (pour l'imprimante);
marble;
libdvdcss2;
ublock (anti pub sur firefox)
gns3 gui et server: un simulateur de réseau;
la sortie son sur S/PDIF
bref, plus deux trois bricoles.

et j'essaie Wayland

Mais j'ai bien un fichier nohup.out ! (qui ne figure pas sur Leap)

Par contre, il n'est pas vide, j'ai une répétition de cette ligne:
/usr/share/YaST2/lib/y2packager/clients/inst_productsources.rb:357: warning: URI.unescape is obsolete

===================================

Àprès avoir renommé le fichier, et après avoir redémarré aucun nouveau fichier nohup.out n'est réapparu.

=====================

Je viens d'installer thunderbird via Yast2, un nouveau fichier nohup.out (vide) est apparu au même moment…

======================

** Chez moi:
un fichier nohup.out vide apparaît automatiquement quand, une fois avoir ouvert Yast en gui, j'appuie sur "installation et suppression de logiciels" de même que quand j'appuie sur "firewall".
=> Ça apparaît dès que j'utilise une des propositions de Yast2.
Titre: Re : Comment savoir quel script actif utilise nohup ?
Publié par: denebe le 04 Septembre, 2021, 18:46:27
Je viens de trouver un service sympas: auditd
auditd permet de surveiller (monitorer  :o ) un dossier, un fichier, peu importe.

J'ai donc surveillé le programme nohup car c'est lui qui produit les fichiers nohup.out.
Le service auditd  est déjà présent et démarré:
localhost:/etc/audit # systemctl status auditd
● auditd.service - Security Auditing Service
     Loaded: loaded (/usr/lib/systemd/system/auditd.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2021-09-04 14:41:38 CEST; 3h 38min ago
       Docs: man:auditd(8)
             https://github.com/linux-audit/audit-documentation
    Process: 597 ExecStart=/sbin/auditd (code=exited, status=0/SUCCESS)
    Process: 629 ExecStartPost=/sbin/augenrules --load (code=exited, status=0/SUCCESS)
   Main PID: 624 (auditd)
      Tasks: 2 (limit: 4915)
        CPU: 210ms
     CGroup: /system.slice/auditd.service
             └─624 /sbin/auditd

Sep 04 14:41:38 localhost systemd[1]: Starting Security Auditing Service...
Sep 04 14:41:38 localhost auditd[624]: No plugins found, not dispatching events
Sep 04 14:41:38 localhost auditd[624]: Init complete, auditd 3.0.3 listening for events (startup state enable)
Sep 04 14:41:38 localhost augenrules[700]: cp: reguläre Datei '/etc/audit/audit.rules.prev' kann nicht angelegt werden: Das Dateisystem ist nur lesbar
Sep 04 14:41:38 localhost augenrules[720]: cp: reguläre Datei '/etc/audit/audit.rules' kann nicht angelegt werden: Das Dateisystem ist nur lesbar
Sep 04 14:41:38 localhost augenrules[722]: chmod: Beim Setzen der Zugriffsrechte für '/etc/audit/audit.rules': Das Dateisystem ist nur lesbar
Sep 04 14:41:38 localhost augenrules[727]: No rules
Sep 04 14:41:38 localhost systemd[1]: Started Security Auditing Service.

les commandes intéressantes sont auditctl et ausearch

1) Je supprime le fichier nohup.out de mon dossier personnel (c'est inutile mais je l'ai fait dans le doute)
2) Je lance la surveillance:
# auditctl -w /usr/bin/nohup -p wrxa -k text1_filter
w-> watch…
p-> quelles permissions sont à surveiller (toutes !! r=read, w=write, x=execute, a=attribute change)
k-> inutile, c'est pour rechercher le résultat correspondant à cette surveillance (quand beaucoup de fichiers sont surveillés)
3) Je lance dans YAST par exemple "installer/supprimer des logiciels" (je vois que le fichier nohup.out est créé… => je ferme yast)
4) Je regarde le résultat de la surveillance:
localhost:/etc/audit # ausearch -f /usr/bin/nohup 
----
time->Sat Sep  4 18:15:01 2021
type=PROCTITLE msg=audit(1630772101.976:770): proctitle=2F7573722F62696E2F6E6F687570002F7573722F7362696E2F79617374320073775F73696E676C65
type=PATH msg=audit(1630772101.976:770): item=1 name="/lib64/ld-linux-x86-64.so.2" inode=3011133 dev=08:09 mode=0100755 ouid=0 ogid=0 rdev=00:00 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=PATH msg=audit(1630772101.976:770): item=0 name="/usr/bin/nohup" inode=3013706 dev=08:09 mode=0100755 ouid=0 ogid=0 rdev=00:00 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=CWD msg=audit(1630772101.976:770): cwd="/home/thierry"
type=EXECVE msg=audit(1630772101.976:770): argc=3 a0="/usr/bin/nohup" a1="/usr/sbin/yast2" a2="sw_single"
type=SYSCALL msg=audit(1630772101.976:770): arch=c000003e syscall=59 success=yes exit=0 a0=5571a9caee30 a1=5571a9cac6b0 a2=5571a9cabad0 a3=7f770ef5f8f0 items=2 ppid=1 pid=11876 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=1 comm="nohup" exe="/usr/bin/nohup" subj==unconfined key="text1_filter"

On peut clairement lire /usr/sbin/yast2 dans le résultat. Je ne suis pas un pro de la lecture de ce genre de résultat, mais YAST2 a l'air de jouer un certain rôle dans cette histoire.
5) Je supprime toutes les surveillances:
localhost:/etc/audit # auditctl -D
No rules

@oh!rocks
En faisant pareil, tu peux déterminer un coupable (il y en a peut-être d'autres ?) -> Attention, je ne dis pas que yast2 est le problème (il faut réfléchir, mais au moins une piste…)
De plus tu n'as pas besoin de supprimer nohup.out : je viens de vérifier, /usr/sbin/yast2 est toujours présent dans le compte rendu de la surveillance…

Titre: Re : Comment savoir quel script actif utilise nohup ?
Publié par: denebe le 05 Septembre, 2021, 16:43:05
C'est bien un bug impliquant yast2 de près ou de loin.
https://bugzilla.suse.com/show_bug.cgi?id=1189651
Titre: Re : Comment savoir quel script actif utilise nohup ?
Publié par: oh!rocks le 08 Septembre, 2021, 10:34:17
Merci denebe pour ce test avec auditd.
Je teste ça.


à plus,
oh!rocks