通过SSH配置纯sftp用户及权限

通过SSH配置纯sftp用户及权限

很多时候,我们需要配置某些用户使用Linux服务器,只能使用sftp服务,不能登录shell,本文介绍如何在SSH中配置这样的用户。

创建要给新用户sftpuser

$ sudo useradd -s /bin/false -m sftpuser

-s参数指定了这个用户没有shell可用(还没有配置sftp,这样做只是为了更安全)

-m参数表示给这个用户创建home目录(后面可以看到,这个参数多余了)

给sftpuser设置密码

$ sudo passwd sftpuser

修改sshd_config配置文件

Subsystem sftp internal-sftp
Match User sftpuser
    X11Forwarding no
    AllowTcpForwarding no
    PermitTTY no
    ForceCommand internal-sftp
    ChrootDirectory /home/sftpuser

从上到下依次解释:

必须使用internal-sftp

匹配用户名sftpuser

关闭X11Forwarding和AllowTcpForwarding,这两个forwarding都跟sftp业务无关,

不允许登录TTY,

只能使用sftp相关命令,

只能在/home/sftpuser目录下活动。

然后重启ssh服务器,我们先试着用sftpuser登录ssh,发现了如下错误:

C:\Users\xinli>ssh sftpuser@192.168.78.134
sftpuser@192.168.78.134's password:
PTY allocation request failed on channel 0
This service allows sftp connections only. Connection to 192.168.78.134 closed.

就应该这样。

修改目录权限

目录权限设置要遵循2点:

ChrootDirectory设置的目录权限及其所有的上级文件夹权限,属主和属组必须是root;

ChrootDirectory设置的目录权限及其所有的上级文件夹权限,只有属主能拥有写权限,权限最大设置只能是755。

$ pwd
/home
$ sudo chown -R root:root sftpuser
$ su root
$ cd sftpuser
$ mkdir upload
$ chown -R sftpuser:sftpuser upload

将sftpuser的home全部给root,并且在这个目录中设置一个upload目录,upload给sftpuser。

这样,sftpuser这个用户登录sftp之后,只能打开upload目录,并且只有在upload目录下才有写的权限。

/home/sftpuser目录下的其它文件其实是没有存在的意义的,最开始useradd使用了-m参数,多余了。

然后用sftp软件连接测试:

通过SSH配置纯sftp用户及权限

通过SSH配置纯sftp用户及权限

测试成功,sftpuser用户就成为要给纯sftp用户,只能使用sftp业务,有自己独立的读写目录。

通过ssh的配置,来支持sftp用户,不用另外安装其它sftp服务器软件。不过,貌似不能很方便地限制文件夹的最大尺寸!

发表回复

您的电子邮箱地址不会被公开。