sci*_*ife 1 permissions home readonly
我维护一个共享的公共计算机。每个用户在/home
. 我们不喜欢进行/home
网络挂载,因为新用户登录需要很长时间,但我们希望设置它以便用户无法写入他们的/home
目录。我们为用户提供了他们应该使用的网络存储,但我们无法强迫他们使用它。
理想情况下,我想完全阻止它们将数据写入本地机器,而是引导它们写入存储服务器。如果这是不可能的,我至少想限制他们在本地机器上的磁盘配额,这样他们就不能消耗所有空间。我该怎么做呢?
您可以通过在/home
. 这不会禁用/home
,但它会解决您的问题,因为它会阻止人们写入超过固定数量的内容。
文件系统映像文件的工作方式如下:
创建一个固定大小的空文件,例如 100 MB:
dd if=/dev/zero of=/var/home/bob.img bs=1024 count=100000
Run Code Online (Sandbox Code Playgroud)
您不必使用/var/home
这些;这是一个目录,否则将不存在。 这些文件应该由 root 拥有并设置模式 600,以便其他人无法读取它们。显然,确保您有空间为每个用户创建一个 100 MB 的文件,但请记住,您将能够同时删除所有内容/home
并释放该空间。
在镜像中创建文件系统:
mke2fs -m 0 /var/home/bob.img
Run Code Online (Sandbox Code Playgroud)
这将警告您bob.img is not a block special device
- 无论如何都要继续。
第一次这样做,想必你想复制到用户现有的家中,所以你必须临时挂载它:
mount /var/home/bob.img /mnt/tmp
mv /home/bob/* /mnt/tmp
mv /home/bob/.* /mnt/tmp
Run Code Online (Sandbox Code Playgroud)最后一个会询问您是否要覆盖.
和..
。 别。 它只是为了移动顶层中的“隐藏”点文件,第一个mv
将留下。您也可以使用文件浏览器或其他一些方法来进行移动。 /home/bob
现在应该是空的,您可以将安装的图像移动到那里:
umount /mnt/tmp
mount /var/home/bob.img /home/bob
Run Code Online (Sandbox Code Playgroud)
瞧,一切似乎都回到了原来的样子——除了/home/bob
现在是一个独立的文件系统,用户bob
将无法在那里放置超过 100 MB。此外,因为它是一个现有的图像文件,所以这个空间将保留给 bob,不会被其他任何东西占用。
你需要一个 init 服务来在启动时挂载所有这些;它可以很简单:
#!/bin/bash
for img in /var/home/*.img; do
name=$(basename $img .img)
mount $img "/home/$name"
done
Run Code Online (Sandbox Code Playgroud)
当系统关闭时,它们应该被自动卸载。数据与在其他任何地方一样安全。