Comment trouver les processus qui verouillent les fichiers en mode open sans lsof

Creation: 12 fevrier 2015
Mise à jour:
Version: 1.0
Author: Jean-Louis Bicquelet-Salaün
Location: http://jlbicquelet.free.fr
Copyright: (c) 2015 Jean-Louis BICQUELET-SALAÜN

Comment trouver les processus qui verouillent les fichiers en mode open sans lsof

procedure

  • On commence par chercher les processus

    #ps -ef| grep ssh | grep bicquelet
    root 30146966  4325698   0   Jun 01      -  0:04 sshd: bicqueletjl [priv]
        root 30212470  4325698   0 13:37:52      -  0:17 sshd: bicqueletjl [priv]
    

  • on cherche les librairie dynamiques chargées par ce processus grace aux PID obtenus

    ./procldd 30146966
    30146966 : sshd: bicqueletjl [priv] [priv]
    sshd
    /usr/lib/libcfg.a[shr.o]
    /usr/lib/librpcsvc.a[shr.o]
    /usr/lib/security/NIS
    /usr/lib/security/LDAP
    /usr/lib/netsvc/dynload/nis_ldap.so
    /usr/lib/libacf.a[shr.o]
    /usr/lib/libefs.a[shr.o]
    /usr/lib/libiconv.a[shr4.o]
    /usr/lib/libi18n.a[shr.o]
    /usr/lib/nls/loc/en_US
    /usr/lib/libodm.a[shr.o]
    /usr/lib/libmlsenc.a[shr.o]
    /usr/lib/libpthreads.a[shr_comm.o]
    /usr/lib/libmls.a[shr.o]
    /usr/lib/libpthreads.a[shr_xpg5.o]
    /usr/lib/libcrypt.a[shr.o]
    /usr/lib/libdl.a[shr.o]
    /usr/lib/libpam.a[shr.o]
    /usr/lib/libz.a[libz.so.1]
    /usr/lib/libcrypto.a[libcrypto.so]
    /usr/lib/libc.a[shr.o]
    

  • On cherche grace à lafonction istat les inodes des fichiers ouverts par le processus, le mineur le le majeur.

     #istat /usr/lib/libmls.a
    Inode 4231 on device 10/5      File
    Protection: r-xr-xr-x
    Owner: 2(bin)           Group: 2(bin)
    Link count:   1         Length 156717 bytes
    
    Last updated:   Wed Apr 15 17:54:31 DFT 2015
    Last modified:  Mon May 13 17:06:44 DFT 2013
    Last accessed:  Mon Jun  1 05:25:38 DFT 2015
    

    Ici on trouve:

    • Device Major: 10

    • Device Minor: 9

    • Inode: 4231

  • On cherche les PID des processus grace au majeur, mineur et l'inode dans le répertoire /proc qui contient la liste des procesus ouverts.

    #find /proc/*/object -name "jfs2.10.5.4231"
    /proc/10158466/object/jfs2.10.5.4231
    /proc/10748068/object/jfs2.10.5.4231
    /proc/10944638/object/jfs2.10.5.4231
    /proc/10944950/object/jfs2.10.5.4231
    /proc/11403502/object/jfs2.10.5.4231
    /proc/11534702/object/jfs2.10.5.4231
    /proc/14024916/object/jfs2.10.5.4231
    /proc/14745650/object/jfs2.10.5.4231
    /proc/15335600/object/jfs2.10.5.4231
    /proc/15597588/object/jfs2.10.5.4231
    /proc/15597940/object/jfs2.10.5.4231
    /proc/16580988/object/jfs2.10.5.4231
    /proc/16711816/object/jfs2.10.5.4231
    /proc/16908350/object/jfs2.10.5.4231
    

  • Pour chaque processus on affiche à quoi il correspond

    #for p in 10158466 10158468 10944638 ; do ps -fp $p ; done
         UID      PID     PPID   C    STIME    TTY  TIME CMD
        root 10158466  4325698   0   May 12      -  0:15 sshd: bicqueletjl [priv]
         UID      PID     PPID   C    STIME    TTY  TIME CMD
         UID      PID     PPID   C    STIME    TTY  TIME CMD
        root 10944638  4325698   0   May 12      -  0:18 sshd: batman_user [priv]
    

    On remarque ici que d'autre utilisateur verouille le filesysteme.