基于SSH服务的SFTP应用

  1. 一、需求
  2. 二、方案
  3. 三、实施步骤
    1. 1、新建用做SFTP的用户
    2. 2、控制权限
    3. 3、修改sshd配置
    4. 4、重启sshd
    5. 5、使用mount挂载日志文件
    6. 6、验证
  4. 四、其他

一、需求

初创公司,资源和资金有限,无法搭建日志系统。

系统上线初期,开发人员需要经常查看生产日志来定位bug,且不能给予开发人员生产服务器的权限。

需要一个简单、安全、轻量级、不耗费资源的方法来满足查看日志的需求。

二、方案

经过调研,使用基于SSH服务的SFTP和Mount挂载本机目录的方法,可以满足需求。

此方法,可以进行严格的权限控制:只读、不能访问其他目录、不能登录服务器。

三、实施步骤

1、新建用做SFTP的用户

groupadd log_ro -g 2000
useradd log_ro -u 2000 -g 2000 -d /home/log_ro -s /sbin/nologin
  • 如果服务器是使用密码的登录的,就需要设置log_ro用户的密码passwd log_ro
  • 如果是使用密钥登录的,就要为log_ro做密钥登录的相关配置,和ssh登录一样
  • -s /sbin/nologin 控制其不能登录服务器

2、控制权限

对SFTP用户,做不能切换目录和只读的权限控制。

注意:只读是针对SFTP的home目录的,对于日志的只读权限,由日志本身的权限属性进行控制。

chown root:log_ro /home/log_ro
chmod 755 /home/log_ro

3、修改sshd配置

sed -i "s/Subsystem/#Subsystem/g" /etc/ssh/sshd_config
cat >> /etc/ssh/sshd_config << EOF

# sftp for read log    
Subsystem sftp internal-sftp
UsePAM yes
Match User log_ro
    ChrootDirectory /home/log_ro/
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no
EOF    

在配置文件中, User指定了sftp的用户,ChrootDirectory指定了sftp登录后的根目录。

注意:

  • 根目录本身所属必须是root,属组为sftp用户的属组,权限最小为755。意味着log_ro本身是不能在/home/log_ro中建立新文件、文件夹或者修改文件的。
  • 虽然ftp用户对于登录后的根目录没有写权限,但是我们可以用root新建一个文件夹,比如叫upload,然后把这个文件夹所属改为log_ro,这样ftp用户就对/home/log_ro/upload拥有完全的写权限了。上传文件不要放到根目录而是放到upload下面。

4、重启sshd

关掉Selinux:setenforce 0,重启sshd服务systemctl restart sshd

5、使用mount挂载日志文件

因为软连接在ftp中不能生效,又因为硬链接不能链接目录,所以采用mount挂载本机文件系统的方法实现软连接。

mkdir fps_logs
chown log_ro.log_ro fps_logs
mount --bind /data/app/fps/logs fps_logs

6、验证

使用ftp客户端来验证对于ftp用户权限的控制。

四、其他

最后介绍一下,如果不使用家目录作为sftp的根目录,使用其他目录的方法。

但是有一个原则还是要遵守,就是sftp所在的根目录,和其所有的上级目录,所属必须是root,不然就会碰到sftp连接马上被关闭的情况。

比如我们想要登录后的根目录为/data/haha/abc

/data/haha/abc 应该为root:zhongan 755

/data/haha/ 应该为root:root 755

/data 应该为root:root 755

如果想要上传文件,应该建立/data/haha/abc/upload文件夹,所属zhongan:zhongan , 755,然后上传文件的目标路径为/upload

然后修改/etc/ssh/sshd_config ,修改ChrootDirectory后面的目录为/data/haha/abc/


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 lxwno.1@163.com

×

喜欢就点赞,疼爱就打赏