szxczyc
V2EX  ›  问与答

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

  •  
  •   szxczyc · Jan 26, 2022 · 2416 views
    This topic created in 1743 days ago, the information mentioned may be changed or developed.

    想要登录到机器上去,切换到用户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 replies  •  2022-01-27 16:16:19 +08:00
    msg7086
    msg7086
    Jan 26, 2022
    1
    一个普通进程是没有办法提权到超级用户的,除非是有严重的提权安全漏洞。
    在你的代码里,sudo 是 root 权限运行的,所以 sudo 内部(比如用 sudo 运行的程序,或者用 sudo 启动的 shell )可以以 root 权限运行。一旦速度结束,root 权限也就结束了。

    sudo su - runjob-admin;
    ↑这里 root 权限开始。 ↑这里 root 权限结束。
    Yadomin
    Yadomin
    Jan 26, 2022 via Android
    2
    sudo -u user command
    iScout
    iScout
    Jan 26, 2022 via Android
    4
    sudo 只能管到第一个分号,后面的没有 sudo 权限
    bqbkbz
    bqbkbz
    Jan 26, 2022❤️1
    5
    ```
    sudo -i -u runjob-admin bash << EOF
    cd lisi/runjob/;
    touch xxxxxxxxxxxxx.py;
    EOF
    ```
    szxczyc
    szxczyc
    OP
    Jan 26, 2022
    6
    @zhaohui318 这个方法是好的,但是如果我想要跑一个 ansible-playbook 的任务并且拿到返回值这样是不是就不行了~
    Kinnice
    Kinnice
    Jan 27, 2022 via Android
    7
    登录 runjob-admin 账号,进行操作。
    abw
    abw
    Jan 27, 2022
    8
    试下 sshpass:sshpass -p <passwd> ssh <user>@<host> "echo <passwd> | sudo -S <command>"
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4860 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 06:54 · PVG 14:54 · LAX 22:54 · JFK 01:54
    ♥ Do have faith in what you're doing.