我知道这听起来像是重复的问题,但我尝试了以下方法,但没有帮助:
我的驱动器安装在
/media/data
所以我进入了
sudo chown -R :users /media/data
但是我仍然无法以用户身份写入该分区。我还尝试在 /etc/fstab 中创建一个条目
UUID=... /media/data ext4 rw,suid,dev,exec,auto,user,async 0 0
但此后我的计算机无法再启动,因为他找不到磁盘。
我安装了 Ubuntu 14.04 Server。分区列在下面/dev/nvmeOn1p1
,但没有出现在/etc/fstab
(见下图)。
(该设备是“Intel DC P3700”800GB SSD)
附加说明:由于分区是空的,我也可以格式化它,然后使用 gparted 等重新创建它。gparted 或其他 GUI 程序中是否有方法指定该分区应可供所有用户使用?
答案1
也许你操作的顺序不对。当你使用 创建文件系统时mkfs.ext4
,其中的所有内容都归 root 用户和 root 组所有,并且设置了系统默认权限。
当您将该文件系统挂载到目录上时,您会看到文件系统权限和所有者,而不管该目录的原始所有者和权限如何。
因此,这样做是行不通的:
sudo mkfs.ext4 /dev/some/data
sudo mkdir /media/data
sudo chown -R :users /media/data
sudo chmod -R g+rw /media/data
sudo mount /dev/some/data /media/data
正确的做法是创建文件系统,挂载它,然后然后更改其权限和所有权。您在 /etc/fstab 中执行的操作并不重要。
正确的做法是这样的:
sudo mkfs.ext4 /dev/some/data
sudo mkdir /media/data
sudo mount /dev/some/data /media/data
sudo chown -R :users /media/data
sudo chmod -R g+rw /media/data
这应该可以回答你的问题了。如果你需要更多详细信息,请继续阅读。
为了更好地理解发生了什么,让我们用一个图像文件进行一些实验
创建一个空文件,使用 进行格式化和挂载fallocate -l 100MB /tmp/filesystem.img
。然后使用 将其格式化为 ext4 文件系统sudo mkfs.ext4 /tmp/filesystem.img
(它不是块设备,但如果您回答是,则可以将可用的 ext4 文件系统放在其上)并创建一个目录以用作挂载点mkdir /tmp/experiment
。
sudo chown -R :users /tmp/experiment
现在尝试使用和更改该目录的所有者和权限sudo chmod -R g+rw /tmp/experiment
,并使用 检查权限ls -la /tmp/experiment
。您将得到如下结果:
ls -la /tmp/experiment/
total 0
drwxrwx--x 2 gerlos users 40 feb 19 10:37 .
drwxrwxrwt 8 root root 180 feb 19 10:38 ..
这告诉您 /tmp/experiment 归用户 gerlos 和组 users 所有,并且组成员可以对其进行读取、写入和执行。您可以将文件放入其中,例如使用touch /tmp/experiment/somefile
。
现在使用 将文件系统挂载到该目录sudo mount /mnt/filesystem.img /tmp/experiment
,然后再次查看ls
输出:
$ ls -la /tmp/experiment/
total 13
drwxr-xr-x 3 root root 1024 feb 19 10:41 .
drwxrwxrwt 8 root root 180 feb 19 10:41 ..
drwx------ 2 root root 12288 feb 19 10:41 lost+found
如您所见,现在 /tmp/experiment 似乎由 root 拥有,但具有不同的权限!为什么?因为我们不是在查看 /tmp/experiment 本身,而是在查看 /mnt/filesystem.img 中包含的文件系统的根目录,该文件系统安装在 /mnt/experiment 上。
此外,您的普通用户将无法使用 将文件放在那里touch /tmp/experiment/anotherfile
。
如果您现在再次尝试运行chown
并按chmod
上述方法操作,您将更改挂载点上的所有者和权限,但是在已挂载的文件系统上,您的用户将能够使用该文件系统。为了确认这一点,请最后一次查看 ls 输出:
$ ls -la /tmp/experiment/
total 13
drwxrwxr-x 3 root users 1024 feb 19 10:41 .
drwxrwxrwt 8 root root 180 feb 19 10:45 ..
drwxrw---- 2 root users 12288 feb 19 10:41 lost+found
如您所见,现在 users 组的成员可以将文件放到文件系统上!实际上,没有什么可以阻止您的普通用户使用以下命令在那里创建新文件touch /tmp/experiment/myfile
:
$ ls -la /tmp/experiment/
total 13
drwxrwxr-x 3 root users 1024 feb 19 11:05 .
drwxrwxrwt 8 root root 180 feb 19 11:02 ..
drwxrw---- 2 root users 12288 feb 19 10:41 lost+found
-rw-rw---- 1 gerlos gerlos 0 feb 19 11:02 myfile
任务完成! :-)
答案2
我终于解决了这个问题。我发现我的 UUID 打错了。所以我最后输入的fstab
是:
UUID=... /media/data ext4 defaults 0 0
甚至更好:
/dev/sdb1 /media/data ext4 defaults 0 0
我在重启之前通过简单调用以下命令进行了检查:
sudo umount /media/data
sudo mount -a
如果 fstab 条目正确,一切都会正常挂载,并且计算机的每个用户都可以访问该分区(至少可以访问他自己创建的文件夹,这是正确的行为)。
一只猫
sudo chown -R UserNameOfSudo:users /media/data
sudo chmod -R g+rw /media/data
当分区仍然处于安装状态时,以确保每个人都可以访问该分区。
如果执行“chown”,请通过输入以下内容确保特定用户是“用户”组的一部分:
sudo adduser yourSpecificUsername users
然后注销并重新登录!
编辑
默认情况下,挂载后的分区归 root 所有。这似乎阻止任何人写入分区。挂载后将所有者更改为“UserNameOfSudo”(如上所示)可实现所需的行为。
編輯2
在本地用户和 LDAP 用户共享计算机的情况下,解决方案是将所有权限赋予每个人:
sudo chmod 777 /media/data
然后设置“粘性位”,这意味着只有创建文件夹/文件的用户才可以删除它。这增加了一些合理的安全性:
sudo chmod o+t /media/data/
答案3
一种为所有人(包括新创建的文件)提供默认权限的解决方案是使用默认访问控制列表。
详细描述如下这个 unix.stackexchange.com 答案——简短部分:
mkfs.ext4 /dev/<device> tune2fs -o acl /dev/<device> mount /dev/<device> /mnt/<mountpoint> chown <username>:<groupname> /mnt/<mountpoint> # Optional; try to use the name of the user who is most commonly using this filesystem chmod 777 /mnt/<mountpoint> setfacl -m d:u::rwx,d:g::rwx,d:o::rwx /mnt/<mountpoint> umount /mnt/<mountpoint>
如果您复制文件时已设置其属性,则可能会出现问题;权限可能会保留,其他用户可能无法编辑或覆盖文件(但通常仍可读取)。但由于上层目录是全球可写的,因此任何用户都可以重命名或删除文件(因此(通过复制)还可以创建自己拥有的新文件并设置权限777
)。请参阅上面提到的 stackchange 答案。
答案4
这是手册——“如何创建 EXT4 分区” https://superuser.com/questions/643765/creating-ext4-partition-from-console
之后您可以将其添加到 FSTAB。在文件 /etc/fstab 末尾添加以下文本:
/dev/nvme0n1p1 /media/data ext4 defaults 0 2
哪里/dev/nvme0n1p1
- 您的物理设备,/media/data
- 您的挂载点。
之后使用命令mount -a
挂载 FSTAB 中的所有分区。