如何在CentOS/RHEL上创建没有Shell访问的SFTP用户

时间:2019-04-29 03:18:01  来源:igfitidea点击:

SFTP (SSH文件传输协议)是两个系统之间的安全文件传输协议。
它在SSH协议上运行,并共享相同的端口22。

本教程将在CentOS 8和RedHat 8系统上创建只访问SFTP的用户(不访问ssh)。
用户只能使用SFTP连接服务器,并允许访问指定的目录。
用户无法通过SSH访问服务器。

按照下面的教程在CentOS 8和RHEL 8上创建sftp only帐户。

步骤1 -创建帐户

首先,为sftp访问创建一个用户帐户。
对于本教程,我们将创建一个名为sftpuser的用户,该用户不具有shell访问权限。
另外,为用户设置一个强密码。

sudo adduser --shell /bin/false sftpuser
sudo passwd sftpuser

Changing password for user sftpuser.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

步骤2 -创建目录

现在,创建sftp用户可以访问的目录结构。
我们将把新用户限制在这个目录中。
因此用户不能访问其他目录中的文件。

sudo mkdir -p /var/sftp/files

将目录的所有权更改为新创建的sftp用户。
这样sftpuser就可以读写这个目录。

sudo chown sftpuser:sftpuser /var/sftp/files

必须将/var/sftp的所有者和组所有者设置为root。
根用户对该访问具有读/写访问权。
组成员和其他帐户只有读取和执行权限。

sudo chown root:root /var/sftp
sudo chmod 755 /var/sftp

步骤3 -为SFTP配置SSH

我们知道SFTP在SSH协议上运行,因此需要在配置文件中对此进行配置。
在文本编辑器中编辑SSH配置文件。

sudo vim /etc/ssh/sshd_config

并在文件末尾添加以下设置。

Match User sftpuser
	ForceCommand internal-sftp
	PasswordAuthentication yes
	ChrootDirectory /var/sftp
	PermitTunnel no
	AllowAgentForwarding no
	AllowTcpForwarding no
	X11Forwarding no

保存配置并重新启动SSH服务使更改生效。

sudo systemctl restart sshd.service

所有完成,系统准备接受sftp仅连接为创建的帐户。
让我们测试sftp连接,并确保用户没有获得SSH授权。

步骤4 -测试SFTP连接

我使用FileZilla连接到我的Windows系统中的SFTP实例。
Linux桌面用户也可以使用Filezilla进行连接。
对于Linux服务器,用户可以使用sftp命令行实用程序连接到远程sftp实例。

sftp Hyman@theitroad(/cdn-cgi/l/Hyman)

Connecting to sftp.theitroad.com...
Hyman@theitroad(/cdn-cgi/l/Hyman)'s password:
sftp>

连接到FileZilla:

此帐户配置为仅用于SFTP连接。
因此,如果任何用户尝试通过SSH连接,在成功身份验证后将立即断开连接。
用户将得到以下信息:

ssh Hyman@theitroad(/cdn-cgi/l/Hyman)

Hyman@theitroad(/cdn-cgi/l/Hyman)'s password:
This service allows sftp connections only.
Connection to sftp.theitroad.com closed.

上面的消息(此服务只允许sftp连接)表明用户只允许sftp访问。
用户无法通过SSH连接服务器。