Centos7搭建FTP服务
1、安装 vsftpd
[root@CentOS ftp]# yum -y install vsftpd
2、启动 vsftpd 服务
[root@CentOS ~]# systemctl start vsftpd.service # 启动 vsftpd 服务
[root@CentOS ~]# ps -ef | grep vsftpd # 查看 vsftpd 进程是否存在
root 3753 1 0 18:51 ? 00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root 3758 3494 0 18:51 pts/0 00:00:00 grep --color=auto vsftpd
3、关闭防火墙或者开放 21 端口
关闭防火墙:
[root@newserver]# systemctl stop firewalld.service
[root@newserver]# systemctl disable firewalld.service
开放21端口
[root@CentOS ~]# firewall-cmd --zone=public --add-port=21/tcp --permanent # 添加 21 端口
success
[root@CentOS ~]# firewall-cmd --reload # 重新载入
success
[root@CentOS ~]# firewall-cmd --zone=public --list-ports # 查看所有已开放的端口
21/tcp 3690/tcp 3306/tcp # 可以看到 21 端口已开放
[root@CentOS ~]#
4、关闭或配置 selinux
关闭selinux
[root@newserver]#vi /etc/selinux/config
SELINUX=disabled
保存并退出。
[root@newserver]# setenforce 0 回车
配置selinux
默认情况下,CentOS 的FTP 是不允许实体账号登录取得用户主目录数据的,这是因为 SELinux 的问题。
[root@CentOS ~]# getsebool -a | grep ftp # 查看有关 ftp 的 selinux 策略规则
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> off
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
tftp_home_dir --> off
[root@CentOS ~]# 执行上面命令,再返回的结果看到两行都是off,代表,没有开启外网的访问—执行下面命令
# setsebool -P allow_ftpd_full_access on
# setsebool -P tftp_home_dir on
5、建立 ftp 账户,并创建ftp目录授权
新建一个不能登录系统,而只能登录 ftp 服务的用户。
[root@CentOS ~]# useradd ftpuser -s /sbin/nologin # 添加用户 ftpuser
[root@CentOS ~]# passwd ftpuser #配置密码
[root@CentOS ~]# mkdir –p /home/ftpfile
[root@CentOS ~]# chown -R ftpuser.ftpuser /home/ftpfile/
6、配置 vsftpd.conf 端口默认使用21
vi /etc/vsftpd/vsftpd.conf
# 禁止匿名用户登录
anonymous_enable=NO
# 配置与实体用户相关的信息,可写入
# 只允许userlist_file文件中的用户可访问ftp
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
# ftp用户主目录
local_root=/home/ftpfile
8、将 ftpuser 用户添加到 /etc/vsftpd/user_list 文件中,添加ftpuser,#注释的用户无法登陆ftp(可不注释)
7、重启 vsftpd 服务,并设置开机自启
[root@CentOS ~]# systemctl restart vsftpd.service
[root@CentOS ~]# systemctl enable vsftpd.service
8、在服务器安装lftp运维工具,进行测试
yum -y install lftp
lftp username:password@127.0.0.1:21 回车
举例:lftp ftpuser:pan123456@127.0.0.1:21
Centos7 安装lftp,及使用教程
1、安装lftp
yum -y install lftp
登陆lftp代码:
lftp 用户名:密码@ftp地址:传送端口(默认21)
用法
(1)lftp username:password@127.0.0.1:21 回车
(2)lftp username@127.0.0.1 回车 ##默认21端口 回车后输入密码
(3)lftp 127.0.0.1 回车 ##回车后 login 登录
(4)lftp 回车 --> open 127.0.0.1 --> login 登录
2、lftp中文乱码问题
若登录后看到的都是中文乱码(因为一般本地都是utf-8的编码),怎么办呢,用 set 命令来解决
set ftp:charset gbk(或者 gb2312 或 utf-8) ##设置ftp端的编码格式
set file:charset utf-8 (...同上) ##设置本地编码格式
附:set命令的技巧 (1)输入set 查看已经设置好的命令 (2)set -a 查看所有可以设置的命令
3、查找ftp端文件
ls *.txt ##查找当前目录下的所有txt文件
ls ./123/ ##列出123目录下所有文件
find . -name "*.txt" ##递归查找站点上所有的txt文件
find ./xx -name "*.txt" ##查找xx目录下所有的txt文件
附1: ls第二次读取的是本地缓存,可以用 rels 代替 ls 或者catch off / catch on 来开关catch,catch flush清空本地catch
附2: 浏览本地目录的命令可用!ls, 如 !ls /usr/local/bin/
4、下载文件
下载文件之前要先设置好本地的目录,用来存放下载的文件
lcd /home/123/web ##设置本地存放目录 默认为 /home/usr
get 123.txt ##下载123.txt文件到 /home/123/web 中
get -c 123.txt ##断点续传下载
mget *.txt ##批量下载所有txt文件
mget -c *.txt ##断点续传
mget -c ./123/aaa/*.txt ##断点续传、批量下载ftp端aaa目录下的所有txt文件
pget -c -n 10 file.dat ##以最多10个线程以允许断点续传的方式下载file.dat
##可以通过设置 set pget:default-n 5 的值而使用默认值。
mirror aaa/ ##将aaa目录整个的下载下来,子目录也会自动复制 本地自动建立目录
5、上传文件
put 123.txt ##同下载
mput *.txt ##同下载
mirror -R aaa/ ##同下载
6、设置被动/非被动模式
set ftp:passive-mode 1 ## 1 被动 0非主动
多任务处理
ctrl+z ##将当前进行的任务移交后台处理
wait ##将后台处理任务调至前台查看
jobs ##查看后台进行的任务列表
kill all 或者 job_no ##删除所有任务 或 指定的任务
##将任务加入任务列表
queue get 123.txt
queue put 234.txt
queue mirror aaa/
queue ##查看任务列表
jobs ##查看后台任务列表
queue start ##开始任务列表
queue stop ##停止任务列表
其他命令
alias []
定义别名
alias less more
alias reconnect "close; cd ."
直接输入 alias 即可看到目前定义了那些别名。如果只输入 alias name 的话, 则是取消 name 这个别名。
bookmark SUBCMD
设定书签, 可将目前站台及所在目录设成书签, 下次可直接进来, 不用再 cd 来 cd 去的
bookmark add name 用来新增名称为 name 的书签
bookmark del name 删除名称为 name 的书签
bookmark list 显示目前有设定那些书签(另外直接打 bookmark 和 bookmark list 的结果一样)
bookmark edit 呼叫编辑器修改书签 (~/.lftp/bookmarks)
cd 切换远端目录
cache SUBCMD 管理 lftp 的 cache
rels [] 从 cache 中显示远端档案列表
rels 则不会从 cache 中读取
recls opts [path/]pattern 从 cache 中显示远端的档案列表, 应该算是 ls 的加强版, 有很多参数可用,应该是可用来产生各种不同>的档案列表以供其他程式使用。
recls 则不会从 cache 中读取
du options 计算远端整个目录占用容量
get OPTS -o 抓取远端档案
get rfile -o lfile
抓 rfile 到本地改名为 lfile
-c 为续传
-E 抓档完成后, 将远端的档案砍了
-a 为 ascii mode, 预设为 binary mode
-O 设定 base directory 为本地端放档案的目录
mget OPTS
下载远端档案(可用 wildcard expansion 也就是 *)
pget OPTS -o
使用多个连结来下载档案, 预设为五个。
-n 3 为叁个连结
jobs -v
显示目前有那些程序在背景执行
-v 显示详细的资讯(-v 可多加几个来显示更详细的资讯)
lcd
切换本地端的目录
mirror OPTS remote [local]
下载整个目录(楼上的 get 只能用来抓档案)
-c 续传
-e 这个要小心一些, 比较远端和本地端的档案, 假如远端没有的, 就将本地端的档案删除, 也就是将本地端和远端资料同步。
-R 上传整个目录
-n 只下载较新的档案
-r 不用递回到目录中
--parallel=n 同时下载 n 个档案(预设一次只下载一个)
module name args 载入模组
put OPTS -o 上传档案
mput OPTS 上传档案(可用 wildcard expansion 也就是 *)
mv 将远端的 file1 改名为 file2
mrm 用 wildcard expansion 方式来删除远端档案
open OPTS 开启某个站台
open -u , -p site
queue OPTS [] 将 cmd 放到伫列中等待执行
-d index 将编号为 index 的 job 删除
-m index new_index 将编号为 index 的 job 移至编号 new_index, 插队专用。
-n index 在编号 index 之前新增一个 job
wait [] 将背景执行中的程序移至前景(也可用 fg)
kill all| 删除全部的 jobs 或 job_no
repeat delay command 每隔 delay 秒, 重覆执行 command, 预设是每隔一秒
rm -r -f 移除远端档案
mkdir -p 建立远端目录
rmdir -f 移除远端目录
set OPT [] 设定变数
直接键入 set 可看目前定义了那些变数
source 读取 file, 并执行 file 中的命令(应该是和 bash 中的 source 命令是一样的吧)
debug [|off] -o 设定 debug level 为 level
-o 将输出导向至 file
exit [|bg] 结束 lftp
此时若还有 jobs, 则会将 lftp 放至背景执行, 继续未完成的工作
history -w file-r file-c|-l cnt 和 bash 中的 history 功能一样
renlist [] 只显示远端的档名
pwd -p 显示目前远端所在目录
-p 连登入密码也显示
scache []
只打 scache 显示目前所有的 session, 加上 session_no 可切换至其他的 session,
对於同时开启多个站台或同个站台不同目录间切换。
问题及解决办法
登陆报错530 Login incorrect. Login failed.
存在的原因可能为:
1、用户名密码不对
2、要登录的主机没有创建账户。
3.selinux问题
4. /etc/passwd 未添加/sbin/nologin