V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
ppllss
V2EX  ›  程序员

命令行程序问题 在 sudo 下怎么获取当前用户信息?

  •  
  •   ppllss · 2023-12-27 10:41:50 +08:00 · 932 次点击
    这是一个创建于 366 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在 Windows 下命令行已管理员方式运行是可以拿到当前用户信息的

    但是 Linux 下面 以 sudo 的方式运行程序,发现获取当前命令变成了 root

    不知道怎么办了。查询无果。用的 go 语言写的
    AoEiuV020JP
        1
    AoEiuV020JP  
       2023-12-27 11:13:35 +08:00
    不太理解,确实如你所说 sudo 运行的程序当前用户就是 root ,这有什么问题吗?
    考虑 xy problem ,
    非要判断的话可以通过 shell 进程或者 x 进程 UID 判断当前有那些用户是登录状态,
    liumory
        2
    liumory  
       2023-12-27 12:03:14 +08:00
    sudo -E 可以保留当前用户的环境变量。那么是否可以通过环境变量记录当前的用户名,然后再通过 sudo -E 传递给 root 。
    export USER_INFO=·whoami·;sudo -E your_program
    AoEiuV020JP
        3
    AoEiuV020JP  
       2023-12-27 12:13:16 +08:00
    试了下可以通过一级一级获取父进程祖父进程直到获取 sudo 前的用户,
    正常 linux 环境 sudo 应该都是有效的,主要问题就是层级数量可能不一定,需要遍历判断到 sudo 的父进程,
    ppllss
        4
    ppllss  
    OP
       2023-12-27 15:05:46 +08:00
    @AoEiuV020JP @liumory


    就是想通过 sudo 这样的命令


    sudo ./myService

    但是程序获取到的 user.Current() 是 root
    想获取到当前用户的信息,可行吗?
    AoEiuV020JP
        5
    AoEiuV020JP  
       2023-12-27 15:19:29 +08:00   ❤️ 1
    @ppllss #4 按 3 楼的办法说不定可以,但习惯上你的程序如果必须 root 权限运行又必须对特定用户有影响,那就应该直接把用户当成参数传进去,不要想歪门邪道去获取非执行者的身份,
    参考 passwd 命令,默认是修改当前用户的密码,
    sudo passwd 那就是修改 root 用户的密码,而不是修改执行 sudo 前的用户的密码,
    要用 roof 权限修改特定用户的密码,那就是 sudo passwd <username>, 把要操作的对象当作参数传入,这就是最普通合适的做法,
    AoEiuV020JP
        6
    AoEiuV020JP  
       2023-12-27 15:20:36 +08:00
    @AoEiuV020JP #5 尖括号被吞了,
    要用 roof 权限修改特定用户的密码,那就是 sudo passwd 《 username 》, 把要操作的对象当作参数传入,这就是最普通合适的做法,
    AoEiuV020JP
        7
    AoEiuV020JP  
       2023-12-27 15:23:55 +08:00
    @AoEiuV020JP #6 擦,居然是 v2ex-script 的 bug ,我还以为 v 站吞尖括号了,
    AoEiuV020JP
        8
    AoEiuV020JP  
       2023-12-27 15:37:48 +08:00
    如果确保是直接 sudo 跟上你的程序,要想获取用户信息办法还是有些的,但依然不建议用这些,参数传入是最靠谱的了,
    ppllss
        9
    ppllss  
    OP
       2023-12-27 15:59:46 +08:00
    @AoEiuV020JP 谢谢了
    julyclyde
        10
    julyclyde  
       361 天前
    不是应该用 SUDO_USER 吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2731 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 02:08 · PVG 10:08 · LAX 18:08 · JFK 21:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.