Назад | Перейти на главную страницу

Есть ли в Linux способ, при котором один пользователь без полномочий root может проверить, использует ли другой пользователь без полномочий root OpenSSL или нет без разрешения sudo?

Рассмотрим этот сценарий, где Пользователь-А и Пользователь-B оба пользователя без полномочий root работают на сервере.

Пользователь-А работает другая программа P1 (pid-2814), P2 (pid-2815), тогда как Пользователь-B работает другая программа M1 (pid-3810), M2 (pid-3811).

Процесс P1 пользователя A и процесс M1 пользователя B используют OpenSSL.

Когда пользователь-A выполняет эту команду

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

вывод показывает, что процесс P1 использует OpenSSL.

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

Вышеупомянутая команда не отображает Процесс M1 пользователя-B также использует OpenSSL.

Когда пользователь-A выполняет команду ниже

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

он показывает, что процесс P1 пользователя-A и процесс M1 пользователя-B используют OpenSSL.

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

Есть ли способ узнать, что процесс M1 пользователя B (пользователь без полномочий root) использует OpenSSL от пользователя A (другой пользователь без полномочий root) без разрешения sudo?

Примечание : С командой fuser я получаю аналогичные результаты.

без разрешения sudo ТОЛЬКО процесс P1 использует OpenSSL.

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

а с разрешением sudo выходные данные показывают, что и процесс P1, и M1 используют OpenSSL.

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

Я использую Debian / Ubuntu. Любая ссылка на ключ к достижению вышеизложенного будет принята с благодарностью. Заранее спасибо.

Это будет простой скрипт для перечисления программ, которые выполняет конкретный пользователь, и последующей проверки всех программ, используют ли они определенную библиотеку:

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)

Если у вас есть доступ к исполняемым файлам, вы можете использовать ldd /usr/bin/progname чтобы увидеть, с какими библиотеками связаны ссылки, без каких-либо повышенных прав.