背景:之前搭建SFTP多用户都是同属一个用户组,所有用户都可以进行读写操作,需要将各个用户权限调整,遂度娘一波,没有明显匹配的文档,自己综合整理记录。
实现目的
如下图所示,用户组G1的用户可读写目录1,目录2,用户组G2的用户只能访问目录2
新建SFTP目录
mkdir -p /opt/mwdata/{smsdata,shipin-data}
[注意]
其中/opt/mwdata作为sftp的主目录,充当所有用户的家目录
新建SFTP用户,及用户家目录相关调整
新增用户组 sftp为组1 ,sftpvisitor为组2
groupadd sftp
groupadd sftpvisitor
组1新增用户sms
useradd -g sftp -s /bin/false -d /opt/mwdata/ sms
passwd sms
123456
组1新增用户rms
useradd -g sftp -s /bin/false -d /opt/mwdata/ rms
passwd rms
123456
组2新增用户shipin
useradd -g sftpvisitor -s /bin/false -d /opt/mwdata/ shipin
passwd shipin
123456
========================================================================
[附加]
因生产环境可能有很多用户,涉及到删除或者调整,附加相关命令
删除用户:
userdel [-r] [-f] 用户名
参数介绍
-r: 把用户的主目录一起删除(老许一不留神,-r把目录删了,结果里面数据都没了,所以要检查好,否则慎用!!!!!!)
-f: 强制删除用户,即使该用户已经登录到系统
修改用户家目录:
usermod -d [家目录] -u [uid] [username]
eg:
usermod -d /opt/mwdata/ -u 1003 user1
可以通过id [用户名]查看uid
[root@harbor01 mwdata]# id user1
uid=1003(user1) gid=1001(sftp) 组=1001(sftp)
配置sshd_config
vim /etc/ssh/sshd_config
Port 8018 #网上资料表示可以新增一个端口,用于sftp,我的环境并未加此参数,默认用ssh端口,也能正常使用,待研究!!!!!
注释掉#Subsystem sftp /usr/libexec/openssh/sftp-server
新增以下参数:
Subsystem sftp internal-sftp
Match Group sftp,sftpvisitor
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
[注意]
1、ChrootDirectory %h ,表示用户通过sftp登录后就把根目录切换到它自己的家目录
2、Match Group sftp,sftpvisitor 有可以新增Match User XXX,更细分
SFTP目录权限设置
[root@harbor01 opt]# ll -d /opt/mwdata/
drwxr-xr-x 8 root root 165 11月 4 09:48 /opt/mwdata/
[root@harbor01 opt]#
说明:用户的家目录属主必须是root,且权限最高755,新建目录默认就是这个权限,检查即可。
[root@harbor01 opt]#cd /opt/mwdata/
赋予子目录smsdata权限
[root@harbor01 mwdata]# chown sms:sftp smsdata/
[root@harbor01 mwdata]# chmod 770 smsdata/
赋予子目录shipin-data权限
[root@harbor01 mwdata]# chown shipin:sftp shipin-data/
[root@harbor01 mwdata]# chmod 570 shipin-data/
[root@harbor01 mwdata]# ll
dr-xrwx--- 2 shipin sftp 93 11月 4 10:34 shipin-data
drwxrwx--- 6 sms sftp 4096 11月 3 14:52 smsdata
[root@harbor01 mwdata]#
[注意]
1、注意目录的所属和权限设置;
2、如果再有新增用户访问特定目录,只需要两步,第一、将新用户新增至sftpvisitor用户组;第二、赋予要访问新目录权限
eg:
useradd -g sftpvisitor -s /bin/false -d /opt/mwdata/ user1
passwd user1
123456
chown user1:sftp /opt/mwdata/user1-data
chmod 570 /opt/mwdata/user1-data
测试验证
1、通过以下命令,用不同用户访问,亲自认证,正常可用。
sftp -oPort=8017 sms@192.168.124.86
2、客户端安装了lftp可以用以下命令测试验证
lftp -u sms,123456 sftp://192.168.124.86:8017
3、或者通过sftp传输工具等验证,如winscp等
补充
lftp下载限速
lftp -u laoxu,laoxu0 sftp://192.168.124.3:1617 -e "set net:timeout 300;set net:max-retries 3;set net:limit-rate 100000;get /edata/linux_TestV2.zip;quit"
# set net:timeout 300 设置超时时间300S
# set net:max-retries 3 设置重试次数 3次
# set net:limit-rate 100000 设置下载速度100kb/s
方法二:
修改/etc/lftp.conf
新增:
set net:limit-rate 500000:500000 #左边是上传,右边是下载
可以单独只配置下载
set net:limit-rate 500000
新增某用户单独访问单个目录
在sftp新建特定目录
Subsystem sftp internal-sftp
#优先匹配单用户
Match User HMNL
ChrootDirectory /opt/sftp/test
#再匹配用户组
Match Group sftp,sftpvisitor
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no