【SFTP】多个用户SFTP设置不同权限

背景:之前搭建SFTP多用户都是同属一个用户组,所有用户都可以进行读写操作,需要将各个用户权限调整,遂度娘一波,没有明显匹配的文档,自己综合整理记录。

实现目的

如下图所示,用户组G1的用户可读写目录1,目录2,用户组G2的用户只能访问目录2
【SFTP】多个用户SFTP设置不同权限_第1张图片

新建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 114 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 114 10:34 shipin-data
drwxrwx---  6 sms  sftp 4096 113 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 [email protected]
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

你可能感兴趣的:(Linux基础,bash,开发语言)