mcE*_*nge 8 permissions partitioning fstab mount
我知道这听起来像是一个重复的问题,但我尝试了以下方法并没有帮助:
我的驱动器安装在
/media/data
Run Code Online (Sandbox Code Playgroud)
所以我进入了
sudo chown -R :users /media/data
Run Code Online (Sandbox Code Playgroud)
但是,我仍然无法以用户身份写入该分区。我还尝试在 /etc/fstab 中创建一个条目
UUID=... /media/data ext4 rw,suid,dev,exec,auto,user,async 0 0
Run Code Online (Sandbox Code Playgroud)
但在那之后,我的电脑无法启动,因为他找不到磁盘。
我安装了 Ubuntu 14.04 服务器。该分区列在下面/dev/nvmeOn1p1
但没有出现在/etc/fstab(见下图)中。
(该设备为“Intel DC P3700”800GB SSD)
附加说明:由于分区是空的,我也可以格式化它并使用 gparted 重新创建它。gparted 或其他 gui 程序中是否有办法指定该分区应可供所有用户使用?
也许你做事的顺序不对。当您使用 来创建文件系统时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
Run Code Online (Sandbox Code Playgroud)
正确的做法是创建文件系统,挂载它,然后更改其权限和所有权。您在 /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
Run Code Online (Sandbox Code Playgroud)
这应该回答你的问题。如果您需要更多详细信息,请继续阅读。
为了更好地理解发生了什么,让我们用一个图像文件做一些实验
创建一个空文件以使用fallocate -l 100MB /tmp/filesystem.img. 然后将其格式化为 ext4 文件系统sudo mkfs.ext4 /tmp/filesystem.img(它不是块设备,但如果您回答是,则无论如何都可以在其上放置一个工作的 ext4 文件系统)并创建一个目录以用作挂载点mkdir /tmp/experiment。
现在尝试更改所有者和权限上directoysudo 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 ..
Run Code Online (Sandbox Code Playgroud)
这告诉您 /tmp/experiment 归用户 gerlos 和组用户所有,组成员可以对其进行读取、写入和执行。您可以将文件放入其中,例如使用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
Run Code Online (Sandbox Code Playgroud)
如您所见,现在 /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
Run Code Online (Sandbox Code Playgroud)
如您所见,现在用户组的成员可以将文件放在文件系统上!事实上,没有什么能阻止你的普通用户在那里创建一个新文件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
Run Code Online (Sandbox Code Playgroud)
任务完成!:-)
我终于解决了这个问题。我发现我的 UUID 有错字。所以我的最终条目fstab是:
UUID=... /media/data ext4 defaults 0 0\nRun Code Online (Sandbox Code Playgroud)\n\n甚至更好:
\n\n/dev/sdb1 /media/data ext4 defaults 0 0\nRun Code Online (Sandbox Code Playgroud)\n\n我在重新启动之前检查了它,只需调用:
\n\nsudo umount /media/data\nsudo mount -a\nRun Code Online (Sandbox Code Playgroud)\n\n如果 fstab 条目正确,一切都会正常安装,并且计算机的每个用户都可以访问该分区(至少可以访问他自己创建的文件夹,这是正确的行为)。
\n\n一只猫会做
\n\nsudo chown -R UserNameOfSudo:users /media/data \nsudo chmod -R g+rw /media/data \nRun Code Online (Sandbox Code Playgroud)\n\n同时分区仍处于安装状态,以确保每个人都可以访问该分区。
\n\n如果执行 \xc2\xb4chown\xc2\xb4 确保特定用户是“users”组的一部分,请输入:
\n\nsudo adduser yourSpecificUsername users\nRun Code Online (Sandbox Code Playgroud)\n\n然后注销并重新登录!
\n\n编辑
\n挂载后的分区默认为root所有。这似乎阻止任何人写入该分区。如上所示安装后将所有者更改为“UserNameOfSudo”会产生所需的行为。
Edit2
\n在本地用户和 LDAP 用户之间共享计算机的情况下,解决方案是向每个人授予所有权限:
sudo chmod 777 /media/data\nRun Code Online (Sandbox Code Playgroud)\n\n然后设置“粘滞位”,这意味着只有创建文件夹/文件的用户才允许删除它。这增加了一些合理的安全性:
\n\nsudo chmod o+t /media/data/\nRun Code Online (Sandbox Code Playgroud)\n