Рассмотрим этот сценарий, где Пользователь-А и Пользователь-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
чтобы увидеть, с какими библиотеками связаны ссылки, без каких-либо повышенных прав.