4

SFTP服务搭建与配置

 2 years ago
source link: https://blog.51cto.com/u_13236892/5608739
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

SFTP服务搭建与配置

精选 原创

哭泣的馒头 2022-08-22 16:09:18 博主文章分类:linux服务汇总 ©著作权

文章标签 服务器 文件权限 上传 文章分类 Linux 系统/运维 yyds干货盘点 阅读数180

sftp是Secure FileTransferProtocol的缩写,安全文件传送协议,可以为传输文件提供一种安全的加密方法。
(1)sftp 与 ftp 有着几乎一样的语法和功能
(2)SFTP 为 SSH的一部分,是一种传输文件至服务器的安全方式
(3)SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作
(4)SFTP安全性非常高
(5)SSH软件已经包含SFTP安全文件传输子系统

2、sftp与ftp区别

sftp和ftp是两种不同的文件传输协议,sftp是基于ssh协议的加密ftp传输协议,是作为SSH2的一个子服务工作的,
只要sshd服务器启动了它就可用。vsftpd是一款ftp服务器,支持ftp协议,不支持sftp协议。
基于对线上服务器的保密和安全,不希望开发人员直接登录线上服务器,因为登录服务器的权限太多难以管控,
如直接修改代码、系统配置等,希望能限制开发人员ssh登录机器,但是通过ftp/sftp上传代码文件。

1、关闭与开启

1、开启
只要ssh服务正常使用,sftp就可以使用
2、关闭
/etc/ssh/sshd_config
#Subsystem sftp /usr/lib/ssh/sftp-server #将这行注释掉,可能sftp-server的路径不同系统有所不同

2、sftp-server常用操作

默认就是开启sftp-server
登录命令
sftp -P 22 [email protected]
这样子上传的文件默认在sftpuser的家目录下面

参数查看
man

3、internal-sftp常用操作

关于sftp-server和internal-sftp的区别可以看附录
开启配置参数:
将配置放在UsePAM参数下面
(PAM 代表可插入身份验证模块(Pluggable Authentication Modules)。这些模块提供额外的身份验证规则,保护对计算机的访问。)

#将sftp-server给注释掉
#Subsystem sftp /usr/lib/ssh/sftp-server

#指定sftp服务使用系统自带的internal-sftp,不添加,用户无法通过sftp登录
Subsystem sftp internal-sftp

#限制只有sftpuser用户可登录sftp,如果设置了AllowUsers,也必须有sftpuser才行
#并且sftpuser用户失去了使用ssh登录的权限,只能通过sftp登录
#Match User user1,user2,user3,user4 #可以设置多个用户,之间以逗号分隔
#Match User !root #使用叹号取非过滤
Match User sftpuser
##限制只有sftpgroup用户组可以登录sftp
Match Group sftpgroup

#设置并限制sftp用户访问的根目录为/data
#ChrootDirectory设置的目录权限及其所有的上级文件夹权限,属主和属组必须是root;
#ChrootDirectory设置的目录权限及其所有的上级文件夹权限,只有属主能拥有写权限,也就是说权限最大设置只能是755。
需要在/data下面提前创建好属主为sftp用户的目录
ChrootDirectory /data

#强制执行这里指定的命令,而忽略客户端执行的任何命令
ForceCommand internal-sftp -l INFO -f AUTH

#是否允许进行 X11 转发
X11Forwarding no
#是否允许TCP转发
AllowTcpForwarding no

常用配置:
#Subsystem sftp /usr/lib/ssh/sftp-server
Subsystem sftp internal-sftp
Match User sftpuser
Match Group sftpgroup

sftp-server options can be specified with the "internal-sftp" command by separating the options with blank spaces
internal-sftp的参数可以使用sftp-server的参数

4、日志配置

