在 Linux 中,是否有一种方法可以让一个非 root 用户在没有 sudo 权限的情况下检查另一个非 root 用户是否正在使用 OpenSSL?

在 Linux 中,是否有一种方法可以让一个非 root 用户在没有 sudo 权限的情况下检查另一个非 root 用户是否正在使用 OpenSSL?

考虑一下这个场景用户-A用户-B都是非root用户在服务器内运行。

用户-A正在运行不同的程序 P1 (pid-2814)、P2(pid-2815),而用户-B正在运行不同的程序 M1(pid-3810)、M2(pid-3811)。

用户A的进程P1和用户B的进程M1正在使用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

上述命令不显示用户 B 的进程 M1 也在使用 OpenSSL。

当用户 A 执行以下命令

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

显示用户A的进程P1和用户B的进程M1正在使用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

有什么方法可以找出用户 B(非 root 用户)的进程 M1 在没有 sudo 权限的情况下从用户 A(另一个非 root 用户)使用 OpenSSL?

笔记 :使用 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。任何能实现上述目标的链接或线索都将不胜感激。提前致谢。

答案1

如果您有权访问可执行文件,您可以使用ldd /usr/bin/progname它来查看链接到哪些库,而无需任何提升的权限。

答案2

这将是一个简单的脚本,用于列出特定用户正在执行的程序,然后检查所有程序是否使用特定的库:

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)

相关内容