我维护一台共享的公共计算机。每个用户都有自己的目录/home
。我们不喜欢进行/home
网络挂载,因为新用户登录需要很长时间,但我们希望将其设置为用户无法写入其/home
目录。我们为用户提供了可用的网络存储,他们应该使用它们,但我们无法强迫他们使用它。
理想情况下,我想完全阻止他们将数据写入本地计算机,而是引导他们写入存储服务器。如果这是不可能的,我至少想限制他们在本地计算机上的磁盘配额,这样他们就不会消耗所有空间。我该如何去做呢?
答案1
您可以通过将文件系统映像文件挂载到/home
.这不会禁用/home
,但它会解决您的问题,因为它会阻止人们写入超过固定数量。
文件系统映像文件的工作方式如下:
创建一个固定大小的空文件,例如 100 MB:
dd if=/dev/zero of=/var/home/bob.img bs=1024 count=100000
您不必使用
/var/home
这些;这是一个否则不存在的目录。 这些文件应属于 root 并设置模式 600以便其他人无法阅读它们。显然,请确保您有足够的空间为每个用户创建 100 MB 的文件,但请记住,您将能够/home
同时消除所有内容并释放该空间。在镜像中创建文件系统:
mke2fs -m 0 /var/home/bob.img
这将警告您
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
最后一个会询问您是否要覆盖.
和..
。 不。 它只是为了移动顶层中的“隐藏”点文件,第一个文件mv
将被留下。您还可以使用文件浏览器或其他方法来执行移动。 /home/bob
现在应该是空的,您可以将安装的图像移动到那里:
umount /mnt/tmp
mount /var/home/bob.img /home/bob
瞧,一切似乎回到原来的样子 - 只是/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
当系统关闭时,它们应该被自动卸载。数据与其他地方一样安全。