15.1FTP介绍
- FTP多用于Windows传文件到linux
- rz sz在文件超过4G,就无法使用了——>安装包yum install -y install lrzsz
- rz把 window 上的文件传输到 linux 上
- sz 把 linux 上的文件传输到 window 上
- FTP是File Transfer Protocol(文件传输协议,简称文传协议)的英文简称,用于在Internet上控制文件的双向传输。
- FTP的主要作用就是让用户连接一个远程计算机(这些计算机上运行着FTP服务器程序),并查看远程计算机中的文件,然后把文件从远程计算机复制到本地计算机,或把本地计算机的文件传送到远程计算机。
- 小公司用的多,大企业不用FTP(多用自动化发布工具),因为不安全
15.2/15.3 使用vsftpd搭建ftp
-
centos上自带vsftpd
-
yum install -y vsftpd
-
useradd -s /sbin/nologin virftp
-
/sbin/nologin //指定用户的shell 代表用户不能登录系统
-
vim /etc/vsftpd/vsftpd_login //内容如下,奇数行为用户名,偶数行为密码,多个用户就写多行
testuser1aminglinux
- 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/testuser1anonymous_enable=NOwrite_enable=YESlocal_umask=022anon_upload_enable=NOanon_mkdir_write_enable=NOidle_session_timeout=600data_connection_timeout=120max_clients=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.sodb=/etc/vsftpd/vsftpd_loginaccount 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=YESguest_enable=YESguest_username=virftpvirtual_use_local_privs=YESuser_config_dir=/etc/vsftpd/vsftpd_user_confallow_writeable_chroot=YES
- systemctl start vsftpd //启动vsftpd服务
使用vsftpd搭建ftp
1.在centos上默认自带的ftp服务软件包叫做vsftpd,vsftpd软件包是可以使用系统级别的用户,(也就是假设创建了一个普通用户hanfeng,设置一个密码,这时候就可以用vsftpd启动这个服务,然后用hanfeng这个用户去登陆,登录的形式为ftp,登录进去后会进入到hanfeng这个用户的家目录下,但这样操作会存在安全隐患)
- 解决隐患的方法:给ftp设置一个虚拟用户,虚拟用户映射成系统中的一个普通用户(也可以映射多个虚拟用户),这个用户即使给了用户和密码你也是没有办法去通过ssh登录到服务器的机器,这样就相对安全了很多
2.安装vsftpd包——>yum install -y vsftpd
[root@xuexi-001 ~]# yum install -y vsftpd
3.在安装完成后创建一个普通用户,目的是为了让虚拟用户做一个映射的
- useradd -s /sbin/nologin virftp
- 用户名字可以随意取
- -s 指定它的shell
- /sbin/nologin 表示这个用户不能登录到系统,这么做是为了安全
[root@xuexi-001 ~]# useradd -s /sbin/nologin virftp
4.编辑 vim /etc/vsftpd/vsftpd_login 虚拟用户的密码文件,在密码文件中定义用户名和密码
- 文件格式为:奇数行为用户名,偶数行为密码,多个用户就写多行
[root@xuexi-001 ~]# vim /etc/vsftpd/vsftpd_login1,3行为用户名2,4行为密码testuser1111111user1222222保存退出
5.在编辑完密码文件,然后给 /etc/vsftpd/vsftpd_login 文件做一个 600的权限设置,为了确保密码文件的安全,防止所有的用户都可以读取
- chmod 600 /etc/vsftpd/vsftpd_login
[root@xuexi-001 ~]# chmod 600 /etc/vsftpd/vsftpd_login
6.将文本的密码文件转换为计算机识别的二进制文件
- db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db
[root@xuexi-001 ~]# db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db[root@xuexi-001 ~]# ls -l /etc/vsftpd/总用量 36-rw------- 1 root root 125 8月 3 2017 ftpusers-rw------- 1 root root 361 8月 3 2017 user_list-rw------- 1 root root 5030 8月 3 2017 vsftpd.conf-rwxr--r-- 1 root root 338 8月 3 2017 vsftpd_conf_migrate.sh-rw------- 1 root root 30 8月 6 22:11 vsftpd_login-rw-r--r-- 1 root root 12288 8月 6 22:12 vsftpd_login.db
- 在/etc/vsftpd/目录下,会看到生成了一个vsftpd_login.db文件,它和vsftpd_login文件相比只是多了一个 .db 的后缀
7.这个vsftpd_login.db密码是不能识别 cat命令 查看的,在上面的密码文件是可以自定义的
8.创建虚拟用户所在的配置文件目录,这个目录也是自定义的,也是需要在配置文件中定义
- mkdir /etc/vsftpd/vsftpd_user_conf
[root@xuexi-001 ~]# mkdir /etc/vsftpd/vsftpd_user_conf
9.切换到 /etc/vsftpd/vsftpd_user_conf 文件下 cd /etc/vsftpd/vsftpd_user_conf
[root@xuexi-001 ~]# cd /etc/vsftpd/vsftpd_user_conf/[root@xuexi-001 vsftpd_user_conf]#
10.创建第一个用户的配置文件,用户的配置文件名字有一点特殊性,需要和用户的名字保持一致,比如在密码配置文件中的用户为testuser1,那么定义的配置文件用户名称就为testuser1
配置文件内容local_root=/home/virftp/testuser1 //指定虚拟用户的家目录anonymous_enable=NO //是否允许匿名用户write_enable=YES //是否可写local_umask=022 //创建新文件目录的默认权限anon_upload_enable=NO //是否允许匿名用户上传anon_mkdir_write_enable=NO //是否允许匿名用户创建目录和写idle_session_timeout=600 //连接ftp超时时间(秒)data_connection_timeout=120 //数据传输的超时时间(秒)max_clients=10 //最多允许同时几个终端连接
- 最终如下
[root@xuexi-001 vsftpd_user_conf]# vim testuser1local_root=/home/virftp/testuser1anonymous_enable=NOwrite_enable=YESlocal_umask=022anon_upload_enable=NOanon_mkdir_write_enable=NOidle_session_timeout=600data_connection_timeout=120max_clients=10保存退出
11.创建虚拟用户的家目录
- mkdir /home/virftp/testuser1
[root@xuexi-001 vsftpd_user_conf]# mkdir /home/virftp/testuser1
12.新建一个文件,在登录的时候就可以看到这个文件了
- touch /home/virftp/testuser1/aming.txt
[root@xuexi-001 vsftpd_user_conf]# touch /home/virftp/testuser1/aming.txt
13.将权限做一个修改,因为最后映射成virftp 这个用户,若virftp这个用户没有读的权利那就是错误的,无法正常的去上传和下载
- chown -R virftp:virftp /home/virftp
[root@xuexi-001 vsftpd_user_conf]# chown -R virftp:virftp /home/virftp
14.定义密码文件的路径
- 将文件内容放入到/etc/pam.d/vsftpd ,文件在最前面加上
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_loginaccount sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
最终如下
[root@xuexi-001 vsftpd_user_conf]# vi /etc/pam.d/vsftpd #%PAM-1.0auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_loginaccount sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_loginsession optional pam_keyinit.so force revokeauth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeedauth required pam_shells.soauth include password-authaccount include password-authsession required pam_loginuid.sosession include password-auth保存退出
15./etc/pam.d/vsftpd,它是一个用来认证的文件,在登录FTP需要有一个认证的过程,认证的过程需要告诉它,通过什么样的形式去认证,认证的时候去哪里找这个密码库
- 在/etc/pam.d/vsftpd 添加的/lib64/security/pam_userdb.so,centos6中是为了区分版本,分32位和64位,一定要注意这个文件是存在的(lib64或lib32)
16.编辑 /etc/vsftpd/vsftpd.conf 主配置文件
[root@hf-01 vsftpd_user_conf]# 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=YESguest_enable=YESguest_username=virftpvirtual_use_local_privs=YESuser_config_dir=/etc/vsftpd/vsftpd_user_conf allow_writeable_chroot=YESchroot_local_user=YESguest_enable=YES //打开虚拟用户映射guest_username=virftp //映射的用户名virtual_use_local_privs=YES //告诉服务,我们现在用的虚拟用户user_config_dir=/etc/vsftpd/vsftpd_user_conf //定义虚拟用户配置文件所在路径allow_writeable_chroot=YES保存退出
增加的内容后面YES后面不能出现空格,不让会报错
17.更改完配置文件,去启动vsftpd服务,启动完并查看下进程和监听的端口
- systemctl start vsftpd //启动vsftpd服务
[root@hf-01 vsftpd_user_conf]# systemctl start vsftpd[root@hf-01 vsftpd_user_conf]# ps aux |grep vsftpdroot 3564 0.0 0.0 51136 564 ? Ss 06:49 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.confroot 3566 0.0 0.0 112676 984 pts/0 R+ 06:49 0:00 grep --color=auto vsftpd[root@hf-01 vsftpd_user_conf]# netstat -lntpActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1607/master tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:40904 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd tcp 0 0 0.0.0.0:20048 0.0.0.0:* LISTEN 1250/rpc.mountd tcp 0 0 0.0.0.0:37459 0.0.0.0:* LISTEN 1224/rpc.statd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1227/sshd tcp6 0 0 ::1:25 :::* LISTEN 1607/master tcp6 0 0 :::2049 :::* LISTEN - tcp6 0 0 :::41381 :::* LISTEN 1224/rpc.statd tcp6 0 0 :::35465 :::* LISTEN - tcp6 0 0 :::3306 :::* LISTEN 1643/mysqld tcp6 0 0 :::111 :::* LISTEN 1/systemd tcp6 0 0 :::20048 :::* LISTEN 1250/rpc.mountd tcp6 0 0 :::21 :::* LISTEN 3564/vsftpd tcp6 0 0 :::22 :::* LISTEN 1227/sshd [root@hf-01 vsftpd_user_conf]#
18.FTP监听的端口为21端口,22端口是sshd,23端口是telnet(现在telnet几乎没人使用了)
###测试FTP
- 最好在windows上安装一个FTP的客户端软件,filezilla client软件是FTP开源的、免费的可以搭建服务,同时还有一个客户端软件
1.vsftpd服务已经启动
2.这里为了方便测试,直接在linux上的FTP客户端,为lftp——>安装包yum install -y lftp
[root@hf-01 ~]# yum install -y lftp
3.安装完成之后,按如下输入方式,然后回车输入密码口令,用ls命令就可以查看到刚刚之前创建的文件,可见,已经连接成功
[root@hf-01 ~]# lftp testuser1@127.0.0.1口令: lftp testuser1@127.0.0.1:~> ls -rw-r--r-- 1 1002 1002 0 Jan 17 22:26 aming.txtlftp testuser1@127.0.0.1:/>
4.可以输入 ? 查看可以使用使用哪些命令
lftp testuser1@127.0.0.1:/> ? !(commands) alias [ [ ]] attach [PID] bookmark [SUBCMD] cache [SUBCMD] cat [-b] cd chmod [OPTS] mode file... close [-a] [re]cls [opts] [path/][pattern] debug [ |off] [-o ] du [options] exit [ |bg] get [OPTS]
[-o ] glob [OPTS] help [ ] history -w file|-r file|-c|-l [cnt] jobs [-v] [ ] kill all| lcd lftp [OPTS] ln [-s] ls [ ] mget [OPTS] mirror [OPTS] [remote [local]] mkdir [-p] module name [args] more mput [OPTS] mrm mv [re]nlist [ ] open [OPTS] pget [OPTS] [-o ] put [OPTS] [-o ] pwd [-p] queue [OPTS] [ ] quote repeat [OPTS] [delay] [command] rm [-r] [-f] rmdir [-f] scache [ ] set [OPT] [ [ ]] site source torrent [-O ] ... user [ ] wait [ ] zcat zmore lftp testuser1@127.0.0.1:/>
5.比如执行get aming.txt 命令,就会把aming.txt文件直接下载到当前目录
lftp testuser1@127.0.0.1:~> get aming.txtlftp testuser1@127.0.0.1:/>
6.输入quit 退出ftp
lftp testuser1@127.0.0.1:/> quit[root@hf-01 ~]#
7.在当前目录直接ls命令查看,会看到aming.txt文件就是刚刚下载下来的
[root@hf-01 ~]# ls111 1_sorft.txt 2.txt.bak amin bb.txt lll.sh123 1.txt 3.txt aming.txt grep sed1.cap 234 aa.txt anaconda-ks.cfg haha shell1_heard.txt 2.txt admin awk id.txt[root@hf-01 ~]#
8.查询在lftp中可执行的命令,常用命令:put、get xshell实现跟FTP的功能(两种方案) 第一种方案:
1.在xshell中新建一个会话属性,将名称随便填写,协议改成 sftp 协议,IP为本机的IP,端口还是22端口,因为走的还是ssh协议
2.然后打开,输入用户名和密码,默认是在root下
Type `help' to browse available commnands.sftp:/root> lsdr-xr-x--- 13 root root 4096 Jan 18 09:12 .dr-xr-xr-x 20 root root 282 Dec 14 21:06 ..-rw-r--r-- 1 root root 18 Dec 29 2013 .bash_logout-rw-r--r-- 1 root root 176 Dec 29 2013 .bash_profile-rw-r--r-- 1 root root 176 Dec 29 2013 .bashrc-rw-r--r-- 1 root root 100 Dec 29 2013 .cshrc-rw-r--r-- 1 root root 129 Dec 29 2013 .tcshrc-rw------- 1 root root 1422 Oct 19 07:00 anaconda-ks.cfgdrwx------ 2 root root 80 Oct 18 23:58 .ssh-rw------- 1 root root 29340 Jan 16 23:47 .bash_historydrwxr-xr-x 3 root root 110 Dec 5 21:23 111-rw-r--r-- 1 root root 184 Dec 9 17:54 123.txt-rw-r--r-- 1 root root 4461632 Dec 9 18:00 aaa.txt-rw-r--r-- 1 root root 4464640 Dec 9 18:04 aaa.txt.tardrwxr-xr-x 2 root root 58 Dec 10 21:11 aaaaa-rw-r--r-- 1 root root 10240 Dec 12 19:59 chamlinux.tar-rw-r--r-- 1 root root 20395803 Dec 15 15:04 mariadb-10.2.6-linux-glibc_214-x86_64.tar.gzdrwxr-xr-x 2 root root 6 Dec 16 00:09 apache-rw------- 1 root root 1024 Jan 8 23:30 .rnd-rw------- 1 root root 1978 Jan 16 01:15 .mysql_history-rw-r--r-- 1 root root 490 Nov 17 14:21 1.txt-rw------- 1 root root 8372 Jan 18 09:06 .viminfodrwxr-xr-x 3 root root 18 Jan 18 09:12 .config-rw-r--r-- 1 root root 31 Nov 17 14:42 2.txt-rwxrwxrwx 1 user1 test 231 Dec 9 17:49 a.txtdrwxrwxrwx 2 root user1 19 Dec 12 19:57 chamlinuxdrwxr-xr-x 3 root root 65 Nov 26 13:52 grepdrwxr-xr-x 2 root root 70 Nov 26 14:20 seddrwxr-xr-x 2 root root 35 Nov 22 22:07 awk-rw-r--r-- 1 root root 8638793 Oct 21 03:39 httpd-2.4.29.tar.gzdrwxr-xr-x 3 root root 19 Jan 18 09:12 .localdrwxr----- 3 root root 19 Nov 27 18:56 .pkisftp:/root> cd /tmp/sftp:/tmp> get php-fcgi.sock/sftp: cannot open /tmp/php-fcgi.sock/ to readsftp:/tmp> get user.sqlFetching /tmp/user.sql to user.sqlsftp: received 6.83 KB in 0.08 seconds
第二种方案
输入ctrl+cat+f
15.5 使用pure-ftpd搭建ftp服务
使用pure-ftpd搭建ftp服务目录概要
- 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
使用pure-ftpd搭建ftp服务
1.pure-ftpd 比vftpd更加的轻量,更加简单
2.首先需要安装pure-ftpd——>yum install -y pure-ftpd,但有时会提示pure-ftpd不存在,那是因为你缺少epel扩展源——>yum install -y epel-release
[root@xuexi-001 ~]# yum install -y pure-ftpd
3.安装完之后,更改 /etc/pure-ftpd/pure-ftpd.conf 配置文件,找到pureftpd.pdb这行,把行首的# 号 删除,目的是为了把密码配置文件要指定
[root@xuexi-001 ~]# vi /etc/pure-ftpd/pure-ftpd.conf搜索/pureftpd.pdb行首的 #号 删除PureDB /etc/pure-ftpd/pureftpd.pdb保存退出
4.因为pure-ftpd也属于ftp软件,也会监听21端口,所以需要先关闭之前vsftpd监听打开的21端口,否则就会报错
[root@xuexi-001 ~]# systemctl stop vsftpd
5.然后再启动pure-ftpd服务,并查看端口,查看pure-ftpd服务
- systemctl start pure-ftpd
[root@xuexi-001 ~]# systemctl start pure-ftpd[root@xuexi-001 ~]# netstat -lntpActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:38124 0.0.0.0:* LISTEN 952/rpc.statd tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 543/rpcbind tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1141/nginx: master tcp 0 0 0.0.0.0:20048 0.0.0.0:* LISTEN 956/rpc.mountd tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 2045/pure-ftpd (SER tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 940/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1189/master tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 1141/nginx: master tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:46056 0.0.0.0:* LISTEN - tcp6 0 0 :::111 :::* LISTEN 543/rpcbind tcp6 0 0 :::20048 :::* LISTEN 956/rpc.mountd tcp6 0 0 :::21 :::* LISTEN 2045/pure-ftpd (SER tcp6 0 0 :::38773 :::* LISTEN - tcp6 0 0 :::22 :::* LISTEN 940/sshd tcp6 0 0 ::1:25 :::* LISTEN 1189/master tcp6 0 0 :::2049 :::* LISTEN - tcp6 0 0 :::60356 :::* LISTEN 952/rpc.statd tcp6 0 0 :::3306 :::* LISTEN 1336/mysqld
6.创建测试目录,为了给pure-ftpd用户使用,再创建用户
[root@xuexi-001 ~]# mkdir /data/ftp[root@xuexi-001 ~]# useradd -u 1010 pure-ftp
7.把/data/ftp的属主和属组改成pure-ftp
[root@xuexi-001 ~]# chown -R pure-ftp:pure-ftp /data/ftp
8.用pure-pw useradd 命令创建一个用户
- pure-pw useradd [指定用户] -u [指定系统用户] -d [指定虚拟用户的家目录]
[root@xuexi-001 ~]# pure-pw useradd ftp_usera -u pure-ftp -d /data/ftpPassword: //密码为 111111Enter it again:
9.可以使用pure-pw --help查看该命令支持那些用法
10.命令pure-pw mkdb,是用来把密码生成系统,也就是pure-ftpd服务所识别的一种文件
- pure-pw mkdb //不执行这一步是无法登录的
[root@xuexi-001 ~]# pure-pw mkdb
pure-ftpd 建立虚拟用户数据
11.查看命令说明文件,命令pure-pw list/userdel/usermod/passwd 和pure-pw --help 命令一样的用户
测试pure-ftpd
1.先在/data/ftp/目录下创建一个文件
[root@xuexi-001 ~]# touch /data/ftp/123.txt
2.使用pure-ftpd
[root@xuexi-001 ~]# lftp ftp_usera@127.0.0.1口令: lftp ftp_usera@127.0.0.1:~>
3.可以查看到刚创建的123.txt文件,uid和gid为root
lftp ftp_usera@127.0.0.1:~> ls drwxr-xr-x 2 1010 pure-ftp 20 Jan 19 04:51 .drwxr-xr-x 2 1010 pure-ftp 20 Jan 19 04:51 ..-rw-r--r-- 1 0 0 0 Jan 19 04:51 123.txtlftp ftp_usera@127.0.0.1:/>
4.退出pure-ftpd,只需要输入 quit命令 即可
5.这时我们改变123.txt文件的属主和属组
[root@xuexi-001 ~]# chown -R pure-ftp:pure-ftp /data/ftp/123.txt
6.在登录pure-ftpd中去查看123.txt文件的属主和属组,会看到属主为uid,属组映射为系统中组的名字pure-ftpd
[root@xuexi-001 ~]# lftp ftp_usera@127.0.0.1口令: lftp ftp_usera@127.0.0.1:~> ls drwxr-xr-x 2 1010 pure-ftp 21 Aug 23 15:42 .drwxr-xr-x 2 1010 pure-ftp 21 Aug 23 15:42 ..-rw-r--r-- 1 1010 pure-ftp 0 Aug 23 15:42 123.txtlftp ftp_usera@127.0.0.1:/>