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

    shell 复制代码
    # 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/      #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上传目录的目录权限设置为 iios ,这样iios才可以上传文件

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

4. 测试sftp

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

5. QA

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

  • A1 :1. sshd_config配置文件的ChrootDirectory 配置的路径属主必须是root且只有属主拥有写权限,即ChrootDirectory (.../sftp/iios)最大权限也只有755

    1. 即在iios的用户根目录中,iios用户没有写入权限

    2. 为了保证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 配置的路径之后作为用户的主目录
相关推荐
上辈子杀猪这辈子学IT15 分钟前
【Zookeeper集群搭建】安装zookeeper、zookeeper集群配置、zookeeper启动与关闭、zookeeper的shell命令操作
linux·hadoop·zookeeper·centos·debian
minihuabei20 分钟前
linux centos 安装redis
linux·redis·centos
EasyCVR43 分钟前
萤石设备视频接入平台EasyCVR多品牌摄像机视频平台海康ehome平台(ISUP)接入EasyCVR不在线如何排查?
运维·服务器·网络·人工智能·ffmpeg·音视频
lldhsds1 小时前
书生大模型实战营第四期-入门岛-1. Linux前置基础
linux
wowocpp2 小时前
ubuntu 22.04 硬件配置 查看 显卡
linux·运维·ubuntu
山河君2 小时前
ubuntu使用DeepSpeech进行语音识别(包含交叉编译)
linux·ubuntu·语音识别
鹏大师运维2 小时前
【功能介绍】信创终端系统上各WPS版本的授权差异
linux·wps·授权·麒麟·国产操作系统·1024程序员节·统信uos
筱源源2 小时前
Elasticsearch-linux环境部署
linux·elasticsearch
萨格拉斯救世主2 小时前
jenkins使用slave节点进行node打包报错问题处理
运维·jenkins
川石课堂软件测试2 小时前
性能测试|docker容器下搭建JMeter+Grafana+Influxdb监控可视化平台
运维·javascript·深度学习·jmeter·docker·容器·grafana