我可以使用权限或 facls 来限制目录中文件的创建而不限制目录的创建吗?

我可以使用权限或 facls 来限制目录中文件的创建而不限制目录的创建吗?

我有一些具有相当宽松的权限的目录,这些目录中挤满了许多不同用户创建的文件(脚本)。我尝试鼓励人们创建自己的子目录并在其中添加文件,但有些人不这样做,导致根脚本目录充满了其他人不感兴趣的东西。

由于我在说服人们在根目录中创建文件方面只取得了有限的成功,但我们仍然需要所有用户都能够访问任何脚本,我希望我们能够强制执行编写脚本的策略使用权限或访问控制列表进入子目录。

那么,是否可以允许用户仅在根脚本​​文件夹中创建目录,但仅允许他们在这些子目录中创建脚本?

答案1

这不是一个很好的解决方案,但是:

  • 使该目录只能由您、某个指定用户或伪用户、或者更好的是一个组(您的用户不是其成员)写入,
  • 仔细为 编写一个包装器mkdir,并安装它 setuid 或 setgid。


  • 如果您选择 group / setgid 选项,它可能很简单
    mkdir("root_scripts/<用户的文件夹名称>”,0755);

    而且,如果您不关心让创建该文件夹的用户拥有该文件夹,那么如果程序是 setuid,那么您只需要做这些。否则,
  • 如果您使程序 setuid root,请非常非常小心地进行一百万次检查是否有不当使用,然后
    mkdir("root_scripts/<用户的文件夹名称>”,0755);
    chown(“root_scripts/<用户的文件夹名称>“,<用户的uid>,<用户的 gid>);
  • 如果您将程序 setuid 设置为非 root 用户,请在您的root_scripts目录中(或目录下的某处)创建一个全局可写的子目录,然后执行类似的操作
    euid = geteuid();
    ruid = getruid();
    seteuid(ruid); // 运行程序的人
    mkdir("root_scripts/.writable_subdir/<用户的文件夹名称>”,0755);
    seteuid(euid); // 程序的所有者和顶级目录
    重命名(“root_scripts/.writable_subdir/<用户的文件夹名称>,“根脚本/<用户的文件夹名称>”);

相关内容