当前位置: 首页 > 科技观察

Debian10Chroot环境下如何配置SFTP服务

时间:2023-03-12 08:01:14 科技观察

SFTP意为“SecureFileTransferProtocol”或“SSHFileTransferProtocol”,是最常用的通过ssh传输文件的一种从本地系统安全传输的方法到远程服务器,反之亦然。sftp的主要优点是我们不需要安装除openssh-server之外的任何其他包,openssh-server是大多数Linux发行版中默认安装的一部分。sftp的另一个好处是我们可以允许用户使用sftp而不是ssh。Debian10的当前版本代号为“Buster”,在本文中我们将演示如何在Debian10系统上的“监狱式”Chroot环境中配置sftp。在这里,Chrootjail-style环境意味着用户不能离开他们各自的主目录,或者用户不能从他们各自的主目录更改目录。实验详情如下:OS=Debian10IP地址=192.168.56.151让我们跳转到SFTP配置步骤,第1步,使用groupadd命令为sftp创建一个组打开终端,使用下面的groupadd命令创建一个名为sftp_users的组组:root@linuxtechi:~#groupaddsftp_users步骤2.将用户添加到组sftp_users并设置权限假设你想创建一个新用户并将用户添加到sftp_users组,然后运行以下命令,语法:#useradd-m-Gsftp_users让我们假设用户名是jonathan:root@linuxtechi:~#useradd-m-Gsftp_usersjonathan使用以下chpasswd命令设置密码:root@linuxtechi:~#echo"jonathan:<输入密码>”|chpasswd假设你想将现有用户添加到sftp_users组,然后运行以下usermod命令,假设现有用户名为chris:root@linuxtechi:~#usermod-Gsftp_userschris现在设置用户名所需权限:root@linuxtechi:~#chownroot/home/jonathan/home/chris/在每个用户的主目录中创建一个上传目录,并设置正确的所有权:root@linuxtechi:~#mkdir/home/jonathan/uploadroot@linuxtechi:~#mkdir/home/chris/uploadroot@linuxtechi:~#chownjonathan/home/jonathan/uploadroot@linuxtechi:~#chownchris/home/chris/upload注意:像Jonathan和Chris这样的用户可以从他们的本地系统上传文件和目录。Step3.编辑sftp配置文件/etc/ssh/sshd_config正如我们所说,sftp操作是通过ssh完成的,所以它的配置文件是/etc/ssh/sshd_config,在做任何修改之前,我建议先备份文件,然后编辑文件,然后添加如下内容:root@linuxtechi:~#cp/etc/ssh/sshd_config/etc/ssh/sshd_config-orgroot@linuxtechi:~#vim/etc/ssh/sshd_config......#Subsystemsftp/usr/lib/openssh/sftp-serverSubsystemsftpinternal-sftpMatchGroupsftp_usersX11ForwardingnoAllowTcpForwardingnoChrootDirectory%hForceCommandinternal-sftp...保存并退出文件。为使上述修改生效,使用下面的systemctl命令重启ssh服务:root@linuxtechi:~#systemctlrestartsshd在上面的sshd_config文件中,我们注释掉了以Subsystem开头的行,新增了一个条目Subsystemsftpinternal-sftp和新线路。和匹配组sftp_users–>这意味着如果用户是sftp_users组的成员,那么下面提到的规则将应用于此条目。ChrootDierctory%h–>表示用户只能在自己各自的主目录内更改目录,不能在各自的主目录外更改目录。或者换句话说,我们可以说不允许用户更改目录。他们将在他们的目录中获得类似监狱的环境,并且将无法访问其他用户的目录和系统的目录。ForceCommandinternal-sftp-->表示限制用户只能使用sftp命令。步骤4.测试并验证sftp登录到与您的sftp服务器位于同一网络上的任何其他Linux系统,然后使用我们放在sftp_users组中的用户尝试ssh和sftp服务。[root@linuxtechi~]#sshroot@linuxtechiroot@linuxtechi'spassword:Writefailed:Brokenpipe[root@linuxtechi~]#sshroot@linuxtechiroot@linuxtechi'spassword:Writefailed:Brokenpipe[root@linuxtechi~]#以上操作已确认用户不允许ssh,现在使用以下命令尝试sftp:[root@linuxtechi~]#sftproot@linuxtechiroot@linuxtechi'spassword:Connectedto192.168.56.151.sftp>ls-ldrwxr-xr-x2root10014096Sep1407:52debian10-pkgs-rw-r--r--1root1001155Sep1407:52devops-actions.txtdrwxr-xr-x2100110024096Sep1408:29上传让我们使用sftp的get命令尝试下载文件:sftp>getdevops-actions.txtFetching/devops-actions.txttodevops-actions.txt/devops-actions.txt100%1550.2KB/s00:00sftp>sftp>cd/etcCouldn'tstatremotefile:Nosuchfileordirectorysftp>cd/rootCouldn'tstatremotefile:Nosuchfileordirectorysftp>以上输出证实我们可以得到tp服务器将文件下载到本地计算机。此外,我们还必须测试用户不能更改目录。让我们尝试在上传目录上传一个文件:sftp>cdupload/sftp>putmetricbeat-7.3.1-amd64.deb将metricbeat-7.3.1-amd64.deb上传到/upload/metricbeat-7.3.1-amd64。debmetricbeat-7.3.1-amd64.deb100%38MB38.4MB/s00:01sftp>ls-l-rw-r--r--11001100240275654Sep1409:18metricbeat-7.3.1-amd64.debsftp>这确认我们已成功将文件从本地系统上传到sftp服务。现在使用winscp工具测试sftp服务,输入sftp服务器IP地址和用户凭据:点击“登录”并尝试下载和上传文件:现在,尝试上传上传文件夹中的文件:上方窗口确认上传工作正常,这就是本文的全部内容。