![为什么读取设备需要管理员权限?](https://linux22.com/image/84663/%E4%B8%BA%E4%BB%80%E4%B9%88%E8%AF%BB%E5%8F%96%E8%AE%BE%E5%A4%87%E9%9C%80%E8%A6%81%E7%AE%A1%E7%90%86%E5%91%98%E6%9D%83%E9%99%90%EF%BC%9F.png)
我正在尝试创建一个备份脚本,将我的拇指驱动器保存为图像。我打算让它自动。我总是看到拇指驱动器列为/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
)的成员,并且您可以将受信任的管理用户或备份操作用户放入该组。operator
disk
在运行 udev 的 GNU/Linux 发行版上,将所有非软盘或磁带的50-udev-default.rules
块和 SCSI 设备放入组中,并授予该组读/写权限,因此一种可能的解决方案是使用或 将自己添加到该组中直接编辑。注销并重新登录。/dev
disk
usermod
/etc/group
答案2
为什么读取设备需要管理员权限?
首先这里有几个问题
mount
'ing 物理存储设备及其包含的分区。- 访问和操作其上的文件。
如果文件系统是基于权限的,例如ext2、3、4,则权限是基于每个文件定义的。
就为什么要求用户具有特殊的管理权限来安装设备而言,有几个原因,这些原因更可能适用于企业类型情况,而不太可能适用于个人计算 - 尽管它仍然可能相关
- 它可以防止阅读滥用程序 一旦安装了磁盘,整个不受信任的程序集合现在就可能可供执行,这可能会滥用操作系统。如果您正在管理该系统,您可以更加确信,如果临时用户无法从自己的磁盘上传自己的程序,则不会发生这种情况。
- 写入/保存敏感秘密数据 如果您在系统上拥有公司机密或用户密码,并且有人可以连接未经授权的存储设备,他们就可以对其进行复制。
您可以通过以下方式解决 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 执行特定命令而无需输入密码。