sudo python找不到命令_Python Linux 命令行 sudo

当使用Python的subprocess或os.system()调用需要root权限的Shell命令时,通常会遇到输入密码的问题。本文介绍了三种解决方法:1) 利用Linux的s权限设置文件以root身份执行;2) 使用sh模块的sudo功能,通过提供密码避免交互输入;3) 修改sudoers文件,指定用户执行特定命令无需密码。通过这些方法,可以更方便地在Python中执行需要特权权限的命令。
摘要由CSDN通过智能技术生成

经常会有python调用shell命令的需求。subprocess, os.system() 等等都是常用的方式。

但是遇到需要调用的命令需要root权限的时候,就比较麻烦了。

就是会让输入密码。

现在知道有三种解决方法:

1. Linux 特殊权限 s

2. 模块 sh

3. 修改sudoers 文件

1. Linux 特殊权限 s

文件权限除了r、w、x外还有s、t、i、a权限:

s:文件属主和组设置SUID和GUID,文件在被设置了s权限后将以root身份执行。

在设置s权限时文件属主、属组必须先设置相应的x权限,否则s权限并不能正真生效(c h m o d命令不进行必要的完整性检查,即使不设置x权限就设置s权限,chmod也不会报错,当我们ls -l时看到rwS,大写S说明s权限未生效)。

比如 fdisk -l 命令:

bwhite@os:~$

bwhite@os:~$ fdisk -l

fdisk: cannot open /dev/ram0: Permission denied

fdisk: cannot open /dev/sda: Permission denied

bwhite@os:~$ which fdisk

/sbin/fdisk

bwhite@os:~$ sudo cp /sbin/fdisk /bin/my_fdisk

[sudo] password for bwhite:

bwhite@os:~$ sudo chmod u+s /bin/my_*

bwhite@os:~$ ll /bin/my_*

-rwsr-xr-x 1 root root 109632 1月 9 19:41 /bin/my_fdisk*

bwhite@os:~$ /bin/my_fdisk -l

Disk /dev/ram1: 64 MiB, 67108864 bytes, 131072 sectors

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 4096 bytes

I/O size (minimum/optimal): 4096 bytes / 4096 bytes

Device Boot Start End Sectors Size Id Type

/dev/sda1 * 2048 79691775 79689728 38G 83 Linux

/dev/sda2 79693822 83884031 4190210 2G 5 Extended

/dev/sda5 79693824 83884031 4190208 2G 82 Linux swap / Solaris

bwhite@os:~$

2. 模块 sh

# -*- coding=utf-8 -*-

import sh

import os

def main():

PASSWORD = "tiger"

devide = "/dev/sdb4"

os.system("sync;sync;sync;sync")

my_sudo = sh.sudo.bake("-S", _in=PASSWORD)

try:

my_sudo.umount(device)

except:

pass

if __name__ == '__main__':

main()

3. 修改 sudoers 文件

修改 sudoers 文件,指定某个用户或组在执行指定的命令是不用输入密码

sudo visudo

# 添加下面这一行

bwhite ALL=(ALL) NOPASSWD: /bin/mv,/bin/kill # 表示 bwhite 执行指定的 sudo 命令不需要密码

# bwhite 和 ALL 中间 tab 隔开

bwhite ALL=(ALL) NOPASSWD: ALL # 表示 bwhite 执行所有 sudo 命令不需要密码

# 如果修改 sudoers 文件时,改错了东西,比如语法错误

# 可以用这个命令来修改 sudoers 文件

pkexec visudo

参考链接:

sh 下载:           https://pypi.doubanio.com/simple/sh/

http://amoffat.github.io/sh/sections/sudo.html#contrib-sudo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值