限制 ssh 只允许 rsync 命令
主要想解决的问题
为了更好隔离,专门开了个 nginx 的账户来存储 nginx 使用的静态网页。本来想不允许登陆该账户,但从 目前资料来看,如果在 passwd 中配置了 nologin Shell,则会导致连 ssh 都会登陆失败。想对于 bash,使 用 rssh 并不能带来安全级别提升。故当前方案保留了 bash,通过配置 ssh 只允许 rsync 命令。
方案细节
创建 bash 脚本rsynconly.sh
脚本内容如下:
1 |
|
把该文件保存到路径/bin/rsynconly.sh,注意加上执行权限chmod +x /bin/rsynconly.sh.
修改sshd_config
找到 Match User 的地方,没有的话最后一行就可以,添加内容如下:
1 | Match User nginx |
这里其实就是对用户 nginx 的 ssh 连接进行限制,强制运行刚刚创建的脚本/bin/rsynconly.sh。
重启 sshd 服务
systemctl restart sshd
到此为止,整个搭建就完成了。可以愉快的使用 rsync 通过 ssh 传文件,并同时禁用了 ssh 直接登陆和执 行其他命令。
一些细节
当使用 rsync 上传文件时,会先 ssh 登陆远程主机。可通过rsync -vvv source_file nginx@ip.address: 看到,其实调用了命令ssh -l nginx ip.address rsync --server -vvve.LsfxCIvu . ., 故在脚本
/bin/rsynconly.sh中的${SSH_ORIGINAL_COMMAND}是字符串:rsync --server -vvve.LsfxCIvu . .