Linux下无法修改属主为33:33的文件/目录权限及所有权问题咨询
您好,我来帮您捋捋这个问题的核心原因,还有为什么您后来的挂载方法能解决问题~
为什么之前的chown命令会失败?
您遇到的权限拒绝问题,很大概率和文件系统类型以及挂载参数有关,具体拆解来看:
非POSIX文件系统的限制:如果备份目录所在磁盘是NTFS、FAT32这类非Linux原生的文件系统,它们本身不支持存储Linux的属主(UID)、属组(GID)和权限位信息。当您直接挂载这类磁盘时,系统会默认给所有文件分配一个固定的UID/GID(也就是你看到的33:33),但此时
chown、chmod这类命令根本无法真正修改文件的权限属性——因为文件系统本身没有存储这些数据的地方,哪怕用sudo执行也会返回权限拒绝。
这里补充一下:如果是ext4这类Linux原生文件系统,哪怕当前OpenSUSE系统里UID=33对应的不是www-data,sudo chown也能正常修改属主,所以结合你后来的解决方法,基本可以确定是这类非POSIX文件系统导致的。挂载选项的限制:如果挂载时没有配置权限映射参数,系统会锁定文件的属主/权限,阻止修改操作。比如有些默认挂载选项会强制使用文件系统的默认权限,不允许手动修改属主。
强制访问控制的限制:虽然概率比较低,但OpenSUSE默认启用的AppArmor可能会阻止
sudo chown这类操作。不过这种情况通常会在系统日志里有明确的拒绝提示,你可以通过查看/var/log/messages或者journalctl来确认。
为什么挂载时指定UID/GID能解决问题?
你后来通过挂载时指定自己的UID/GID解决了问题,本质上是让Linux在挂载层面做了权限映射:
对于非POSIX文件系统,挂载时添加uid=你的用户ID,gid=你的组ID参数后,系统会把这个磁盘上的所有文件都统一映射为属于你指定的用户和组,这样你就拥有了完整的读写权限——毕竟这种文件系统本身不存属主信息,全靠系统挂载时的规则来决定权限。
举个实际的挂载命令例子:
sudo mount /dev/sdXn /mnt/backup -o uid=1000,gid=1000
这里的1000一般是普通用户的UID/GID,挂载后整个目录下的文件都会显示为你自己的用户所有,自然就能正常读写和操作了。
备注:内容来源于stack exchange,提问作者Andyc

