从我的桌面客户端到 LXD 容器中的 CHROOTED 用户的 SSH 连接上的本地转发

从我的桌面客户端到 LXD 容器中的 CHROOTED 用户的 SSH 连接上的本地转发

我目前有一个用于本地开发的代理网络主机设置,但我正在尝试使其成为适当的(记录的)设置,以便我可以在几乎任何 VPS 主机上部署它。

目前,除了 chrooted 用户设置之外,其他一切都正常。

Apache 代理和 SSH 反弹正在运行。

如果我禁用 dev(对于开发人员)用户的 chrooting,LocalForwarding 即使对于 dev 用户也可以工作,并且我可以成功访问反弹的 SSH 主机,并使用 localhost:5000 上的 dev 用户在转发的设置上成功使用 SFTP,它会重定向到开发服务器上的端口 22。

但是,在我为用户 dev 在 sshd_config 中启用 chrooting 之后,我发现缺少一些文件,这些文件使得可以通过 SFTP 到这个 LocalForwarded 设置。

通道 5:打开失败:连接失败:设备或资源繁忙

然后我尝试使用以下方式安装开发容器的不同区域mount -o bind

sudo mount -o bind /bin /home/remoteusers/bin; 
sudo mount -o bind /dev /home/remoteusers/dev; 
sudo mount -o bind /etc /home/remoteusers/etc; 
sudo mount -o bind /lib64 /home/remoteusers/lib64; 
sudo mount -o bind /opt /home/remoteusers/opt; 
sudo mount -o bind /proc /home/remoteusers/proc; 
sudo mount -o bind /run /home/remoteusers/run; 
sudo mount -o bind /sbin /home/remoteusers/sbin; 
sudo mount -o bind /srv /home/remoteusers/srv; 
sudo mount -o bind /sys /home/remoteusers/sys; 
sudo mount -o bind /tmp /home/remoteusers/tmp; 
sudo mount -o bind /usr /home/remoteusers/usr; 
sudo mount -o bind /var /home/remoteusers/var;

到目前为止没用。然后我通过运行以下命令进入 /lib。

sudo mount -o bind /lib /home/remoteusers/lib

然后错误消息从之前的资源繁忙变为

通道 5:打开失败:连接失败:名称解析暂时失败



安装两者时,/lib/ETC使用

sudo mount -o bind /etc /home/remoteusers/etc
sudo mount -o bind /lib /home/remoteusers/lib

ssh -v返回

debug1:通道 5:空闲:direct-tcpip:监听本地主机 22 端口 5000,从 127.0.0.1 端口 38519 连接到 127.0.0.1 端口 5000,nchannels 6

因此,通过在 chrooted 位置的 /etc 文件夹中放置一些内容可以更有效地解决问题。不过,我的 SFTP 客户端仍然说

错误:从 SFTP 服务器收到意外的文件结束
错误:无法连接到服务器



我现在想知道,除了 chroot(已设置)之外,其他一切都正常,我遗漏了什么?我现在应该找出如何让 chroot 包含缺失的部分,这样我就不必让整个开发容器的文件系统易受攻击,而只需暴露 chroot。

我错过了什么?

主办方地图:

MAINHOST (running all the containers) {
     Logins {
          admin
          bounce
     }
     PROXY-CONTAINER ("Proxy") { }
     DEVELOPMENT-CONTAINER ("Development") {
          Logins {
               admin
               dev
          }
     }
}

如果有人感兴趣的话,我可以在 Google Drive 上发布文档。

(我在同一个桌面客户端上的 VirtualBox 中运行该设置)。

答案1

有一些错误。替换Subsystem以下行/etc/ssh/sshd_config

改变

Subsystem sftp /usr/lib/openssh/sftp-server

Subsystem sftp internal-sftp


授予代理转发和保护的写入权限tmp用户访问

sudo rm -v /home/remoteusers/tmp/*
sudo chown sshd:root /home/remoteusers/tmp
sudo chmod 1700 /home/remoteusers/tmp

从以下位置复制基本文件/etc到 chroot/home/remoteusers/etc

sudo cp -a -v /etc/{bash.bashrc,group,hostname,hosts,passwd} /home/remoteusers/etc/
sudo cp -a -v /run/systemd/resolve/stub-resolv.conf /home/remoteusers/etc/resolv.conf
sudo chmod 1775 /home/remoteusers/etc/resolv.conf


基本上文件系统树应该如下所示:

/home/chroot {
d 755    bin {
  755        bash
  755        ls
  755        nano
         }
d 755    etc {
  644        bash.bashrc
  644        group
  644        hostname
  644        hosts
  644        passwd
  1775       resolv.conf (owned by systemd-resolve)
         }
d 755    home {
d 755        dev {
                 - Mounted /home/dev
             }
         }
d 755    lib {
  755        libcre.so.3
  755        libpthread.so.0
  755        libselinux.so.1
d 755        terminfo {
d                ...
             }
d 755        x86_64-linux-gnu {
  755            libc.so.6
  644            libdl.so.2
  644            libncursesw.so.5
  644            libnsl.so.1
  644            libnss_compat.so.2
  644            libnss_files.so.2
  644            libnss_nis.so.2
  644            libtinfo.so.5
             }
         }
d 755    lib64 {
  755        ld-linux-x86-6.so.2
         }
d 1700   tmp { } (owned by sshd:root)
d 755    usr {
d 755        bin {
  755            groups
  755            id
  755            locale-check
  755            whoami
             }
         }
}


最后,重新启动 sshd。

sudo service ssh restart

相关内容