是否有可能防止在系统正常运行期间 root 用户意外安装和/或重新格式化磁盘或分区?
例如,不久前我就遇到了这样的情况:
- 在正常操作下,我已
/dev/sda1
安装为/
并/dev/sdb1
安装为/var/disk2
。 - 有一天,
/dev/sdc
在尝试修复另一台计算机时,我使用不同的 LiveCD 映像重写了拇指驱动器 () 三到四次。 - 有一次,我错误地卸载了文件系统
/dev/sdb1
并用新的文件系统/dev/sdc1
覆盖了它。sdb1
通常,您必须以 root 身份才能在任何存储设备上执行具有低级文件系统访问权限的操作。
我希望能够将自己锁定在/dev/sda
运行/dev/sdb
实时操作系统的任何时候/dev/sda1
(而不是从 LiveCD 启动,我永远不想对其施加任何限制。)
回复 loevborg 的更新(感谢):我认为我真正需要的是作为非 root 用户完全不受限制地访问/dev/sdc
(或插入 USB 块设备时可能显示的任何其他设备)。如果我在某处设置权限或将自己添加到正确的组,是否可以作为非 root 用户执行这些操作(擦除、创建文件系统、挂载)?
答案1
这是不可能的。根据定义,“root”是被允许做任何事情的用户。想想看。如果有些事情 root 不允许做,那么它就不是权限层次结构的根。
您可能可以引入手动检查,但这可能并不比确保在使用“sudo”时不会做任何愚蠢的事情更安全。
答案2
您无需以 root 身份执行所有操作,而是可以利用文件权限。这些/dev/sd*
文件可视为可分配文件权限的常规文件。
- 您以 的身份登录
ubuntu
,是该组的成员ubuntu
- 你需要能够写信给
/dev/sdc1
- 您需要能够读取
/dev/sdb1
,但不能写入 - 默认情况下,文件的权限
/dev/sd*
设置为660
(rw-rw----
),所有者为root
组root
解决方案:授予该组ubuntu
写入权限/dev/sdc1
和读取权限/dev/sdb1
:
sudo chmod 640 /dev/sdb1
sudo chgrp ubuntu /dev/sdc1 /dev/sdb1
从现在起,您可以以非 root 用户身份安全地用映像覆盖磁盘 ( ubuntu
),系统会阻止您意外写入错误的磁盘。将磁盘重新插入系统时,请不要忘记再次更改权限/组。
我发现这种行为在从磁盘恢复数据(只读操作)时很有用,而不必担心命令会写入它。
附加信息:/dev/sdc
是磁盘。/dev/sdc1
、/dev/sdc2
、 ... 是该磁盘上的分区。权限不会被继承,因此即使您可以/dev/sdc
直接读取,也并不意味着您可以读取/dev/sdc1
。如果您的磁盘已贴标签,您可以通过验证/dev/sdc1
是否真的通过显示标签设备列表来检查您的 USB 磁盘:
ls -lA /dev/disk/by-label