我正在尝试创建一个 Bash shell 脚本,该脚本允许将文件从闪存设备传输到用户指定的存档中。尽管我想限制该用户无法在此存档目录中创建任何子目录。
笔记:所以本质上,我希望用户创建/指定的存档目录是一个扁平的一级结构。
我不知道如何实现这一目标,并且非常感谢我能得到的任何帮助。
答案1
没有任何本地机制可以轻松实现它。 Linux的权限系统无法为创建文件和目录指定单独的权限,因为目录实际上就是文件。但尝试这样的方式:
- 使所有存档目录由一个(或几个不同的)用户拥有,专门为此目的而创建。让我们假设它的名称为 archiveuser。
使所有存档目录(我猜你有很多)都归该用户所有,例如:
$ chown archiveuser:archiveuser /somedir/archivedir1 $ chown archiveuser:archiveuser /somedir/archivedir2 $ chown archiveuser:archiveuser /somedir/archivedir3
限制对存档目录的访问仅由所有者访问:
$ chmod 700 /somedir/archivedir1 $ chmod 700 /somedir/archivedir2 $ chmod 700 /somedir/archivedir3
使用
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
教程:-)。就这样。用户必须使用:
$ sudo -u archiveuser cp /path/to/pendrive/somefile /somedir/archiveuser/
您可以创建一些别名以使其更方便使用(即alias cpt='sudo -u archiveuser cp'
)。另请注意,在这种情况cp -r
下不允许复制目录。命令sudo
也mkdir
被权限阻止。这样你的目标就达到了。