我目前有一个用于本地开发的代理网络主机设置,但我正在尝试使其成为适当的(记录的)设置,以便我可以在几乎任何 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