![允许用户通过 ssh 连接到 mysql 来创建数据库转储,但不允许其他任何操作](https://linux22.com/image/891398/%E5%85%81%E8%AE%B8%E7%94%A8%E6%88%B7%E9%80%9A%E8%BF%87%20ssh%20%E8%BF%9E%E6%8E%A5%E5%88%B0%20mysql%20%E6%9D%A5%E5%88%9B%E5%BB%BA%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BD%AC%E5%82%A8%EF%BC%8C%E4%BD%86%E4%B8%8D%E5%85%81%E8%AE%B8%E5%85%B6%E4%BB%96%E4%BB%BB%E4%BD%95%E6%93%8D%E4%BD%9C.png)
我需要让用户创建 mysql 转储,但我想限制其他任何操作。我必须通过 ssh 进入服务器来执行此操作,因为 mysql 服务器只监听内部 ip 地址,阻止我直接访问 mysql 服务器。
我曾尝试将 ssh 用户关进监狱,但是没有起到什么作用,因为即使我将套接字目录复制到监狱中,它也无法通过 mysql 套接字连接到数据库。
然后我读到了一些关于/sbin/nologin
允许用户在不启动 shell 的情况下进行身份验证的内容。我想也许我可以以某种方式传递命令来创建转储/隧道直接到 mysql。
是否有人有允许用户通过 ssh 创建数据库转储,但限制其他任何操作的经验?
用户也可以使用 Sequel Pro / MySQL Workbench 之类的工具进行连接,但他们仍然需要通过 ssh 进行连接,因为否则无法访问数据库服务器。
他们需要下载转储,但我可以通过 SFTP 访问转储。
答案1
两种可能的解决方案。
SSH 监狱, http://allanfeid.com/content/creating-chroot-jail-ssh-access
另类,Jailkit, 简单易行的监禁用户的方法
或者如果用户使用 ssh 密钥,则通过授权命令限制用户,
答案2
将执行转储所需的代码添加到 .bashrc/.zshrc,然后退出。
# .bashrc
echo "Creating DB Dump..."
dumpdumpdump
echo "Done"
exit
但这非常不安全。任何在退出前按 ctrl-c 都会让用户进入 shell。你可以添加一个陷阱,在 INT 和 TERM 上也退出,以避免这种情况
trap exit INT TERM;
echo "Creating DB Dump..."
dumpdumpdump
echo "Done"
exit