如何禁用本地文件写入?

如何禁用本地文件写入?

我维护一台共享的公共计算机。每个用户都有自己的目录/home。我们不喜欢进行/home网络挂载,因为新用户登录需要很长时间,但我们希望将其设置为用户无法写入其/home目录。我们为用户提供了可用的网络存储,他们应该使用它们,但我们无法强迫他们使用它。

理想情况下,我想完全阻止他们将数据写入本地计算机,而是引导他们写入存储服务器。如果这是不可能的,我至少想限制他们在本地计算机上的磁盘配额,这样他们就不会消耗所有空间。我该如何去做呢?

答案1

您可以通过将文件系统映像文件挂载到/home.这不会禁用/home,但它会解决您的问题,因为它会阻止人们写入超过固定数量。

文件系统映像文件的工作方式如下:

  1. 创建一个固定大小的空文件,例如 100 MB:

    dd if=/dev/zero of=/var/home/bob.img bs=1024 count=100000
    

    您不必使用/var/home这些;这是一个否则不存在的目录。 这些文件应属于 root 并设置模式 600以便其他人无法阅读它们。显然,请确保您有足够的空间为每个用户创建 100 MB 的文件,但请记住,您将能够/home同时消除所有内容并释放该空间。

  2. 在镜像中创建文件系统:

    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

当系统关闭时,它们应该被自动卸载。数据与其他地方一样安全。

相关内容