在 Debian 11 上,挂载外部磁盘会更改挂载点目录的权限。该磁盘被格式化为ext4
.
这是正常行为吗?
创建目录:
user@debian:/media$ mkdir external2
mkdir: cannot create directory ‘external2’: Permission denied
user@debian:/media$ sudo mkdir external2
检查所有权:
user@debian:/media$ ls -la
total 20
drwxr-xr-x 5 root root 4096 Aug 17 20:19 .
drwxr-xr-x 18 root root 4096 Jul 9 21:11 ..
drwxr-xr-x 2 root root 4096 May 4 2021 cdrom
drwxr-xr-x 2 root root 4096 Aug 12 2021 external
drwxr-xr-x 2 root root 4096 Aug 17 20:19 external2
将所有权更改为user
:
user@debian:/media$ chown -R user:user /media/external2
chown: changing ownership of '/media/external2': Operation not permitted
user@debian:/media$ sudo chown -R user:user /media/external2
并检查所有权:
user@debian:/media$ ls -la
total 20
drwxr-xr-x 5 root root 4096 Aug 17 20:19 .
drwxr-xr-x 18 root root 4096 Jul 9 21:11 ..
drwxr-xr-x 2 root root 4096 May 4 2021 cdrom
drwxr-xr-x 2 root root 4096 Aug 12 2021 external
drwxr-xr-x 2 user user 4096 Aug 17 20:19 external2
挂载硬盘:
user@debian:/media$ sudo mount /dev/sdb /media/external2
检查所有权:
user@debian:/media$ ls -la
total 20
drwxr-xr-x 5 root root 4096 Aug 17 20:19 .
drwxr-xr-x 18 root root 4096 Jul 9 21:11 ..
drwxr-xr-x 2 root root 4096 May 4 2021 cdrom
drwxr-xr-x 2 root root 4096 Aug 12 2021 external
drwxr-xr-x 2 root root 4096 Aug 12 2021 external2
编辑:为了透明起见,我留下这个问题,但我还有另一个可能相关的问题: 奇怪的 rsync 行为删除已传输的文件
答案1
是的,这是所有类 Unix 系统上所有挂载点上的正常且预期的行为。
当您挂载外部硬盘时,外部硬盘文件系统的根目录将放置在挂载点目录之上,并且挂载点目录“隐藏在”新文件系统下。
外部硬盘文件系统的根目录有自己的所有权和权限,一旦您安装了外部磁盘,您将看到这些权限 - 因为您不再看到用作安装点的目录,而是根目录您安装到其上的文件系统的名称。
当您卸载其他文件系统时,您将再次看到挂载点目录的原始权限,因为覆盖挂载点目录的文件系统的根目录已被卸载。
您可能期望所有权反映安装文件系统的用户的身份,但这是例外,而不是规则:只有在安装不支持 Unix 风格所有权和权限的文件系统时才会发生这种情况(例如文件系统) FAT 系列类型),并且安装点已预先安排,以允许普通用户在mount
没有sudo
.
挂载文件系统具有重大的安全隐患,因此通常只有 root(或具有无限sudo
访问权限的人)才能使用该mount
命令的完全不受限制的形式。但可以允许非root用户mount
无需使用sudo
仅在预先安排的安装点。为此,系统管理员必须首先编写一个包含安装选项或/etc/fstab
之一的条目。差异是:user
users
owner
users
:任何用户都可以挂载,任何用户都可以卸载user
:任何用户都可以挂载,但只有 root 或挂载文件系统的用户才能卸载它owner
:类似user
,但附加了用户必须拥有他们尝试安装的设备节点的要求(这将允许仅在配置为授予本地登录用户的系统中安装热插拔可移动驱动器)许多发行版(包括 Debian)不喜欢这样做,而是使用单独的可移动介质安装帮助程序(请参阅)udisks2
。man udisks
要使用这种预先安排的挂载点,非 root 用户必须使用mount
简短形式的命令,即仅指定要挂载的设备或挂载点目录,不是都。mount
然后将从 中查找其余详细信息/etc/fstab
,强制执行系统管理员指定的安装选项和其他参数。
如果您需要访问被安装在其上的另一个文件系统隐藏的文件或子目录,可以通过创建绑定挂载父文件系统的(使用mount --bind
,不是 mount --rbind
)并通过绑定挂载访问挂载点目录。
使用您的设置的示例。从卸载外部磁盘开始:
sudo touch /media/external2/This_will_be_hidden_by_external_disk
ls /media/external2 # now you see it
sudo mount /dev/sdb /media/external2
ls /media/external2 # now you don't!
sudo mount --bind / /mnt
ls /mnt/media/external2 # here you will see it again!
sudo umount /mnt # to clean up the bind mount
如果挂载点目录不为空,基于 的系统将在启动时systemd
挂载文件系统时发出警告。/etc/fstab
答案2
您正在使用 进行挂载sudo
,因此root
挂载目录的所有者是正常的。