1、修改ssh的配置
vi /etc/ssh/sshd_config
找到Subsystem开头的如下配置"-l INFO -f local5"
不同操作系统略有不同
例如:
Subsystem sftp /usr/lib/ssh/sftp-server
改成:
Subsystem sftp /usr/lib/ssh/sftp-server -l INFO -f local5
这个参数也改一下:
LogLevel INFO

2、修改rsyslog配置
vi /etc/rsyslog.conf
在最后增加如下配置
auth,authpriv.*,local5.* /var/log/sftp.log

3、重启服务
service rsyslog restart
service sshd restart

4、查看日志
tail -f /var/log/sftp.log
就可以查看sftp连接对本主机做了啥操作

internal-sftp配置和上面一样
ForceCommand internal-sftp -l INFO -f local5

5、文件权限控制

1、sftp-server
如果想控制上传到131的文件权限
在131机器sshd_config配置
a、基于PAM
/etc/ssh/sshd_config
UsePAM yes
/etc/pam.d/sshd
session optional pam_umask.so umask=0027
b、基于umask
Subsystem sftp /usr/lib/ssh/sftp-server -u 0027
上传到131的文件权限就是640
c、基于文件权限
Subsystem sftp /usr/lib/ssh/sftp-server -m 660
上传到131的文件权限就是660
如果同时设置了-u和-m,-u参数会失效

2、internal-sftp
操作几乎一致
ForceCommand internal-sftp -l INFO -f AUTH -u 0027
ForceCommand internal-sftp -l INFO -f AUTH -m 660

三、附录:sftp-server和internal-sftp的区别

sftp-server和internal-sftp都是OpenSSH的一部分。
sftp-server是一个独立的二进制文件, internal-sftp只是一个配置关键字,告诉sshd使用内置sshd的SFTP服务器代码,而不是运行另一
个进程(通常是sftp-server)。

从功能的角度来看,sftp-server和internal-sftp几乎完全相同。 它们是使用相同的源代码构建的。
internal-sftp的主要优点是,当与ChrootDirectory指令一起使用时,它不需要任何支持文件。

sshd_config(5)手册页:

对于Subsystem指令:
指定sftp-server实现SFTP文件传输子系统或者internal-sftp实现进程内SFTP服务,这可以简化使用ChrootDirectory强制配置以在客户
端上强制使用不同的文件系统root的配置。

对于ForceCommand指令:
指定internal-sftp命令将强制使用与ChrootDirectory一起使用时不需要支持文件的进程内SFTP服务。

对于ChrootDirectory指令:
ChrootDirectory必须包含支持用户会话所需的文件和目录。对于交互式会话,这至少需要一个shell(通常是sh)和基本/ dev节点,例如
null,zero,stdin,stdout,stderr和tty设备。对于使用SFTP的文件传输会话,如果使用进程内sftp服务器,则无需对环境进行其他配
置,但使用日志记录的会话可能需要在某些操作系统上的chroot目录中使用/dev /log(请参阅sftp-server以获取细节)。

internal-sftp的另一个优点是性能,因为没有必要为它运行新的子进程。
internal-sftp在很晚的时候被添加(2008年的OpenSSH 4.9p1?),而不是独立的sftp-server二进制文件,但它现在是默认的,我相信没
有理由将sftp-server用于新安装。

sshd在遇到sftp-server时可以自动使用internal-sftp,因为功能相同而且internal-sftp甚至具有上述优点,但是在一些情况下,存在
差异。
几个例子:
1.管理员可能依赖登录shell配置来阻止某些用户登录。切换到internal-sftp会绕过限制,因为不再涉及登录shell。
2.使用sftp-server二进制文件(作为一个独立的进程),你可以使用一些hacks,比如在sudo下运行SFTP。
3.对于SSH-1(如果有人仍在使用它),则根本不涉及Subsystem指令,使用SSH-1的SFTP客户端明确告知服务器,服务器应运行什么二进制
文件。 因此,传统的SSH-1 SFTP客户端具有硬编码的sftp服务器名称。
  • 1收藏
  • 评论
  • 分享
  • 举报

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK