【问题标题】:How do I execute a command as the original user from a sudo'd program?如何以原始用户身份从 sudo 程序执行命令?
【发布时间】:2025-12-15 23:00:01
【问题描述】:

我必须使用sudo 来运行我的程序:

 sudo ./my_program

我正在尝试从我的程序运行git clone,但它尝试使用 root 用户的 SSH 密钥而不是我的。 有没有办法以最初调用我的程序的用户身份执行这个命令?

我想我能做到:

su - original_user -c "git --version"

但是我如何找出原始用户的用户名?或者还有其他优雅的解决方案吗?

【问题讨论】:

    标签: c unix sudo


    【解决方案1】:

    sudo 手册显示 $SUDO_USER 应该给你原始用户的用户名,$SUDO_UID 给你原始用户的 UID。

    【讨论】:

    • 还有$SUDO_UID原用户的UID。
    【解决方案2】:

    在从网络应用程序创建文件时,我在 NAS 上使用 Samba 时遇到了这个问题。

    在这种情况下,我检索了正在运行的进程并确定了哪个用户正在运行 samba。 隔离该名称后,我拥有了正确的用户帐户。也许这也适用于您的情况?

    在这种情况下,我想您需要过滤 ps 输出并查找程序的名称。通过在 bash 上测试它是否有效。

    【讨论】:

    • 对不起,反过来了。使用 ps -u 确定活跃的用户,并评估 command 下的值以确定他们启动了哪个进程。