如何在 CentOS 中创建 SFTP 用户?

OC2*_*2PS 9 users login ftp centos

我想为支持人员提供临时 SFTP 访问权限。如何创建 SFTP 用户?完成工作后如何删除它?

另外,如何为它们指定主目录?我可以阻止他们访问其主目录中的某些子目录吗?

我们使用 CentOS 6.3 和 fzSftp

slm*_*slm 14

非 chroot 访问

如果您没有设置 FTP 服务器,并且您信任将登录的用户,不要过多地浏览您的服务器,我倾向于为他们提供一个 SFTP 帐户进入系统。

CentOS wiki 维护了一个简单的操作方法,标题为:简单的 SFTP 设置,让这一切变得轻松自如。

我说这是无痛的,因为您实际上只需要创建帐户并确保防火墙允许 SSH 流量,确保 SSH 服务正在运行,您就大功告成了。

如果sshd尚未运行:

$ /etc/init.d/sshd start
Run Code Online (Sandbox Code Playgroud)

添加用户:

$ sudo useradd userX
$ sudo passwd userX
... set the password ...
Run Code Online (Sandbox Code Playgroud)

完成帐户后:

$ sudo userdel -r userX
Run Code Online (Sandbox Code Playgroud)

chroot 权限

另一方面,如果您想将此用户限制在指定目录中,SSH 附带的 SFTP 服务器 (openssh) 提供的配置也可以轻松启用。这需要更多的工作,但不会太多。本教程中介绍了这些步骤:如何在 Linux 中设置 Chroot SFTP(仅允许 SFTP,而不是 SSH)

对您的/etc/ssh/sshd_config文件进行这些更改。

Subsystem       sftp    internal-sftp

## You want to put only certain users (i.e users who belongs to sftpusers group) in the chroot jail environment. Add the following lines at the end of /etc/ssh/sshd_config

Match Group sftpusers
  ChrootDirectory /sftp/%u
  ForceCommand internal-sftp
Run Code Online (Sandbox Code Playgroud)

现在,您需要创建 chroot 目录树,该用户将被锁定到该目录树中。

$ sudo mkdir -p /sftp/userX/{incoming,outgoing}
$ sudo chown guestuser:sftpusers /sftp/guestuser/{incoming,outgoing}
Run Code Online (Sandbox Code Playgroud)

权限应如下所示:

$ ls -ld /sftp/guestuser/{incoming,outgoing}
drwxr-xr-x 2 guestuser sftpusers 4096 Dec 28 23:49 /sftp/guestuser/incoming
drwxr-xr-x 2 guestuser sftpusers 4096 Dec 28 23:49 /sftp/guestuser/outgoing
Run Code Online (Sandbox Code Playgroud)

顶级目录如下:

$ ls -ld /sftp /sftp/guestuser
drwxr-xr-x 3 root root 4096 Dec 28 23:49 /sftp
drwxr-xr-x 3 root root 4096 Dec 28 23:49 /sftp/guestuser
Run Code Online (Sandbox Code Playgroud)

不要忘记重新启动sshd服务器:

$ sudo service sshd restart
Run Code Online (Sandbox Code Playgroud)

现在创建 userX 帐户:

$ sudo useradd -g sftpusers -d /incoming -s /sbin/nologin userX
$ sudo passwd userX
... set password ...
Run Code Online (Sandbox Code Playgroud)

您可以检查帐户是否已正确创建:

$ grep userX /etc/passwd
userX:x:500:500::/incoming:/sbin/nologin
Run Code Online (Sandbox Code Playgroud)

完成帐户后,按上述相同方式将其删除:

$ sudo userdel -r userX
Run Code Online (Sandbox Code Playgroud)

...并且不要忘记删除我们上面所做的配置文件更改,然后重新启动sshd以再次激活它们。