Linux建立SFTP专用帐号,并设置Chroot环境教程

本文大部分来自文章Linux建立SFTP专用帐号,并设置Chroot环境教程 _ 小媛啾

但是安装本文操作还是会报错误: fatal: bad ownership or modes for chroot directory "/home/ftpuser" [postauth].  ( 通过命令:vim /var/log/secure 或 journalctl -ex 查看错误日志)关键还是有一步没说清楚!!!特修改记录下。

介绍如何在 Linux 系统上建立 SFTP 传输文件专用的帐号,禁止该帐号以 SSH 登入,并以 chroot 将用户限制在自己的家目录中,加强系统安全性。

SFTP 是一种加密的文件传输协定,功能跟 FTP 类似,都可以传输大量的文件,不过比传统的 FTP 更为安全。以下我们将介绍如何在 Linux 中建立 SFTP 文件传输专用帐号,让帐号只能用来传输文件,不可以登入系统执行指令,增加系统的安全性。

设置仅允许以 SFTP 登入

若要让用户只能以 SFTP 传输文件,可以透过用户帐号的方式设置单一用户,或是以群组来设置多个用户帐号,选择其中一种方式即可(或是混用亦可)。

以帐号设置

首先建立 SFTP 专用的用户帐号(YOUR_ACCOUNT 请换为自己的帐号名称):

# 建立用户
sudo adduser YOUR_ACCOUNT

接着编辑 /etc/ssh/sshd_config 这个 sshd 服务器设置文件,在文件的最后加上这一段针对单一帐号的特殊设置:

# 设置 YOUR_ACCOUNT 为 SFTP 专用帐号
Match User YOUR_ACCOUNT
  ForceCommand internal-sftp
  PasswordAuthentication yes
  ChrootDirectory /home/%u
  PermitTunnel no
  AllowAgentForwarding no
  AllowTcpForwarding no
  X11Forwarding no

其中的 YOUR_ACCOUNT 要替换为自己的 SFTP 专用帐号名称。这些设置的作用就是让此帐号不能使用 SSH 的各种功能,只能以 SFTP 传输文件,并且以 chroot 的方式限制在自己的家目录,无法看到系统上的其他文件。

以群组设置

如果一次要建立多个 SFTP 专用帐号,可以用群组的方式来设置,首先建立一个 SFTP 专用群组:

# 新增系统群组
addgroup --system YOUR_GROUP

然后将所有的 SFTP 专用帐号都加入这个群组中,我们可以在新建帐号时就直接指定主要群组,或是将既有的帐号加入此群组:

# 建立新帐号并指定主要群组
adduser YOUR_ACCOUNT YOUR_GROUP

# 设置既有帐号的主要群组
usermod -g YOUR_GROUP YOUR_ACCOUNT

# 将既有帐号加入指定群组
usermod -a -G YOUR_GROUP YOUR_ACCOUNT

接着编辑 /etc/ssh/sshd_config 这个 sshd 服务器设置文件,在文件的最后加上这一段针对该 SFTP 群组的特殊设置:

# 设置 YOUR_GROUP 为 SFTP 专用群组
Match Group YOUR_GROUP
  ForceCommand internal-sftp
  PasswordAuthentication yes
  ChrootDirectory /home/%u
  PermitTunnel no
  AllowAgentForwarding no
  AllowTcpForwarding no
  X11Forwarding no

这一段设置跟上面单一用户的设置几乎相同,只不过这里是将设置套用在 YOUR_GROUP 群组中的所有用户。

重新启动 sshd 服务器

调整好 sshd 服务器的设置文件之后,建议先测试一下设置文件是否有错误,以免采用错误的设置造成 sshd 服务器无法启动,把自己挡在服务器之外:

# 测试 sshd 服务器设置文件是否有错误
sudo sshd -t

若没有任何错误消息,就表示没问题。

重新启动 sshd 服务器:

# 重新启动 sshd 服务器
sudo systemctl restart sshd

设置目录权限

使用 chroot 的时候,根目录的拥有者必须为 root,并且权限要是 755,所以这里要设置好拥有者与权限:

# 设置 Chroot 根目录拥有者与权限
sudo chown root:root /home/YOUR_ACCOUNT
sudo chmod 755 /home/YOUR_ACCOUNT

如果没有设置正确的根目录权限,client 端连接时就会出现类似这样的错误。

client_loop: send disconnect: Broken pipe

而服务器的纪录文件则会显示这样的错误消息:

sshd[869]: fatal: bad ownership or modes for chroot directory "/home/YOUR_ACCOUNT"

如果需要让用户上传文件,就要另外建立一个上传专用的目录,并设置好拥有者与权限:

# 建立上传专用目录
sudo mkdir /home/YOUR_ACCOUNT/upload
sudo chown YOUR_ACCOUNT:YOUR_GROUP /home/YOUR_ACCOUNT/upload

更改登入 Shell

在本机的设置部份,我们也可以更改这些 SFTP 专用帐号的登入 shell,避免这些帐号从本机登入。

如果不想让用户登入,可以将其登入 shell 改为 /usr/sbin/nologin,但是这个 shell 没有在系统的 shell 清单之内,所以要先将其加入:

# 于 /etc/shells 新增 /usr/sbin/nologin
echo "/usr/sbin/nologin" | sudo tee -a /etc/shells

接着更改 SFTP 专用帐号的登入 shell:

# 更改指定帐号的登入 Shell
sudo chsh --shell /usr/sbin/nologin YOUR_ACCOUNT

这样一来,该帐号不管从何处都无法登入主机执行任何指令。

若要查找帐号的登入 shell,可以使用 getent 指令:

# 查找指定帐号的登入 Shell
getent passwd YOUR_ACCOUNT | cut -d: -f7

登入测试

我们可以测试一下以 SFTP 专用帐号透过 SSH 登入,纵使帐号密码都正确,还是无法登入系统,只会显示这样的错误消息:

This service allows sftp connections only.

如果从本机登入的话,由于我们已经改了登入 shell,所以也是无法登入的,只会显示这样的错误消息:

This account is currently not available.

参考数据:Tecmint、StackExchange、DigitalOcean、The Geek Stuff

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值