如何创建运行程序而不是完整 shell 的 SSH 服务器?

如何创建运行程序而不是完整 shell 的 SSH 服务器?

我有一个程序想要通过 ssh(甚至是 telnet,程序的安全性并不重要)共享,但我不想允许连接访问系统中除该程序的 I/O 之外的任何其他内容(例如没有 scp、没有完整的 shell 访问权限、没有 ssh 隧道)。这可能吗?在 Ubuntu 系统上我该怎么做?

能够以本地用户身份或以 身份运行此功能可获得奖励积分nobody

答案1

GNU Netcat 似乎在某种程度上可以工作(使用 -e),但只能支持一个用户/会话/实例,理想情况下,我希望能够多次连接而不必重新启动服务器。

索卡特可以分叉。

我建议浏览一下例子

socat TCP4-LISTEN:5555,fork,tcpwrap=script \ EXEC:/bin/myscript,chroot=/home/sandbox,su-d=sandbox,pty,stderr

一个简单的服务器,它接受连接(TCP4-LISTEN)并为每个连接派生一个新的子进程;每个子进程都充当单个中继。客户端必须符合 /etc/hosts.allow 和 /etc/hosts.deny 中守护进程名称“script”的规则,否则将被拒绝访问(请参阅“man 5 hosts_access”)。为了执行程序,子进程 chroot 到 /home/sandbox,su 到用户沙箱,然后启动程序 /home/sandbox/bin/myscript。Socat 和 myscript 通过伪 tty (pty) 进行通信;myscript 的 stderr 被重定向到 stdout,因此其错误消息通过 socat 传输到连接的客户端。

答案2

我认为有两种简单的方法:

  1. 创建本地用户,使您的程序可以作为登录 shell 执行。

  2. 添加一个调用你的程序的 xinetd 服务(然后用户可以 telnet 到该服务)

答案3

创建将使用服务器的用户,如下所示:

adduser -s /bin/software username

在哪里/bin/软件是软件的位置,用户名是用户的用户名。

请注意,如果人们发现您的软件存在安全漏洞,他们仍然可以访问 shell。

相关内容