麒麟操作系统如何限制用户使用SFTP时仅能访问指定目录

一、问题背景

在不同客户环境我们可能会遇到用户提出下面问题:如何限制用户使用 SFTP 时仅能访问指定目录?如何限制用户不离开SFTP 目录?本文的目的就是为这些应用场景提供配置参考建议。

例如:

openAI 的 GPT 大模型的发展历程。

二、配置方法

本示例效果如下:
 指定用户仅能通过 SFTP 访问服务器,无法正常登录到操作系统环境中。
 当指定用户是属于 sftpgrp 这个用户组的成员时,只能在特定目录下进行操作,无法随意访问服务器环境中的其他 目录内容。

(一)OpenSSH 服务配置

为了实现上述效果,我们需要对 OpenSSH 服务配置进行调整。在银河麒麟高级服务器操作系统 V10 中,OpenSSH 服务配置文件位于/etc/ssh/sshd_config,我们需要在配置文件中修改下面内容:
注释默认的 sftp 子系统配置:

#Subsystem sftp /usr/libexec/openssh/sftp-server -l INFO -f AUTH

添加全新的 sftp 配置:

Subsystem sftp internal-sftp

在配置文件末尾添加针对sftpgrp 用户组的特定规则:

Match Group sftpgrp

ForceCommand internal-sftp X11Forwarding no AllowTcpForwarding no PermitTTY no
ChrootDirectory /sftp/%u

我们通过 Match 参数指定了匹配的规则为用户组(Group), Group 后设置的内容对应到我们示例中提到的sftpgrp 用户组。通过ChrootDirectory 参数让满足条件的用户访问 SFTP 时,切换 SFTP 环境的家目录到/sftp 目录下,这里的%u 对应登录用户的用户名, 例如我当前登录的用户名为 kylin,那么当 kylin 用户属于 sftpgrp 用户组时,SFTP 会直接访问到服务器的/sftp/kylin 目录。
完成上述配置后,我们需要通过 systemctl reload sshd 命令让 OpenSSH 服务重新加载配置文件,以保障我们的配置生效。

(二)创建目标用户

我们创建一个名为 kylin 的用户,用来对应本次示例中,仅能SFTP 访问服务器,并且仅能访问服务器的/sftp/kylin 目录。我们需要进行下面操作:

创建sftpgrp 用户组:

# groupadd sftpgrp

创建 kylin 用户:

# useradd -d /kylin -M -g sftpgrp -s /sbin/nologin kylin

我们通过-d 参数指定用户的家目录,-M 参数表示不自动创建用户家目录的文件夹,-g 指定了 kylin 用户属于 sftpgrp 用户组,- s 设置了 kylin 用户默认的 SHELL,这里的/sbin/nologin 作为 SHELL 会导致用户无法直接登录操作系统获得交互式的命令行环境。

为kylin 用户设置登录密码:

# passwd kylin

(三)设置目标目录

最后我们来创建提供给 kylin 用户访问的 SFTP 目录:

创建目录:

# mkdir -p /sftp/kylin

修改目录权限:

# chmod -R 755 /sftp/kylin

修改目录属主:

# chown root:sftpgrp /sftp/kylin

三、测试效果

配置完成后,我们可以通过使用 SFTP 客户端工具访问服务器来检验配置的效果。例如通过 root 用户使用sftp 客户端访问服务器时,可以获取到下面信息:

# sftp root@192.168.1.100
Authorized users only. All activities may be monitored and reported.

root@192.168.1.100's password: Connected to 192.168.1.100. 
sftp> pwd
Remote working directory: /root

sftp> ls	/
/backup	/bin	/boot	/box	/data	/dev	/etc	/home
/lib	/lib64	/media	/mnt	/opt	/proc	/root	/run
/sbin	/srv	/sys	/tmp	/usr	/var

sftp>

可以看到,我们使用 root 用户通过 sftp 客户端登录后,家目录位于/root,并且可以查看家目录以外的路径,例如根目录下的 内容。
我们通过配置的 kylin 用户使用 sftp 客户端访问服务器时,显示信息如下:

# sftp kylin@192.168.1.100
Authorized users only. All activities may be monitored and reported. atmsftp@192.168.1.100's password:
Connected to 192.168.1.100. 
sftp> pwd
Remote working directory: / 
sftp> ls /
sftp>

kylin 用户的情况跟 root 出现了巨大差异,我们默认的家目录为“/”,并且无法看到其他目录的内容。

四、常见问题

配置过程我们可能会遇到下面几种情况,供大家参考:

(一)OpenSSH 服务报错

我们在执行systemctl reload sshd 或者systemctl restart sshd 时遇到报错。
如果您是在参考本文进行配置过程遇到了上述现象,很有可能与配置中第一步,也就是 OpenSSH 服务的配置文件修改有关, 错误的配置文件内容会导致服务无法正常启动。
请检查您Match 配置的内容位于OpenSSH 配置文件中的什么位置。根据 Match 配置的使用描述,在满足条件的情况下,Match 下方的内容会覆盖全局系统配置的内容,直到遇到下一个 Match 参数或配置文件末尾。
所以正确的配置方式是把教程中的配置内容追加到 OpenSSH
配置文件末尾。

(二)用户无法通过 SFTP 成功登录服务器

先检查是否是由于身份验证错误,导致用户无法正常登录, 检查途径是查看/var/log/secure 日志内容。

  1. 目录权限问题导致登录异常

这里我们提一种特殊情况:目录权限导致的无法登录问题。 在银河麒麟高级服务器操作系统 V10 SP1 的 0711 这个版本中, root 用户默认的 umask 被设置为 0077(大部分 Linux 的配置是0022),这是一个非常高安全的配置,但同时也为我们带来了使用问题,那就是创建出来的目录默认权限是 700。这个情况下我们在创建目录环节创建的目录实际都仅允许root 用户访问而拒绝其他用户访问,最终会导致用户登录失败。

  1. 目录属主问题导致登录异常
    这个问题与 ChrootDirectroy 这个参数有关,该参数要求目录的属主必须是 root 用户,否则日志会一直出现“bad ownership or modes for chroot directory”的报错信息。

(三)问题分析方法

对于本文中的各种问题分析,总结下来就是看日志。如何查 看日志?我们仅需要关注 OpenSSH 服务的日志内容即可,当中会展示为什么我们的服务无法正常启动,为什么我们的用户登录会 失败,什么时候我们的服务被重启过,什么时候什么用户登录到 了服务器中。
如何查看日志呢?非常简单,通过 journalctl -u sshd 即可查看
OpenSSH 服务日志内容。

  • 29
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a123560mh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值