一、配置sftp
1.创建sftp服务用户组,创建sftp服务根目录:
groupadd sftp
2.创建sftp服务用户:
useradd -g sftp -s /sbin/nologin -d /ftpuser ftpuser
-s /sbin/nologin
禁止用户通过命令行登录dsy
用户名-d
指定用户的登入目录 此处指定为/ftpuser是因为第六步中我们限制sftp登录用户的根目录为/home/sftp,所以实际用户登录后,最终指定目录为`/home/sftp/ftpuser
3.为sftp账户添加密码
passwd ftpuser
输入密码时不会明文显示
4.创建用户ftp文件目录
mkdir /home/sftp/ftpuser
5.修改文件夹拥有者
chown -R ftpuser:sftp /home/sftp/ftpuser
让ftpuser登录后对该目录有所有的权限,缺少这一步会出现sftp登录后无法写入文件的异常-R
递归修改子目录
6.配置sshd_config:
vim /etc/ssh/sshd_config
注释掉Subsystem sftp /usr/libexec/openssh/sftp-server再加上一行
#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
也就是在前面加上 #
在sshd_config最后加入下面这几行:
# 匹配用户组,如果要匹配多个组,多个组之间用逗号分割
Match Group sftp
# 限制ftpuser用户的根目录
ChrootDirectory /home/sftp
# 指定 sftp 命令
ForceCommand internal-sftp
面这段代码务必放在最后,因为必须要“UseDNS no”后面
不知道Vim编辑器如何使用的可以参考这篇博客:Linux目录结构及常用命令学习笔记
7.重启sshd:
systemctl restart sshd
8.测试:
sftp ftpuser@127.0.0.1
ip地址我直接写的本机,实际过程中请写正确的ip地址
目录的权限设定有两个需要注意的地方(默认情况下不需要去更改,除非你修改过/home或/home/sftp的权限)
1.ChrootDirectory指定的目录开始一直往上到系统根目录为止的目录拥有者都只能是root
2.由ChrootDirectory指定的目录开始一直往上到系统根目录为止都不可以具有群组写入权限
二、涉及更改常用命令
2.1 上传文件
sftp -oPort=23 <username>@<remote>
put /path/filename(本地主机) /path/filename(远端主机)
2.2 下载文件
sftp -oPort=23 <username>@<remote>
get /path/filename(远端主机) /path/filename(本地主机)
2.3 本地和远端操作命令区别
在sftp的环境下的操作就和一般ftp的操作类似了,ls,rm,mkdir,dir,pwd,等指令都是对远端进行操作,如果要对本地操作,只需在上述的指令上加‘l’变为:lls,lcd, lpwd等。
cat /etc/passwd 查看所有用户
userdel ftpuser 删除用户ftpuser
三、sftp常用命令
cd 路径 进入某路径
lcd 路径` 更改本地目录到某路径”
chgrp group a.txt 将文件a.txt的组更改为group
chmod 777 a.txt 将文件a.txt的权限更改为777
chown owner a.txt 将文件a.txt的属主更改为owner
exit 退出 sftp
quit 退出 sftp
get 远程路径 下载文件
ln existingpath linkpath 符号链接远程文件
ls [参数] [路径] 显示远程目录列表
lls [参数] [路径] 显示本地目录列表
mkdir 路径 创建远程目录
lmkdir 路径 创建本地目录
mv oldpath newpath 移动远程文件
put 本地路径 上传文件
pwd 显示远程工作目录
lpwd 打印本地工作目录
rmdir 路径 删除远程目录
lrmdir 路径 移除删除目录
rm 路径 删除远程文件
lrm 路径 删除本地文件