如何为所有用户创建 ext4 分区?

如何为所有用户创建 ext4 分区?

我知道这听起来像是重复的问题,但我尝试了以下方法,但没有帮助:

我的驱动器安装在

/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 中的所有分区。

相关内容