Oorweeg hierdie scenario waar Gebruiker-A en Gebruiker-B albei nie-wortelgebruikers is en binne 'n bediener loop.

Gebruiker-A loop verskillende program P1 (pid-2814), P2 (pid-2815), terwyl gebruiker-B verskillende program M1 (pid-3810), M2 (pid-3811) gebruik.

Proses P1 van Gebruiker-A en Proses M1 van Gebruiker-B gebruik OpenSSL.

Wanneer Gebruiker-A, voer hierdie opdrag uit

lsof | grep '/usr/lib/libcrypto.so.1.0.0.1'

uitset wys, Proses P1 gebruik OpenSSL.

P1       2814  User-A  mem       REG        8,6  1633692    3812058 /usr/lib/libcrypto.so.1.0.0.1

Die bogenoemde opdrag moenie Proses M1 van User-B vertoon nie, gebruik ook OpenSSL.

Wanneer User-A, voer die onderstaande opdrag uit

sudo lsof |grep '/usr/lib/libcrypto.so.1.0.0.1'   // This is valid ONLY when User-A has sudo permission

dit wys dat Proses P1 van Gebruiker-A en Proses M1 van Gebruiker-B OpenSSL gebruik.

P1       2814  User-A  mem       REG        8,6  1633692    3812058 /usr/lib/libcrypto.so.1.0.0.1
M1       3810  User-B  mem       REG        8,6  1633692    3812058 /usr/lib/libcrypto.so.1.0.0.1

Is daar enige manier om uit te vind Proses M1 van Gebruiker-B (nie-wortelgebruiker) gebruik OpenSSL van Gebruiker-A (nog 'n nie-wortelgebruiker) sonder sudo-toestemming?

Let wel: Met fuser-opdrag kry ek soortgelyke resultate.

sonder sudo-toestemming gebruik SLEGS Proses P1 OpenSSL.

fuser -v '/usr/lib/libcrypto.so.1.0.0.1'

en met sudo-toestemming wys uitset dat beide Proses P1 en M1 OpenSSL gebruik.

sudo fuser -v '/usr/lib/libcrypto.so.1.0.0.1'

Ek gebruik Debian/Ubuntu. Enige skakel van leidraad om bogenoemde te bereik sal hoog op prys gestel word. Dankie by voorbaat.

answer

As jy toegang tot die uitvoerbare programme het, kan jy gebruik ldd /usr/bin/prognameom te sien waaraan biblioteke gekoppel is sonder om enige verhoogde regte te vereis.

Dit sal 'n eenvoudige skrif wees om die programme te lys wat 'n spesifieke gebruiker uitvoer en dan al die programme na te gaan of hulle 'n spesifieke biblioteek gebruik:

USER="www-data"
LIB="libcrypto"

while read line; do
    arr=( $line )
    com="${arr[0]}"

    # only programs with absolute paths (?)
    if [ "${com:0:1}" != "/" ]; then
        continue
    fi

    echo -n "${com} "

    ldd "${com}" | grep "${LIB}" > /dev/null

    if [ $? = 1 ]; then
        echo "NO"
    else
        echo "YES"
    fi
done < <(ps -o command -u "${USER}" | cut -d " " -f 1 | sort -u)