如何在Linux中设置Chrooted SFTP
本教程介绍了如何设置Chrooted SFTP以允许用户通过SFTP连接,但不允许它们通过SSH连接。
换句话说,我们将使用户强制到特定目录,并将其shell设置为/bin/nologin或者其他一些shell,否认访问ssh登录。
现在,让我们继续在Linux中设置Chrooted SFTP。
下面给出的此步骤应该适用于支持OpenSSH的任何Linux发行版。
在Linux中设置Chrooted SFTP
从版本4.9开始,OpenSSH具有称为内部SFTP子系统的功能,该子系统仅允许SFTP访问,但不是SSH访问权限。
因此,用户可以只能从服务器访问数据,但他们无法使用ssh访问它。
创建Chrooted目录
首先,使用命令创建特定的chrooted目录:
$sudo mkdir /sftp
使用命令完全由root用户拥有此目录:
$sudo chown root:root /sftp/
在此目录下,为每个用户创建单独的目录,如/sftp/user1,/sftp/user2,和/sftp/user3等。
出于本教程的目的,我将在/SFTP目录下创建一个名为theitroad的目录。
$sudo mkdir /sftp/theitroad
这是用户可以保存数据的目录。
此外,用户无法超越此目录。
它就像他们$HOME目录一样。
创建SFTP组并将用户分配给该组
现在,我们需要创建用户才能访问SFTP Chrooted目录。
创建一个名为sftponly的组,如以下命令所示:
$sudo groupadd sftponly
然后,创建新的SFTP用户或者将现有用户分配给"SFTPONLY"组,如下所示。
让我创建一个新的用户,例如secthil,并将他分配给名为"sftponly"的组。
然后,将他的主目录设置为/sftp/onitread和默认shell as/sbin/nologin。
我们可以使用以下在线命令执行此操作:
$sudo useradd -g sftponly -d /theitroad -s /sbin/nologin senthil
使用命令设置新创建的用户的密码:
$sudo passwd senthil
要修改现有用户,请使用"usermod"而不是如下所示的"Usermod"命令:
$sudo usermod -g sftponly -d /theitroad -s /sbin/nologin senthil
为chrooted目录分配适当的权限
我们需要为SFTP用户分配适当的权限,以便如下所示访问其主目录。
$sudo chown senthil:sftponly /sftp/theitroad
$sudo chmod 700 /sftp/theitroad/
其他SFTP用户无法访问此目录。
同样,也为所有其他SFTP用户分配适当的权限。
推荐下载 - 免费电子书:"在5天内学习Linux"
配置Chrooted SFTP.
编辑/etc/ssh/sshd_config文件:
$sudo vi /etc/ssh/sshd_config
查找并注释出以下行(即将前面添加到注释出来)。
#Subsystem sftp /usr/libexec/openssh/sftp-server
在Ubuntu 18.04 LTS中,查找和注释以下行:
#Subsystem sftp /usr/lib/openssh/sftp-server
接下来,在文件末尾添加以下行:
Subsystem sftp internal-sftp Match group sftponly ChrootDirectory /sftp/ X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp
保存并退出文件。
重新启动SSH服务以更新更改。
$sudo systemctl restart sshd
现在,尝试使用SFTP用户从网络上的任何其他系统中SSH(即我们的情况下)。
$ssh Hyman@theitroad
我们将获得以下错误消息。
Hyman@theitroad's password: This service allows sftp connections only. Connection to 192.168.43.2 closed.
其中192.168.43.2是我刚刚配置了SFTP的远程系统的IP地址。
我们只能使用SFTP访问远程系统,如下所示。
$sftp Hyman@theitroad Hyman@theitroad's password: Connected to 192.168.43.2. sftp>
看到了吗?
用户"SEDHIL"可以通过SFTP连接,但不是SSH。
要了解当前的工作目录,请使用'pwd'命令:
sftp> pwd Remote working directory: /theitroad sftp>
SFTP的基本命令开始使用sftp
我们可以使用-p标志使用备用端口连接。
$sftp -P <port_number> Hyman@theitroad_host
要将远程文件传输到本地系统,请执行以下操作:
sftp> get /path/remote_file
我们可以使用命令将本地文件传输到远程系统:
sftp> put /path/local_file
要递归将远程文件夹传输到本地系统:
sftp> get -R /path/remote_folder
要在本地计算机上显示文件列表:
sftp> lls
要显示远程计算机上的文件列表:
sftp> ls
有关SFTP使用情况的更多详细信息,请参阅Man Pages。
$man sftp