Linux配置SFTP用户的详细过程

0. 背景

Linux机器上已有路径/data/tomcat/apache-tomcat-8.5.96/webapps/webroot,需要在该路径之下配置一个目录对外暴露给业务人员使用。业务人员使用sftp协议上传文件。

下面是相关配置:

  • SFTP 用户名:iios

  • SFTP主目录:/data/tomcat/apache-tomcat-8.5.96/webapps/webroot/sftp

  • iios用户的sftp目录(用户根目录):/data/tomcat/apache-tomcat-8.5.96/webapps/webroot/sftp/iios

  • iios用户sftp上传目录:/data/tomcat/apache-tomcat-8.5.96/webapps/webroot/sftp/iios/upload

注意:下面的命令皆在root用户下操作完成

1. 创建sftp相关目录 && 生成 sftp用户

创建目录:
  • mkdir -p /data/tomcat/apache-tomcat-8.5.96/webapps/webroot/sftp/iios/upload

Q:为什么创建了 /sftp/iios/upload 三级目录呢?

A:当sftp的方式用户登录到用户根目录(/sftp/iios/)后,根目录是无法写入的。所以还需要在用户根目录下创建upload目录。详细解释在文章末尾

创建角色:
  • 创建用户组:groupadd sftp

  • useradd -g sftp -M -s /sbin/nologin iios

    • -g :指定用户组
    • -M :不要创建该用户的家目录
    • -s:指定该用户登录后使用的shell

有些文章/sbin/nologin 与 /bin/false 区别

  • 配置该用户密码:passwd iios

2. 修改sftp 配置文件

  • vi /etc/ssh/sshd_config

    # Subsystem     sftp    /usr/libexec/openssh/sftp-server   #注释掉此行并添加下列多行
    Subsystem sftp internal-sftp
    Match User iios                  
    ChrootDirectory /data/tomcat/apache-tomcat-8.5.96/webapps/webroot/sftp/iios      #chroot目录,按需自定义
    X11Forwarding no
    AllowTcpForwarding no
    ForceCommand internal-sftp
    

    注意:ChrootDirectory 目录不能直接配置到用户sftp上传目录,需要配置到上一级即用户根目录

  • 重启ssh服务:service sshd reload or systemctl restart sshd

3. 配置sftp目录权限

注意:ChrootDirectory 的权限设定有两个非常重要的规则

  • 从该目录开始上钻到系统根目录为止的目录的所有者有且仅是root
  • 从该目录开始上钻到系统根目录为止的目录都不能具有群组写入权限

如果你的目录层级较多,记得逐级检查!!!

按上述规则设置SFTP主目录与用户根目录的目录权限

  • chown root:root /data/tomcat/apache-tomcat-8.5.96/webapps/webroot/sftp/
  • chown root:root /data/tomcat/apache-tomcat-8.5.96/webapps/webroot/sftp/iios
  • chmod 755 /data/tomcat/apache-tomcat-8.5.96/webapps/webroot/sftp/
  • chmod 755 /data/tomcat/apache-tomcat-8.5.96/webapps/webroot/sftp/iios

将iios用户sftp上传目录(upload)的目录权限属主设置为 iios ,这样iios才可以上传文件

  • chown iios:sftp data/tomcat/apache-tomcat-8.5.96/webapps/webroot/sftp/iios/upload
  • chmod 755 /data/tomcat/apache-tomcat-8.5.96/webapps/webroot/sftp/iios/upload

4. 测试sftp

  • 终端中测试sftp 是否能登录: sftp iios@localhost …
  • 之后使用sftp工具上传文件

5. QA

  • Q1:为什么创建了 /sftp/iios/upload 三级目录?

  • A1 :1. sshd_config配置文件的ChrootDirectory 配置的路径属主必须是root且只有属主拥有写权限,即ChrootDirectory (…/sftp/iios)最大权限也只有755
    2. 即在iios的用户根目录中,iios用户没有写入权限
    3. 为了保证iios有写入权限,只能在用户根目录再创建一个子目录(/upload),由于该目录不受规则约束,所以可以自由设置权限例如777

  • Q2 : 为什么会有ChrootDirectory 的规则(属主和写入权限)?文档出处在哪里?

  • A2: 终端输入 man sshd_config, Description 下翻到 ChrootDirectory 条目:原文摘录如下

    ChrootDirectory
    Specifies the pathname of a directory to chroot(2) to after authentication. At session startup sshd(8) checks that all components of the pathname are root-owned directories which are not writable by any other user or group.
    After the chroot, sshd(8) changes the working directory to the user’s home directory. Arguments to ChrootDirectory accept the tokens described in the TOKENS section.

    翻译上文中:

    • sshd会将ChrootDirectory 配置的路径的所有目录检查是否是 root所有且其他用户或其他组没有写入权限
    • sshd会将ChrootDirectory 配置的路径之后作为用户的主目录

参考:
https://www.cnblogs.com/binarylei/p/9201975.html(https://blog.youkuaiyun.com/u011250186/article/details/139993858)
https://www.jb51.net/server/3224558md.htm (sftp基于ssh配置免密登录)

### 如何在 Linux 系统中配置 SFTP 服务 #### 准备工作 为了确保SFTP的安全性和功能性,在开始之前确认SSH服务已正确安装并运行。大多数Linux发行版默认情况下都带有OpenSSH软件包,该软件包包含了用于设置SFTP所需的一切工具[^3]。 #### 修改 SSH 配置文件 编辑`/etc/ssh/sshd_config` 文件来调整SSHD的行为以支持SFTP功能。对于仅允许特定用户通过SFTP访问的情况,可以在配置文件中加入如下行: ```bash Match User username ChrootDirectory /home/%u ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no ``` 上述命令中的 `username` 应替换为实际用户名;而 `/home/%u` 则指定了用户的根目录位置。这一步骤有助于增强安全性,防止越权操作[^4]。 #### 创建必要的目录结构 针对被限定使用的账户创建相应的家目录,并赋予恰当权限。例如,如果要限制某位名为example的用户,则执行以下指令: ```bash sudo mkdir -p /home/example/incoming sudo chown root:root /home/example sudo chmod 755 /home/example sudo chown example:example /home/example/incoming ``` 这里创建了一个子文件夹`incoming`供上传文件使用,同时保持顶级目录由管理员拥有,从而阻止普通用户修改其属性或删除它。 #### 重启 SSHD 使更改生效 完成以上所有改动之后,记得重启SSH守护进程以便应用新的设定: ```bash sudo systemctl restart sshd ``` 此时应该能够利用标准的SFTP客户端连接至目标机器上的指定账号,并享受经过加密保护的数据交换过程了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值