需求
- 一、需要建立文件传输平台,使多个机构能够使用该平台进行文件传输
- 二、机构之间文件内容相互独立,机构只允许访问当前机构的文件内容
- 三、公司能够给所有机构目录下发及接收文件
思路
- 一、使用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访问结果
visitor01访问结果



KOBIN says:
写的很棒!