linux 搭建SFTP服务器

2019-8-28 填坑(给被坑的读者道歉!!!)

参考:http://www.koukousky.com/server/linux/217.html
http://blog.csdn.net/zwl19920815/article/details/54893721
https://blog.zengrong.net/post/1616.html

在百度上看到一个回答:sftp 走的是ssh 协议 开启了sshd就相当于开启了sftp
个人使用的是阿里云的centos默认开启了ssh
一开始以为:创建一个用户组,再添加几个帐号,设置下权限就好了
然而,to young to simple 

 

需求: sftp管理员拥有独立的目录admin, sftp组员只能共享目录group

 

步骤:

1.创建一个名为 sftp 的组

groupadd sftp  

 

2.创建用户 sftp_admin sftp_tom

写法1:
useradd -g sftp -s /sbin/nologin -M sftp_admin
useradd -g sftp -s /sbin/nologin -M sftp_tom
写法2:
useradd -g sftp -s /bin/false  -M sftp_admin
useradd -g sftp -s /bin/false  -M sftp_tom

-g 加入到sftp组
-s 禁止使用命令
-M 不要自动建立用户的登入目录

两种写法的区别: Linux /sbin/nologin/bin/false的对比  https://blog.csdn.net/liupeifeng3514/article/details/79054550

 

3.设置密码

passwd  sftp_admin

重复输入两次密码(8位长度)

sftp_tom 也一样

 

4.创建sftp存放文件的目录(可自行调整目录位置)

mkdir -p /home/sftp/admin
mkdir -p /home/sftp/group/data

 

5.修改文件夹 拥有者

# 更改目录的 拥有者 和 组
chown -R sftp_admin:sftp /home/sftp/admin
chown -R sftp_admin:sftp /home/sftp/group/data

# 更改目录的 组员权限
chmod 775 -R  /home/sftp/group/data 

-R  如果/home/sftp/admin/路径下还有子文件,则全部修改掉

 

6.修改系统设置,用户登录后的 默认根目录

usermod -d /tmp test (test为你的用户名) 这种改法是无效的 
只能通过 修改配置文件

vi /etc/ssh/sshd_config

最底部的 配置文件内容

#Subsystem sftp /usr/libexec/openssh/sftp-server # 注释原有的服务
Subsystem sftp internal-sftp #用SSH的internal-sftp的好处 https://www.maixj.net/ict/internal-sftp-20597
X11Forwarding no
AllowTcpForwarding no
#ForceCommand internal-sftp      #不注释的话 会导致root不能ssh登录 

Match User sftp_admin            #sftp管理员用户
ChrootDirectory /home/sftp       #sftp管理员用户的根目录

Match Group sftp                 #sftp组用户
ChrootDirectory /home/sftp/group #sftp组用户的根目录

7.重启ssh服务

service sshd restart

目录结构

/home
--sftp( root:root ) 必须是root用户
----admin( sftp_admin:sftp ) admin用户专属目录
----gropu( root:root ) sftp组用户的共用根目录 只能在linux系统中添加目录,文件 如: 帮助手册.text
------data( sftp_admin:sftp )sftp组用户的共用目录: sftp_admin, sftp_tom都拥有读写权限

 

==================后续过程中,遇到的一些问题======================

修改了组写入权限报错
报错信息: bad ownership or modes for chroot directory "/home/sftp"

错误现象: 无法正常查看目录 

解决办法: /home/sftp 就是sfpt的根目录  这个目录的拥有者是必须 root
目录权限设置上要遵循2点:(需要格外注意)
ChrootDirectory设置的目录权限及其所有的上级文件夹权限,属主和属组必须是root
ChrootDirectory设置的目录权限及其所有的上级文件夹权限,只有属主能拥有写权限,也就是说权限最大设置只能是755
讲真,这一块坑了蛮久的

参考:http://blog.sina.com.cn/s/blog_4fd50c3901018a0l.html


使用ssh2访问出现报错
报错信息: This service allows sftp connections only.
错误现象: sftp_admin不能进行 ssh的连接登录(其实主要就是用于sftp, 不登录也是可以的)
解决办法: 这是因为在server端设置的/etc/sshd_config文件中,需要设置为: AllowTcpForwarding 应该设置为yes才可。 如果没  有设置为yes的话,用户就只能通过sftp访问指定目录,而且不能进行ssh登录. 只有把 AllowTcpForwarding no 改为                          AllowTcpForwarding yes ,用户才能通过ssh登录然后访问目录


FileZilla连接报错:
报错信息: Server unexpectedly closed network connection
错误现象: 无法连接到服务器, root账户, 不能进行ssh登录
解决办法: 这个是,因为配置文件  /etc/sshd_config中
ForceCommand internal-sftp 这一行没有注释, 被坑哭 (阿里云的linux系统 有网页版的shell命令)
参考: https://askubuntu.com/questions/553446/ssh-on-but-unable-to-connect-says-only-sftp
修改配置文件, 重启 ssh服务就好了

(待优化)
使用优化
需求描述:  sftp_admin 需要对 sftp_tom用户的保存文件,进行控制
现状描述:sftp中的组成员之间不能互相修改文件,每次都要手动去linux系统针对用户改权限,太麻烦了
解决办法:  用户创建文件夹的默认权限:通过umask值来设定
修改配置文件   /etc/pam.d/sshd
添加  session     optional pam_umask.so umask=0002
重启sshd服务

参考: UMASK介绍: http://blog.51cto.com/yttitan/1568662
SFTP chroot后如何设置umask: http://blog.51cto.com/yexiang/1609204

你可能感兴趣的:(Linux)