如何在Linux中运行命令限制某个目录中的文件访问?

时间:2015-07-25 04:47:14

标签: linux bash

我想要做的是处理一些涉及可能意外执行破坏性操作的脚本或程序的批处理作业(比如在" /" dir上执行递归删除)。脚本和程序是由业余爱好者编写的,他们很可能做蠢事。

为了防止我的操作系统被破坏,我想限制每个作业的某个目录的文件访问权限。我不希望作业脚本或可执行文件能够写入或删除指定目录之外的任何内容(包括为其他作业分配的目录,我不希望任何作业干扰他人的结果)。

目前,我想到了两个计划:

一种是在执行作业时使用chroot。但是当使用chroot时,我将无法访问bash实用程序或其他已安装的程序,如ffmpeg。这对我的脚本作业来说是不可接受的。

另一种是为每个作业创建一个用户,并以某个用户身份运行作业。但通过这种方式,我将不得不创造数以千计的用户;清理将是一件非常令人头疼的问题。

我非常喜欢第二个想法,但我正在寻找一种避免创建这么多用户并且之后不得不删除这些用户的方法。

2 个答案:

答案 0 :(得分:0)

将您需要的所有工具放在一个目录中然后然后chroot到它?

第二种选择也很好。您不必创建许多用户。只有一两个脚本,所有脚本都可以像它们一样运行。

第三,可能最好的是产生一个VM,然后ssh到它并运行脚本。如果虚拟机被破坏,你可以随时启动另一个虚拟机。

答案 1 :(得分:0)

  1. 您的用户如何访问您的计算机?
  2. 他们必须是root吗?因为否则他们无法以递归方式删除/...
  3. 无论如何,如果是通过ssh,你可以配置一个单独的只写chr​​ooted环境,如:

    <强>的sshd_config

    AllowGroups trusted users
    # all users gets chrooted to a directory
    ChrootDirectory /srv/jail
    # users from a certain Unix group (let's call it "trusted") get chrooted to /
    Match Group trusted
        ChrootDirectory /
    

    <强> fstab中

    # mount-bind non sensitive directories (ie.: `/tmp`, `/home`) in read-write
    /srv/jail/home            /home            home  bind             0  0
    /srv/jail/var/spool/mail  /var/spool/mail  mail  bind             0  0
    
    # you mount-bind sensitive directories in read-only
    /usr                      /srv/jail/usr    usr   bind             0  0
    /usr                      /srv/jail/usr    usr   bind,remount,ro  0  0
    # etc.
    

    我个人建议反对Docker ......