15.0 FTP介绍
- FTP是File Transfer Protocol(文件传输协议,简称文传协议)的英文简称,用于在Internet上控制文件的双向传输。
- FTP的主要作用就是让用户连接一个远程计算机(这些计算机上运行着FTP服务器程序),并查看远程计算机中的文件,然后把文件从远程计算机复制到本地计算机,或把本地计算机的文件传送到远程计算机。
- 小公司用的多,大企业不用FTP,因为不安全
那既然不安全,为什么要用到ftp呢?
因为lrzsz有一定的限制,如:不能传输大于4G的文件。也有使用阿里云机器 我用一台机器跳到另一台机器,现在要用rzsz传数据 就会出问题!
解决方案:就是用ftp 查看ftp服务器上面的文件 并对服务器上面进行本地下载和上传;(大公司就会用git--版本管理工具 然后使用自动化工具发布平台发布)
15.2 使用vsftpd搭建ftp服务器
centos上自带vsftpd
yum install -y vsftpd
useradd -s /sbin/nologin virftp
vim /etc/vsftpd/vsftpd_login //内容如下,奇数行为用户名,偶数行为密码,多个用户就写多行
testuser1
aminglinux
chmod 600 /etc/vsftpd/vsftpd_login
db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db
mkdir /etc/vsftpd/vsftpd_user_conf
cd /etc/vsftpd/vsftpd_user_conf
vim testuser1 //加入如下内容
local_root=/home/virftp/testuser1 ##定义虚拟用户家目录
anonymous_enable=NO ##不允许匿名用户访问
write_enable=YES ##可写
local_umask=022 ##定义新文件和目录的umask值,和系统umask值一样;
anon_upload_enable=NO ##不允许匿名用户上传;
anon_mkdir_write_enable=NO ##不允许匿名用户可写
idle_session_timeout=600 ##超过600s需要重新登录
data_connection_timeout=120 ##数据传输超时时间120s
max_clients=10 ##最大连接客户端10
mkdir /home/virftp/testuser1
touch /home/virftp/testuser1/aming.txt
chown -R virftp:virftp /home/virftp
vim /etc/pam.d/vsftpd //在最前面加上
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
vim /etc/vsftpd/vsftpd.conf
将anonymous_enable=YES 改为 anonymous_enable=NO
将#anon_upload_enable=YES 改为 anon_upload_enable=NO
将#anon_mkdir_write_enable=YES 改为 anon_mkdir_write_enable=NO
再增加如下内容
chroot_local_user=YES
guest_enable=YES
guest_username=virftp
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/vsftpd_user_conf
allow_writeable_chroot=YES
systemctl start vsftpd //启动vsftpd服务
yum install -y lftp
lftp [email protected]
执行命令ls,看是否正常输出
若不正常查看日志/var/log/messages和/var/log/secure
windows下安装filezilla客户端软件,进行测试
1、安装vsftpd并创建用户
[root@Dasoncheng ~]# yum install -y vsftpd
[root@Dasoncheng ~]# ls /etc/vsftpd/
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh
[root@Dasoncheng ~]# useradd -s /sbin/nologin virftp
[root@Dasoncheng ~]# vim /etc/vsftpd/vsftpd_login
user1
p@ssw0rd
user2
123456
[root@Dasoncheng ~]# chmod 600 /etc/vsftpd/vsftpd_login
[root@Dasoncheng ~]# db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db
[root@Dasoncheng ~]# ls /etc/vsftpd/
ftpusers vsftpd.conf vsftpd_login
user_list vsftpd_conf_migrate.sh vsftpd_login.db
2、创建和用户对应的配置文件
[root@Dasoncheng ~]# mkdir /etc/vsftpd/vsftpd_user_conf
[root@Dasoncheng ~]# cd /etc/vsftpd/vsftpd_user_conf
[root@Dasoncheng vsftpd_user_conf]# vim user1
local_root=/home/virftp/user1
anonymous_enable=NO
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
idle_session_timeout=600
data_connection_timeout=120
max_clients=10
[root@Dasoncheng vsftpd_user_conf]# mkdir /home/virftp/user1
[root@Dasoncheng vsftpd_user_conf]# touch /home/virftp/user1/gecz.txt
[root@Dasoncheng vsftpd_user_conf]# chown -R virftp:virftp /home/virftp/
[root@Dasoncheng vsftpd_user_conf]# vim /etc/pam.d/vsftpd
[root@Dasoncheng vsftpd_user_conf]# head -3 /etc/pam.d/vsftpd
#%PAM-1.0
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login ##添加的这下面两行是验证的密码配置文件;
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
……
3、修改全局配置文件
配置文件里面不要有空格,我就在chroot那一行吃了亏;
[root@Dasoncheng ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO ##将YES改为NO
anon_upload_enable=NO ##将前面的#去掉,YES改为NO
anon_mkdir_write_enable=NO ##将前面的#去掉,YES改为NO
…… ##在尾部添加如下几行:
chroot_local_user=YES
guest_enable=YES ##开启映射
guest_username=virftp ##将虚拟用户映射到系统用户virftp
virtual_use_local_privs=YES ##使用ftp虚拟用户
user_config_dir=/etc/vsftpd/vsftpd_user_conf ##定义虚拟用户配置文件目录;
allow_writeable_chroot=YES
[root@Dasoncheng ~]# systemctl start vsftpd
[root@Dasoncheng ~]# ps aux |grep vsftp
root 41052 0.0 0.0 53216 576 ? Ss 14:31 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root 41058 0.0 0.0 112664 968 pts/1 S+ 14:34 0:00 grep --color=auto vsftp
[root@Dasoncheng ~]# netstat -lntp |grep ftp
tcp6 0 0 :::21 :::* LISTEN 41052/vsftpd
[root@Dasoncheng ~]# lftp [email protected]
Password:
lftp [email protected]:/> ? ##列出当前可使用的命令
!<shell-command> (commands)
alias [<name> [<value>]] attach [PID]
bookmark [SUBCMD] cache [SUBCMD]
……
……
lftp [email protected]:~> ls ##这个就是我之前创建的文件
-rw-r--r-- 1 1003 1003 0 Feb 26 06:41 gecz.txt
lftp [email protected]:/> get gecz.txt ##get下载,默认是当前目录
lftp [email protected]:/> quit
[root@Dasoncheng ~]# ls
1.txt anaconda-ks.cfg ccc logs wordpress-4.9.4-zh_CN.tar.gz
aaa bbb gecz.txt wordpress
15.3 Xshell连接ftp的两种方式:
xshell连接ftp的协议是ssh,不需要安装ftp服务器 也和21端口没啥关系!
法一(SFTP):
- 设置xshell
- 默认本地目录:
- 这里配置本地目录:
法二(XFTP)--推荐:
- 安装xftp软件:
- xshell连接状态按ctrl+alt+f
- 出现这个界面;(双击或者拖动传输文件!)
15.4 使用pure-ftpd搭建ftp服务
之所以用这个pure-ftpd搭建:主要是因为其轻便,简单(给客户,或小伙伴搭建首选);
yum install -y epel-release
yum install -y pure-ftpd
vim /etc/pure-ftpd/pure-ftpd.conf//找到pureftpd.pdb这行,把行首的#删除
systemctl stop vsftpd
systemctl start pure-ftpd
mkdir /data/ftp
useradd -u 1010 pure-ftp
chown -R pure-ftp:pure-ftp /data/ftp
pure-pw useradd ftp_usera -u pure-ftp -d /data/ftp
pure-pw mkdb
pure-pw list/userdel/usermod/passwd
1、安装pure-ftpd
[root@DasonCheng ~]# yun install -y epel-release ^C //这里我已经安装过了;
[root@DasonCheng ~]# yum install -y pure-ftpd
2、配置pure-ftpd
[root@DasonCheng ~]# vim /etc/pure-ftpd/pure-ftpd.conf
PureDB /etc/pure-ftpd/pureftpd.pdb //去掉前面的#号,使其生效 指定其密码配置文件;
3、启动pure-ftpd服务
[root@DasonCheng ~]# ps aux|grep ftp
root 28769 0.0 0.0 52708 696 ? Ss 08:31 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root 29489 0.0 0.0 112664 972 pts/1 S+ 10:41 0:00 grep --color=auto ftp
[root@DasonCheng ~]# systemctl stop vsftpd // 因为vsftp和pure-ftp使用的都是21端口,所以关闭vsftpd;
[root@DasonCheng ~]# systemctl start pure-ftpd
[root@DasonCheng ~]# ps aux|grep pure-ftp
root 29506 0.0 0.1 201916 1192 ? Ss 10:42 0:00 pure-ftpd (SERVER)
4、测试:
[root@Dasoncheng ~]# mkdir /data/ftp
[root@Dasoncheng ~]# useradd -u 1010 pure-ftp
[root@Dasoncheng ~]# chown -R pure-ftp:pure-ftp /data/ftp/
[root@Dasoncheng ~]# pure-pw useradd ftp_usera -u pure-ftp -d /data/ftp
Password:
Enter it again:
[root@Dasoncheng ~]# pure-pw --help ^C
[root@Dasoncheng ~]# pure-pw mkdb
[root@Dasoncheng ~]# pure-pw list /userdel/usermod/passwd
ftp_usera /data/ftp/./
[root@Dasoncheng ~]# touch /data/ftp/123.txt
[root@Dasoncheng ~]# lftp [email protected]
Password:
lftp [email protected]:~> ls
drwxr-xr-x 2 1010 pure-ftp 21 Feb 26 16:07 .
drwxr-xr-x 2 1010 pure-ftp 21 Feb 26 16:07 ..
-rw-r--r-- 1 1010 pure-ftp 0 Feb 26 16:07 123.txt
[root@Dasoncheng ~]# touch /data/ftp/456.txt
[root@Dasoncheng ~]# lftp [email protected]
Password:
lftp [email protected]:~> ls
drwxr-xr-x 2 1010 pure-ftp 36 Feb 26 16:14 .
drwxr-xr-x 2 1010 pure-ftp 36 Feb 26 16:14 ..
-rw-r--r-- 1 1010 pure-ftp 0 Feb 26 16:07 123.txt
-rw-r--r-- 1 0 0 0 Feb 26 16:14 456.txt
lftp [email protected]:/> quit
[root@Dasoncheng ~]# chown pure-ftp:pure-ftp /data/ftp/456.txt
[root@Dasoncheng ~]# lftp [email protected]
Password:
lftp [email protected]:~> ls
drwxr-xr-x 2 1010 pure-ftp 36 Feb 26 16:14 .
drwxr-xr-x 2 1010 pure-ftp 36 Feb 26 16:14 ..
-rw-r--r-- 1 1010 pure-ftp 0 Feb 26 16:07 123.txt
-rw-r--r-- 1 1010 pure-ftp 0 Feb 26 16:14 456.txt ##文件属主为uid,属组为pure-ftp 这是pure-ftpd的一个特性!