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