Рассмотрим этот сценарий, где Пользователь-A и Пользователь-B - оба пользователя без полномочий root, которые работают на сервере.
Пользователь-A выполняет другую Программу 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. Мы будем очень благодарны за любую ссылку, указывающую на указанное выше. Заранее благодарим.
Если у вас есть доступ к исполняемым файлам, вы можете использовать ldd /usr/bin/progname
, чтобы посмотреть, с какими библиотеками связаны, не требуя повышенных прав.
Это был бы простой сценарий для перечисления программ, которые выполняет конкретный пользователь, а затем проверки всех программ на предмет того, используют ли они определенную библиотеку:
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)