首页 > 其他分享 >创建仅允许sftp文件传输的用户

创建仅允许sftp文件传输的用户

时间:2022-11-07 15:25:47浏览次数:65  
标签:sftpuser 创建 sudo 文件传输 sftp var SFTP

诉求

使用公网服务器进行数据交换,复用已有的ssh端口进行文件传输。
要求限制用户只能传文件无法范文shell也无法访问指定路径之外的目录。

实现

文件传输复用ssh端口很容易想到scp和sftp两种方式
考虑到scp可能要通过commandauthorized_keys中进行匹配,故该用支持更好的sftp方式。

创建用户

sudo adduser --shell /bin/false sftpuser 
sudo mkdir -p /var/sftp/files
sudo chown sftpuser:sftpuser /var/sftp/files
sudo chown root:root /var/sftp 
sudo chmod 755 /var/sftp 

限制权限

sudo vim /etc/ssh/sshd_config
# add content
Match User sftpuser
	ForceCommand internal-sftp
	PasswordAuthentication yes
	ChrootDirectory /var/sftp
	PermitTunnel no
	AllowAgentForwarding no
	AllowTcpForwarding no
	X11Forwarding no
# save and restart service
sudo systemctl restart ssh 

上传脚本

sftp默认使用shell方式进行交互,自动化脚本如下

#!/bin/bash

sftp -P <port> -i <path_to_private_key> sftpuser@<server_ip> <<EOF
cd files
put <my_file>
quit
EOF

# Best practice is to assign the sftp return code to a variable for further use, because
# ${?} is fleeting and only shows the condition code of the immediately preceding command

SFTP_RETURN_CODE=${?}

# If the return code is non-zero then the upload was not successful

if [[ 0 != ${SFTP_RETURN_CODE} ]]
   then
   echo "uploadfailed"
   exit ${SFTP_RETURN_CODE}
else
   echo "upload successed"
fi

exit 0

后记

如遇报错packet_write_wait: Connection to 127.0.0.1 port 22: Broken pipe
检查ChrootDirectory目录权限和owner是否配置正确

sudo chown root:root /var/sftp 
sudo chmod 755 /var/sftp

ChrootDirectory子目录可根据需要授予具体权限

sudo -R sftpuser:sftpuser /var/sftp/files

结合这篇文章利用find实现自动清理过期文件 - azureology - 博客园
可以实现服务器文件到期自动清

参考

linux - Limit SSH key to SCP only - Server Fault
How to Create SFTP Only User in Ubuntu 20.04 – TecAdmin
Upload files using SFTP or SCP commands - OCLC Support
sftp搭建後首次登陸packet_write_wait + Broken pipe + Connection closed問題原因 - 台部落

标签:sftpuser,创建,sudo,文件传输,sftp,var,SFTP
From: https://www.cnblogs.com/azureology/p/16865684.html

相关文章

  • python 虚拟机中的一般表达式-简单内建对象的创建
    对于一下代码i=1s='python'd={}l=[]解析编译后的pyc文件得到如下结果:从字节码查看consts名字空间与names名字空间,得到以下结果:在Python程序运行开始前,运......
  • android-创建无界面的服务运行在后台
    android-创建无界面的服务运行在后台RT,目标是新建一个服务运行在后台,但不能有界面具体步骤如下:1.新建一个无界面的Activity新建一个无界面的Activity,但是不给它s......
  • CentOS 7 创建自签名证书
    [root@ansiblecerts]#pwd/etc/pki/tls/certs[root@ansiblecerts]#lsca-bundle.crtca-bundle.trust.crtmake-dummy-certMakefilerenew-dummy-cert#取消m......
  • JAVA文件创建与查询
    java常用的文件操作1~文件的创建(三种不同方法):(1)根据路径构建一个File对象:newFile(Stringpathname)(2)根据父目录文件+子路径构建:newFile(Fileparent,Stringchild)(3)......
  • idea创建spring boot测试连接MySQL
    打开idea,左上角File>new>Project   或者   ......
  • redhat 安装 vsftp
    下载:vsftpd-2.0.5-10.e15.i386.rpmrpm -qa vsftpd  #查询是否已安装vsftpd服务,若没有安装。执行rpm -ivhvsftpd-vsftpd-2.2.2-6.el6.i6......
  • CentOS 7下mysql数据库定时备份创建定时任务
    1.创建定时任务脚本vi/usr/bin/bakeup_mysql.sh内容:#!/bin/bash#deleteoldbakeuprm-rf/data/mysql_bak/*backup_dir='/data/mysql_bak/'current_time=$(date+'%......
  • Git系列—创建项目并推送项目
    创建项目点击Createrepository新建项目 输入仓库名保存项目,默认选择公开库,可改为私有库 以上项目仓库就已经创建好了,接下来就是上传代码上传代码1、打开G......
  • 用Rust创建一个简单的webserver
    目的本节的例子教大家用Rust语言创建一个简单的webserver程序。webserver中涉及到的两个主要协议是超文本传输协议(HypertextTransferProtocol,HTTP)和传输控制协议(Tran......
  • java创建文件对象相关构造器和方法
     1、什么是文件?文件是我们保存数据的地方。2、文件流文件在程序中是以流的形式来操作的。流:数据在数据源(文件)和程序(内存)之间经历的路径输入流:数据从数据源(文件)......