为什么读取设备需要管理员权限?

为什么读取设备需要管理员权限?

我正在尝试创建一个备份脚本,将我的拇指驱动器保存为图像。我打算让它自动。我总是看到拇指驱动器列为/dev/sdb,并创建了一个脚本将其保存为 gzipped tarball。

在尝试通过 复制它时dd,我注意到这个错误:

dd: failed to open ‘/dev/sdb’: Permission denied

我想知道这是否只是侥幸,所以我尝试通过管道传输cat命令dd并收到此错误:

cat: /dev/sdb: Permission denied
0+0 records in
0+0 records out
0 bytes (0 B) copied, 0.000620078 s, 0.0 kB/s

当然,因为我是超级用户,所以我可以sudo做到这一点——但这会删除脚本的自动元素。

如果我不修改该设备,为什么需要超级用户权限?此外,有没有办法绕过这个?

答案1

Unix/Linux 系统是多用户的。任何对原始存储设备具有读取权限的人都可以读取其上的所有文件,无论谁拥有这些文件及其权限(当然,以加密的文件系统为模)。因此,传统上,原始设备仅允许访问管理组(例如或root)的成员,并且您可以将受信任的管理用户或备份操作用户放入该组。operatordisk

在运行 udev 的 GNU/Linux 发行版上,将所有非软盘或磁带的50-udev-default.rules块和 SCSI 设备放入组中,并授予该组读/写权限,因此一种可能的解决方案是使用或 将自己添加到该组中直接编辑。注销并重新登录。/devdiskusermod/etc/group

答案2

为什么读取设备需要管理员权限?

首先这里有几个问题

  1. mount'ing 物理存储设备及其包含的分区。
  2. 访问和操作其上的文件。

如果文件系统是基于权限的,例如ext2、3、4,则权限是基于每个文件定义的。

就为什么要求用户具有特殊的管理权限来安装设备而言,有几个原因,这些原因更可能适用于企业类型情况,而不太可能适用于个人计算 - 尽管它仍然可能相关

  1. 它可以防止阅读滥用程序 一旦安装了磁盘,整个不受信任的程序集合现在就可能可供执行,这可能会滥用操作系统。如果您正在管理该系统,您可以更加确信,如果临时用户无法从自己的磁盘上传自己的程序,则不会发生这种情况。
  2. 写入/保存敏感秘密数据 如果您在系统上拥有公司机密或用户密码,并且有人可以连接未经授权的存储设备,他们就可以对其进行复制。

您可以通过以下方式解决 sudo 问题:以 sudo 身份运行整个脚本,然后使用sudo切换回脚本内的普通用户来执行您不想以 root 身份运行的命令(是的,您这样做)例如

文件:脚本文件

#!/bin/sh

# this dd command now works
dd if=<source> of=<target> bs=<byte size>

# normal cammand you want to run as "mathmaniac" user
sudo -u "MathManiac" bash -c "touch foo.bar" 

因此,您可以使用以下命令运行此脚本:

sudo ./script.sh

另一种快速而肮脏但通常不推荐的方法是简单地将 sudo 放在脚本内的命令前面,当解释器遇到它时,sudo它将停止脚本执行并在继续之前询问您的 sudo 密码。

答案3

您可以使用编辑 fstab 来挂载文件系统,而无需成为 root,但这不会为您提供块设备的映像。

您可以编辑 sudoers 文件,以便备份脚本可以 sudo 执行特定命令而无需输入密码。

相关内容