ftp服务器
安装与启动
安装 vsftpd:sudo apt install vsftpd -y
查看是否启动:sudo netstat -nltp | grep 21
手动启动:sudo systemctl start vsftpd.service
配置用户目录
新建用户主目录:sudo mkdir ~/uftp
登录欢迎文件:sudo touch ~/uftp/welcome.message
新建用户uftp:sudo useradd -d ~/uftp -s /bin/bash uftp
-d设置主目录,-s设置shell
用户设置密码:sudo passwd uftp
删除掉 pam.d 中 vsftpd:sudo rm /etc/pam.d/vsftpd
(该配置文件会导致使用用户名登录 ftp 失败)
权限和配置
限制用户 uftp 只能通过 FTP 访问服务器:sudo usermod -s /sbin/nologin uftp
修改 vsftpd 配置
增加写权限:sudo chmod a+w /etc/vsftpd.conf
修改配置文件:vim /etc/vsftpd.conf
:
- 限制用户对主目录以外目录访问
chroot_local_user=YES
- 指定一个 userlist 存放允许访问 ftp 的用户列表
userlist_deny=NO
userlist_enable=YES
- 记录允许访问 ftp 用户列表
userlist_file=/etc/vsftpd.user_list
- 不配置可能导致莫名的530问题
seccomp_sandbox=NO
- 允许文件上传
write_enable=YES
- 使用utf8编码
utf8_filesystem=YES
- 新建文件 /etc/vsftpd.user_list,用于存放允许访问 ftp 的用户:
sudo touch /etc/vsftpd.user_list
sudo chmod a+w /etc/vsftpd.user_list
- 修改 /etc/vsftpd.user_list ,加入刚刚创建的用户:
示例代码:/etc/vsftpd.user_list
uftp
设置访问权限
- 设置主目录访问权限(只读):
sudo chmod a-w ~/uftp
- 新建公共目录,并设置权限(读写):
sudo mkdir ~/uftp/public && sudo chmod 777 -R ~/uftp/public
- 重启vsftpd 服务:
sudo systemctl restart vsftpd.service
客户端 ftp 命令
登录
格式:ftp [hostname| ip-address]
a)在linux命令行下输入:ftp 10.18.34.115
b)服务器询问你用户名和口令,分别输入用户名和相应密码,待认证通过即可。
500 Illegal PORT command:用pass转化主被动模式
cd 进入public目录中才能操作
下载文件
+ get
格式:get [remote-file] [local-file]
将文件从远端主机中传送至本地主机中.
如要获取服务器上E:\rose\1.bmp,则
ftp> get /rose/1.bmp 1.bmp (回车)
+ mget
格式:mget [remote-files]
从远端主机接收一批文件至本地主机.
如要获取服务器上E:\rose\下的所有文件,则
ftp> cd /rose
ftp> mget . (回车)
注意:文件都下载到了linux主机的当前目录下。比如,在 /root/yint下运行的ftp命令,则文件都下载到了/root/yint下。
上传文件
- put
格式:put local-file [remote-file]
将本地一个文件传送至远端主机中.
如要把本地的1.bmp传送到远端主机E:\rose,并改名为333.bmp
ftp> put 1.bmp /rose/333.bmp (回车)
- mput
格式:mput local-files
将本地主机中一批文件传送至远端主机.
如要把本地当前目录下所有bmp文件上传到服务器E:\rose 下
ftp> cd /rose (回车)
ftp> mput *.bmp (回车)
注意:上传文件都来自于主机的当前目录下。比如,在 /root/yint下运行的ftp命令,则只有在/root/yint下的文件linux才会上传到服务器E:\rose 下。
断开连接
bye:中断与服务器的连接。
ftp> bye (回车)