V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
szxczyc
V2EX  ›  问与答

subprocess 怎么样才能切换到特定用户呢?

  •  
  •   szxczyc · 2022-01-26 02:03:54 +08:00 · 1452 次点击
    这是一个创建于 1060 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想要登录到机器上去,切换到用户runjob-admin,在脚本里写了命令sudo su - runjob-admin;,但是完成不能执行。导致接下来的进入文件夹和创建新文件都失败了

    import subprocess
    def run_command(cmd_list):
        process = subprocess.run(cmd_list, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True,timeout=60)
        if process.returncode != 0:
            return None, process.stderr
        return process.stdout, None
    
    def run(client,ip):
        scipt = """
                sudo su - runjob-admin;
                cd lisi/runjob/;
                touch xxxxxxxxxxxxx.py;
                """
    
        cmd = [client, ip]
        cmd.extend(scipt.split())
        output, err = run_command(cmd)
        print(output)
        if err is not None:
            return
        try:
            data = eval(output)
        except Exception as e:
            return
    
        return data
        
    date = run("jobtool-ssh", "10.10.1.1")#jobtool-ssh 是一个内部登录工具
    
    8 条回复    2022-01-27 16:16:19 +08:00
    msg7086
        1
    msg7086  
       2022-01-26 02:38:05 +08:00
    一个普通进程是没有办法提权到超级用户的,除非是有严重的提权安全漏洞。
    在你的代码里,sudo 是 root 权限运行的,所以 sudo 内部(比如用 sudo 运行的程序,或者用 sudo 启动的 shell )可以以 root 权限运行。一旦速度结束,root 权限也就结束了。

    sudo su - runjob-admin;
    ↑这里 root 权限开始。 ↑这里 root 权限结束。
    Yadomin
        2
    Yadomin  
       2022-01-26 02:46:35 +08:00 via Android
    sudo -u user command
    Buges
        3
    Buges  
       2022-01-26 07:06:34 +08:00 via Android
    iScout
        4
    iScout  
       2022-01-26 08:58:53 +08:00 via Android
    sudo 只能管到第一个分号,后面的没有 sudo 权限
    zhaohui318
        5
    zhaohui318  
       2022-01-26 10:20:23 +08:00   ❤️ 1
    ```
    sudo -i -u runjob-admin bash << EOF
    cd lisi/runjob/;
    touch xxxxxxxxxxxxx.py;
    EOF
    ```
    szxczyc
        6
    szxczyc  
    OP
       2022-01-26 10:50:44 +08:00
    @zhaohui318 这个方法是好的,但是如果我想要跑一个 ansible-playbook 的任务并且拿到返回值这样是不是就不行了~
    Kinnice
        7
    Kinnice  
       2022-01-27 11:05:26 +08:00 via Android
    登录 runjob-admin 账号,进行操作。
    abw
        8
    abw  
       2022-01-27 16:16:19 +08:00
    试下 sshpass:sshpass -p <passwd> ssh <user>@<host> "echo <passwd> | sudo -S <command>"
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2743 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 03:38 · PVG 11:38 · LAX 19:38 · JFK 22:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.