dd命令PERMISSION DENIED Python

时间:2013-07-12 15:20:41

标签: python root permission-denied dd

我使用命令行在Python中运行dd命令,但是,每当我尝试实际运行命令时,我得到:

dd:打开'/ dev / sdb':权限被拒绝

我知道我必须做某种根本的事情吗?而且我只需要我的代码的某一部分来运行dd命令,所以我不需要“根”整个事情;但整个“根”概念让我困惑......

非常感谢帮助!!

2 个答案:

答案 0 :(得分:1)

  

我知道我必须做某种根本的事情吗?

确实你这样做了!

如果您使用的是Linux,sudo是升级用户权限的惯用方法。

所以改为调用'sudo dd if=/dev/sdb of=/dev/null'(例如)。如果您的脚本必须是非交互式的,请考虑在admin ALL = NOPASSWD: ALL或类似内容中添加sudoers之类的内容。

答案 1 :(得分:1)

您可以通过更改磁盘的访问权限来在操作系统级别解决此问题。这可能优于每次运行脚本时使用sudo,因为您不必使用密码或担心脚本会变得疯狂并消除系统。

很抱歉,如果我在这里有点基础,但linux使用文件权限来决定用户如何访问文件系统中的文件。在我的机器上:

$ ls -l /dev/sda2
brw-rw---- 1 root disk 8, 2 Jun 27 15:04 /dev/sda2

设备由“root”(超级用户)拥有,位于“磁盘”组中。 root和磁盘组中的任何人都可以访问该设备。但是“其他人”(其他人)都被封锁了。

$ dd if=/dev/sda2 of=/dev/null bs=1
dd: opening `/dev/sda2': Permission denied

我不是root用户,而且我不在磁盘组中,所以dd失败了。我可以将自己添加到“磁盘”组中,但这会授予很多权利,并冒着邪恶将要发生的风险。

到目前为止我们看到的是标准的* nix权限,但大多数现代linux文件系统都支持扩展权限。我可以给自己阅读设备的权利

$ sudo setfacl -m u:td:r /dev/sda2
[sudo] password for td: 

现在,如果我列出设备,我会在权限字符串上看到加号,这意味着我还可以查看扩展的acls

$ ls -l /dev/sda2
brw-rw----+ 1 root disk 8, 2 Jun 27 15:04 /dev/sda2

$ getfacl /dev/sda2
getfacl: Removing leading '/' from absolute path names
# file: dev/sda2
# owner: root
# group: disk
user::rw-
user:td:r--
group::rw-
mask::rw-
other::---

并且dd工作!

$ dd if=/dev/sda2 of=/dev/null bs=1
1024+0 records in
1024+0 records out
1024 bytes (1.0 kB) copied, 0.0146606 s, 69.8 kB/s

请注意,这比sudo(脚本可以执行所有操作)更安全(脚本可以读取/ dev / sda2)。我可以让其他我不信任的人使用这个脚本,给予他们对块设备的权利而不给他们王国的钥匙。