![我怎样才能阻止用户帐户访问 shell 但显示自定义消息(在 Linux 上)?](https://linux22.com/image/678213/%E6%88%91%E6%80%8E%E6%A0%B7%E6%89%8D%E8%83%BD%E9%98%BB%E6%AD%A2%E7%94%A8%E6%88%B7%E5%B8%90%E6%88%B7%E8%AE%BF%E9%97%AE%20shell%20%E4%BD%86%E6%98%BE%E7%A4%BA%E8%87%AA%E5%AE%9A%E4%B9%89%E6%B6%88%E6%81%AF%EF%BC%88%E5%9C%A8%20Linux%20%E4%B8%8A%EF%BC%89%EF%BC%9F.png)
由于各种原因,我需要启用 telnet 访问(通过专用网络),当有人尝试使用特定用户帐户(假设CheckStatus
)登录时,它不会向用户提供 shell,而是运行一些非常快速的代码/脚本/其他内容,并返回两个非常具体的字符串之一。此帐户可以设置密码。
我本质上是想复制当您尝试通过 SSH 进入 Github 服务器时发生的情况,他们会告诉您未授予 shell 访问权限。
我认为解决这个问题的方法是替换用户的 shell,因此我创建了脚本:
#! /bin/bash
echo "HI!!!"
然后尝试通过以下方式将其设置为用户的 shell:
test@development-1:~$ chmod +x test.sh
test@development-1:~$ chsh
Password:
Changing the login shell for test
Enter the new value, or press ENTER for the default
Login Shell [/bin/bash]: /home/test/test.sh
chsh: /home/test/test.sh is an invalid shell
有关实现此目的的最佳方法有什么想法吗?
作为参考,我们的大多数系统都是 Ubuntu 14.04。
答案1
最好的方法是使用 ssh,并使用嵌入在公钥中的“command=...”限制将密钥与特定命令绑定。
chsh:/home/test/test.sh 是无效的 shell
文档有助于chsh(1)
注意:对登录 shell 的唯一限制是命令名必须列在 /etc/shells 中,除非调用者是超级用户,这样可以添加任何值。
您需要以适当的权限运行 chsh 或在 /etc/shells 中添加合适的条目。