- 我有一个用户“canread”,它具有只读权限,并且是目录 /www/thedir/ 中文件和子目录的所有者
- “Canread” 永远不应具有写入权限,哪怕是一毫秒也不行(出于安全原因)
- 我有另一个用户“canwrite”,我想使用它通过 SFTP 将文件上传和下载到目录 /www/thedir/。因此它需要对目录 /www/thedir/ 具有读写权限
- 我想确保通过“canwrite”上传的任何文件的所有者始终是“canread”(甚至一秒钟也不会得到错误的所有者)
- 出于安全原因,我不想将“canwrite”与“canread”归为同一组
- 我不想在上传或下载文件后使用脚本或手动流程来更改所有权。
- 出于安全原因,我也不想将权限更改为另一级别的目录和文件(没有临时的 777 或类似权限)
我如何以安全的方式实现这一点?
答案1
您的要求很难满足。顺便说一句,sshd 的工作方式如下 - 它以 root 身份运行,在身份验证期间,它会在 sshd 用户下生成一个进程,然后在登录的用户下生成进程。sftp-server
不能将文件所有者设置为已登录用户以外的用户。
在我看来,由于您不想使用共享组,因此您只有一个选择。
- 解决方法 - 即总是
sftp-server
通过sudo
总是可以阅读用户。哦!是的,但诀窍是运行sftp-server -R
(readonly)可以阅读用户和sudo -u canread /usr/libexec/sftp-server
和可以写用户。您可以使用部队指挥或者放入.ssh/authorized_keys
。这样,可以阅读永远不会允许写入操作(除非存在 OpenSSH 错误)。并且可以写实际上会读取/写入以下文件/目录可以阅读允许。
我确实会重新考虑共享组和目录上 sgid 的使用。