我有一台 Linux Mint 机器,它提供一种通过 nginx 提供的文件转储。
我的问题是,单个用户(upload_usr)应该能够将新文件/目录放置在一个特定文件夹中,但不允许他替换或更改任何现有文件。
它应该像这样工作:
- 放入 a.txt -> 很好
- 放入 a.txt -> 禁止
- cat a.txt -> 很好
- 放入 b.txt -> 很好
- rm a.txt->禁止
重要的是,非 root 的其他用户需要能够在此目录中进行读/写。
实现这一目标最简单的方法是什么?
答案1
(假设 openssh 与 sftp-server。)
如果您允许 SSH,那么这几乎是不可能的。但是,如果您仅允许 SFTP:
应该能够将新文件/目录放置在一个特定文件夹中
使用ChrootDirectory
对于其他要求-P blacklisted_requests
和-u umask
应该足够了。(您可以通过运行来查看请求类型/usr/lib/openssh/sftp-server -Q requests
。)
放入 a.txt -> 很好
允许write
(默认允许)
放入 a.txt -> 禁止
使用 sftp-server-u 0222
并禁止和setstat
fsetstat
。
cat a.txt -> 很好
允许read
(默认允许)
放入 b.txt -> 很好
允许write
(默认允许)
rm a.txt->禁止
不允许remove
(和rmdir
?)
TLDR 使用限制用户ChrootDirectory
并sftp-server
运行-u 0222 -P remove,rmdir,setstat,fsetstat