使用SFTP搭建文件传输平台 | SFTP多用户指定目录

需求


  • 一、需要建立文件传输平台,使多个机构能够使用该平台进行文件传输
  • 二、机构之间文件内容相互独立,机构只允许访问当前机构的文件内容
  • 三、公司能够给所有机构目录下发及接收文件

思路


  • 一、使用SFTP进行文件传输
  • 二、每个机构单独配置用户及用户组,进行文件夹之间的权限划分
  • 三、配置特权用户组及用户,并添加其他机构权限组

实施


一、创建总账户,可以查看其他用户目录
groupadd manager_users
useradd -g manager_users -s /sbin/nologin -M manager
passwd manager
# 输入新密码
二、创建委外机构账户,仅可访问当前账户目录
#创建委外机构账户
groupadd visitor01_users
useradd -g visitor01_users -s /sbin/nologin -M visitor01

# 创建各用户目录
mkdir -p /home/sftppath/visitor01/{upload,download}

# 设置用户私人目录的所属人
chown -R visitor01:visitor01_users /home/sftppath/visitor01/*

# 设置其他非组成员不可访问(770)
chmod -R 770 /home/sftppath/visitor01/*

# 修改密码
passwd visitor01

# 将用户visitor01添加到上述用户组,以便可以访问其所有目录
usermod -a -G visitor01_users manager
三、修改sshd配置文件
# 注释/etc/ssh/sshd_config中的
Subsystem     sftp    /usr/libexec/openssh/sftp-server
# 使其如下
# Subsystem     sftp    /usr/libexec/openssh/sftp-server
# 并且在该行下添加(使用系统自带的 internal-sftp 来提供服务,配置后即可使用本地账户登录)
Subsystem       sftp    internal-sftp

# 可使用下面的命令快速替换
sed -i "s/Subsystem/#Subsystem/g" /etc/ssh/sshd_config
echo "Subsystem       sftp    internal-sftp" >> /etc/ssh/sshd_config
# 末尾添加
Match Group manager_users
        X11Forwarding no
        AllowTcpForwarding no
        ChrootDirectory /home/sftppath
        ForceCommand internal-sftp
Match Group visitor01_users
        X11Forwarding no
        AllowTcpForwarding no
        ChrootDirectory /home/sftppath/visitor01
        ForceCommand internal-sftp
# Match User或Group 用户或用户组
#        X11Forwarding no                  #禁止X11转发
#        AllowTcpForwarding no             #禁止tcp转发
#        ChrootDirectory /home/sftppath    #设置属于用户或用户组的访问根文件夹,用户在根路径下只有只读权限
#        ForceCommand internal-sftp        #强制使用系统自带的 internal-sftp 服务 这样用户只能使用ftp模式登录
# 重载sshd服务
systemctl reload sshd.service

shell脚本

# 创建账户,使用方法:将以下内容写入sh文件,然后带用户名、密码参数运行,例(create_user.sh visitor01 123456)
#!/bin/bash
username=$1
password=$2
username_users=$username"_users"
groupadd $username_users
useradd -g $username_users -s /sbin/nologin -M $username
mkdir -p /home/sftppath/$username/{upload,download}
chown -R $username:$username_users /home/sftppath/$username/*
chmod -R 770 /home/sftppath/$username/*
echo $username:$password | chpasswd
usermod -a -G $username_users manager
cat >>/etc/ssh/sshd_config<<EOF
Match Group $username_users
X11Forwarding no
AllowTcpForwarding no
ChrootDirectory /home/sftppath/$username
ForceCommand internal-sftp
EOF
systemctl reload sshd.service

# 删除账户,使用方法:将以下内容写入sh文件,然后带用户名参数运行,例(delete_user.sh visitor01)
#!/bin/bash
username=$1
username_users=$username"_users"
userdel -f $username
groupdel -f $username_users
sed -i "/$username_users/,+5 d" /etc/ssh/sshd_config
rm -rf /home/sftppath/$username
systemctl reload sshd.service
四、测试访问

manager访问结果

使用SFTP搭建文件传输平台 | SFTP多用户指定目录插图

visitor01访问结果

使用SFTP搭建文件传输平台 | SFTP多用户指定目录插图1
头像

作者:

所有评论 “使用SFTP搭建文件传输平台 | SFTP多用户指定目录”

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Demon_运维笔记