![OpenSSH internal-sftp 不接受允许/拒绝的请求](https://linux22.com/image/767137/OpenSSH%20internal-sftp%20%E4%B8%8D%E6%8E%A5%E5%8F%97%E5%85%81%E8%AE%B8%2F%E6%8B%92%E7%BB%9D%E7%9A%84%E8%AF%B7%E6%B1%82.png)
尝试使用 OpenSSH_7.4p1 设置高度受限的 SFTP 服务器,以便远程脚本上传数据。目标是黑洞,其中脚本可以使用用户级密钥执行“put”,并且无法执行其他服务器命令。一切都很顺利,直到最后一步,我尝试使用此子句中的选项来限制命令sftp
集:-P
-p
sshd_config
Match
Match user globalstat
ChrootDirectory /inbound
ForceCommand internal-sftp -d data -p put -P df,pwd,rm,mkdir,rmdir,get,rename,symlink
尝试了各种组合,但-P
fordenied_requests
永远不会阻止任何指定的远程命令。应用allowed_requests
with-p put
或put,cd
会中断传输并返回“无法规范化:权限被拒绝,需要 cwd”。如果没有-P
或-p
,则写入没有问题,并且根据此错误的其他帖子,我很确定我的目录权限是正确的。我一直在使用此手册页作为参考:
https://www.man7.org/linux/man-pages/man8/sftp-server.8.html
这意味着Subsystem
而不是ForceCommand
是这些选项的位置,但它们在的主体中不起作用,并且如果在子句中使用而不是,sshd_config
则重新启动 sshd 会引发错误。Subsystem
Match
ForceCommand
我真的希望这能够实现,任何建议都将不胜感激。
答案1
-p
/的参数-P
是低级SFTP 协议请求. 不是高级 OpenSSHsftp
客户端命令。
这些是名字:open
,,,,,,,,,,,,,,,,,,,,,,,,,,,close
。read
write
lstat
fstat
setstat
fsetstat
opendir
readdir
remove
mkdir
rmdir
realpath
stat
rename
readlink
symlink
posix-rename
statvfs
fstatvfs
hardlink
fsync
lsetstat
您可以通过运行获取最新列表sftp-server -Q requests
,如下所示sftp-server
手册页说。
答案2
鉴于该问题已经得到解答,我只想提及最初引导我到这里的一个问题:
尽管表达式看起来像一个普通命令,但双引号似乎无法像往常一样处理。这对andinternal-sftp ...
不起作用:mkdir
symlink
ForceCommand internal-sftp -l INFO -P "mkdir,rmdir,ln,symlink"
这会:
ForceCommand internal-sftp -l INFO -P mkdir,rmdir,ln,symlink