1.创建sftp组
groupadd sftp
2.创建测试账户
useradd -g sftp -s /bin/false testuser
3.修改密码,(需要输入两次新密码)
passwd testuser
4.创建目录
kdir /opt/sftp
cd /opt/sftp
mkdir testuser
5.修改测试账户HOME路径
usermod -d /opt/sftp/testuser testuser
6.配置sshd_config
vi /etc/ssh/sshd_config
注释掉
#Subsystem sftp /usr/libexec/openssh/sftp-server
文件最后添加
Subsystem sftp internal-sftp
Match Group sftp
ChrootDirectory /opt/sftp/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
- 为什么用 internal-sftp 而不用默认的 sftp-server,这是因为:
- 这是一个进程内的 sftp 服务,当用户 ChrootDirectory 的时候,将不请求任何文件, 更好的性能,不用为 sftp 再开一个进程。
- Match Group sftp-users这一行是指定以下的子行配置是匹配sftp-users用户组的,多个用户组用英文逗号分隔。
- ChrootDirectory %h该行指定Match Group行指定的用户组验证后用于chroot环境的路径,也就是默认的用户目录,比如/home/admin;也可以写明确路径,例如/data/www。
- ForceCommand internal-sftp该行强制执行内部sftp,并忽略任何~/.ssh/rc文件中的命令。
7.设定Chroot目录权限
chown root:sftp /opt/sftp/testuser
chmod 755 /opt/sftp/testuser
8.重启sshd服务
service sshd restart
9.创建文件目录
mkdir /opt/sftp/testuser/upload
chown testuser:sftp /opt/sftp/testuser/upload
chmod 755 /opt/sftp/testuser/upload
10.连接到sftp
sftp testuser@127.0.0.1
附加一些sftp常用命令:
1. sftp user@ip
你要用sftp, 当然得登录到sftp服务器啊, 在linux的shell中执行上面的命令后, linux shell会提示用户输入密码, 我们就输入password吧。 这样就成功建立了sftp连接。
2. help
建立连接后, linux shell中的$编程了sftp>, 这也对。 现在执行以下help, 可以看看sftp支持哪些命令。
3. pwd和lpwd
pwd是看远端服务器的目录, 即sftp服务器默认的当前目录。 lpwd是看linux本地目录。
4. ls和lls
ls是看sftp服务器下当前目录下的东东, lls是看linux当前目录下的东东。
5. cd和lcd
cd可以切换sftp的目录, lcd可以切换linux本地目录
6. put a.txt
这个是把linux当前目录下的a.txt文件上传到sftp服务器的当前目录下。
7. get b.txt
这个是把sftp服务器当前目录下的b.txt文件下载到linux当前目录下。
8. !command
这个是指在linux机器上执行command这个命令, 相当于lpwd lls lcd等命令, 比如!ls是列举linux当前目录下的东东, !rm a.txt是删除linux当前目录下的a.txt文件。
这个命令非常非常有用, 因为在sftp> 后输入命令, 默认值针对sftp服务器的, 所以执行rm a.txt删除的是sftp服务器上的a.txt文件, 而非本地的linux上的a.txt文件。
9. exit和quit
退出。
总之, 连接后, 有一个help命令, 足矣足矣。