如何让用户创建目录但不创建子目录

如何让用户创建目录但不创建子目录

我正在尝试创建一个 Bash shell 脚本,该脚本允许将文件从闪存设备传输到用户指定的存档中。尽管我想限制该用户无法在此存档目录中创建任何子目录。

笔记:所以本质上,我希望用户创建/指定的存档目录是一个扁平的一级结构。

我不知道如何实现这一目标,并且非常感谢我能得到的任何帮助。

答案1

没有任何本地机制可以轻松实现它。 Linux的权限系统无法为创建文件和目录指定单独的权限,因为目录实际上就是文件。但尝试这样的方式:

  1. 使所有存档目录由一个(或几个不同的)用户拥有,专门为此目的而创建。让我们假设它的名称为 archiveuser。
  2. 使所有存档目录(我猜你有很多)都归该用户所有,例如:

    $ chown archiveuser:archiveuser /somedir/archivedir1
    $ chown archiveuser:archiveuser /somedir/archivedir2
    $ chown archiveuser:archiveuser /somedir/archivedir3
    
  3. 限制对存档目录的访问仅由所有者访问:

    $ chmod 700 /somedir/archivedir1
    $ chmod 700 /somedir/archivedir2
    $ chmod 700 /somedir/archivedir3
    
  4. 使用sudo机制授予cp对存档目录的命令访问权限:

    添加/etc/sudoers

    someuser1 ALL=(archiveuser) NOPASSWD:/bin/cp /path/to/pendrive/* /somedir/archiveuser/*
    someuser2 ALL=(archiveuser) NOPASSWD:/bin/cp /path/to/pendrive/* /somedir/archiveuser/*
    

    当然,为所有应该允许使用此命令的用户创建适当的组是很方便的。阅读sudo教程:-)。

  5. 就这样。用户必须使用:

    $ sudo -u archiveuser cp /path/to/pendrive/somefile /somedir/archiveuser/ 
    

您可以创建一些别名以使其更方便使用(即alias cpt='sudo -u archiveuser cp')。另请注意,在这种情况cp -r下不允许复制目录。命令sudomkdir被权限阻止。这样你的目标就达到了。

相关内容