1)ftp通常分为两种模式,PORTFTP和PASVFTP 2)这两种FTP在创建控制链接时操做是同样的,都是由客户端首先和FTP服务器的控制端口(默认值为21)创建控制连接,并经过此链接进行传输操做指令。它们的区别在于使用数据传输端口(ftp-data)的方式。 3)PORTFTP模式下由FTP服务器指定数据传输所使用的端口,默认值为20。 4)PASVFTP模式下由FTP客户端决定数据传输的端口。PASVFTP这种作法,主要是考虑到存在防火墙的环境下,由客户端与服务器进行沟通(客户端向服务器发出数据传输请求中包含了数据传输端口),决定二者之间的数据传输端口更为方便一些。
默认安装完 vsftpd 服务,启动后就是匿名方式的ftp服务器,使用 ftp 127.0.0.1 便可登陆查看指定的目录文件, 注意:这种方式不是很安全,通常在要求临时快速提供跨平台文件共享时会使用
容许 linux 系统用户使用 ftp 服务访问该用户的宿主目录或者指定的系统目录 用途:通常用于我的搭建的自用 ftp 服务器,配置简单,便于管理(用户少) 优势:配置简单 缺点:若是须要提供大量用户的受权访问,不推荐使用,用户管理不方便
原理:独立的维护一个虚拟用户列表,能够建立不一样的虚拟用户映射到同一个系统用户上进行受权管理,以这个系统用户的进行文件共享访问以及受权管理 优势:适用于大量用户的受权访问,好比公司内部文件共享,较为安全且经常使用 缺点:配置较为复杂
uname -a cat /etc/redhat-release yum update -y
yum install vsftpd ftp -y which vsftpd
useradd -d /data/ftpdata/ -s /sbin/nologin ftpvuser chmod 755 /data/ftpdata/ chown -R ftpvuser.ftpvuser /data/ftpdata/ ls -lhd /data/ftpdata/
systemctl start vsftpd systemctl status vsftpd systemctl enable vsftpd netstat -anptl|grep vsftpd
[root@srv05-CT75 vsftpd]# tail -1 /etc/passwd ftpvuser:x:1000:1000::/data/ftpdata/:/sbin/nologin [root@srv05-CT75 ~]# systemctl start vsftpd [root@srv05-CT75 ~]# systemctl status vsftpd ● vsftpd.service - Vsftpd ftp daemon Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled) Active: active (running) since Tue 2019-06-18 01:00:50 CST; 24h ago Main PID: 7649 (vsftpd) CGroup: /system.slice/vsftpd.service └─7649 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf Jun 18 01:00:50 srv05-CT75.zhaoshuai.com systemd[1]: Stopped Vsftpd ftp daemon. Jun 18 01:00:50 srv05-CT75.zhaoshuai.com systemd[1]: Starting Vsftpd ftp daemon... Jun 18 01:00:50 srv05-CT75.zhaoshuai.com systemd[1]: Started Vsftpd ftp daemon. [root@srv05-CT75 ~]# netstat -anptl|grep vsftpd tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 7649/vsftpd [root@srv05-CT75 ~]# systemctl enable vsftpd Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
vim /etc/logrotate.d/vsftpd -------------------------------- /var/log/vsftpd.log { # ftpd doesn't handle SIGHUP properly nocompress missingok } /var/log/xferlog { # ftpd doesn't handle SIGHUP properly nocompress missingok } -------------------------------- tail -f /var/log/xferlog
1)能够直接输入"IP:PORT",能够打开ftp服务器 2)容许匿名用户登陆,宿主目录为/var/ftp,不能离开,下载目录为/var/ftp/pub,且只能下载,不能上传 3)容许本地用户登陆,且可离开主目录,本地用户容许上传/下载 4)写在文件/etc/vsftpd/ftpusers中的本地用户禁止登陆 5)服务器使用独占方式启动,且无限制链接数
[root@srv05-CT75 vsftpd]# ftp 127.0.0.1 Connected to 127.0.0.1 (127.0.0.1). 220 (vsFTPd 3.0.2) Name (127.0.0.1:root): anonymous # 输入匿名用户的用户名 331 Please specify the password. # 提示输入密码 Password: # 空密码 230 Login successful. # 提示登陆成功 Remote system type is UNIX. Using binary mode to transfer files. # 提示使用二进制传输数据 ftp> ls # 查看文件列表,宿主目录为 /var/ftp 227 Entering Passive Mode (127,0,0,1,168,57). 150 Here comes the directory listing. drwxr-xr-x 2 0 0 4096 Oct 30 2018 pub # 默认有个 pub 目录 226 Directory send OK. ftp> ls pub # pub目录为空 227 Entering Passive Mode (127,0,0,1,102,108). 150 Here comes the directory listing. 226 Directory send OK. ftp> cd pub # 切换目录 250 Directory successfully changed. # 提示目录切换成功 ftp> ls # 列表查看,空目录 227 Entering Passive Mode (127,0,0,1,153,121). 150 Here comes the directory listing. 226 Directory send OK. ftp> cd .. 250 Directory successfully changed. ftp> ls # 我这里手动建立了 aaa 目录和 bbb 文件 227 Entering Passive Mode (127,0,0,1,212,127). 150 Here comes the directory listing. drwxr-xr-x 2 0 0 4096 Jun 18 17:56 aaa -rw-r--r-- 1 0 0 0 Jun 18 17:57 bbb drwxr-xr-x 2 0 0 4096 Oct 30 2018 pub 226 Directory send OK. ftp> ftp> help # help 能够查看可使用的命令 Commands may be abbreviated. Commands are: ! debug mdir sendport site $ dir mget put size account disconnect mkdir pwd status append exit mls quit struct ascii form mode quote system bell get modtime recv sunique binary glob mput reget tenex bye hash newer rstatus tick case help nmap rhelp trace cd idle nlist rename type cdup image ntrans reset user chmod lcd open restart umask close ls prompt rmdir verbose cr macdef passive runique ? delete mdelete proxy send ftp> exit 421 Timeout.
vim /etc/vsftpd/vsftpd.conf ------------------------------- anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 chroot_local_user=YES userlist_enable=YES userlist_deny=NO userlist_file=/etc/vsftpd/user_list pam_service_name=vsftpd tcp_wrappers= YES ------------------------------- systemctl restart vsftpd systemctl status vsftpd
anonymous_enable=NO # 修改,禁止匿名用户登陆 local_enable=YES # 默认启用,容许本地用户登陆,虚拟用户须要映射到本地用户才可使用 write_enable=YES # 默认启用,本地用户开放写权限 #local_umask=022 # 注释掉,本地用户建立的文件的权限反码022,建立的文件为644 chroot_local_user=YES # 默认启用,将本地用户锁定在本身的家目录中 userlist_enable=YES # 是否启用用户控制列表,默认启用 userlist_deny=NO # 指定用户控制列表的做用,默认为 YES,表示该文件内的用户列表禁止登陆FTP服务器,这里修改成 NO,做为受权访问的用户列表使用 userlist_file=/etc/vsftpd/user_list # 指定用户控制列表的文件名 anon_umask=022 # 增长,匿名用户新增文件的umask数值。默认值为077,须要修改成022,不然上传后的文件为600 dirmessage_enable=YES # 设置切换到目录时显 示message 隐含文件的内容 xferlog_enable= YES # 激活上传和下载日志 connect_from_port_20= YES # 启用FTP数据端口链接 pam_service_name=vsftpd # 设置PAM认证服务的配置文件名称, 该文件存放在/etc/pam.d目录下 listen= YES # 是否使用独占启动方式 tcp_wrappers= YES # 使用防火墙 #file_open_mode=0755 pasv_min_port=50000 # 被动模式下的最小端口 pasv_max_port=60000 # 被动模式下的最大端口 # 设置链接服务器后的欢迎信息 ftpd_banner=welcome to ftp service. banner_file=/etc/vsftpd/vsftpd_banner_file
userlist_deny=NO ,这里设置为NO,作为容许登录的用户列表,能够手动指定容许登陆 ftp 的用户,比较实用,若是设置为YES,做为禁止登陆 ftp 的用户列表,与 ftpusers 功能重复,没有必要
/etc/vsftpd/vsftpd.conf # 主配置文件 /etc/vsftpd/ftpusers # FTP限制访问的用户,里面是一些系统用户,默认不容许访问,防止被入侵,通常不须要修改 /etc/vsftpd/user_list # 受权用户列表,能够控制哪些用户能够访问或者禁止访问,我通常配置为容许访问 ftp 的用户列表
1)vsftpd.conf 文件中每一个选项设置为一行,格式为“option=value”,“=”号两边不能留空白符
useradd zhaoshuai passwd zhaoshuai
[root@srv05-CT75 vsftpd]# touch /home/zhaoshuai/aaa.txt [root@srv05-CT75 vsftpd]# mkdir -p /home/zhaoshuai/bbb [root@srv05-CT75 vsftpd]# ll /home/zhaoshuai/ total 4 -rw-r--r-- 1 root root 0 Jun 19 02:18 aaa.txt drwxr-xr-x 2 root root 4096 Jun 19 02:18 bbb
vim /etc/vsftpd/ftpusers ------------------------------- root bin daemon adm lp sync shutdown halt mail news uucp operator games nobody -------------------------------
vim /etc/vsftpd/user_list ------------------------------- zhaoshuai -------------------------------
ftp 127.0.0.1
[root@srv05-CT75 pam.d]# ftp 127.0.0.1 Connected to 127.0.0.1 (127.0.0.1). 220 (vsFTPd 3.0.2) Name (127.0.0.1:root): zhaoshuai 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> ftp> ftp> ls 227 Entering Passive Mode (127,0,0,1,94,91). 150 Here comes the directory listing. -rw-r--r-- 1 0 0 0 Jun 18 18:18 aaa.txt drwxr-xr-x 2 0 0 4096 Jun 18 18:18 bbb 226 Directory send OK. ftp> exit 221 Goodbye.
cd /etc/vsftpd/ vim vsftpd.conf ---------------------------------------- anonymous_enable=NO local_enable=YES write_enable=YES #local_umask=022 chroot_local_user=YES userlist_enable=YES userlist_deny=NO userlist_file=/etc/vsftpd/user_list chroot_local_user=YES # made for virtual user guest_enable=YES guest_username=ftpvuser pam_service_name=/etc/pam.d/ftpvuser.pam user_config_dir=/etc/vsftpd/vuser.d anon_umask=022 ------------------------------------- systemctl restart vsftpd systemctl status vsftpd
guest_enable=YES # 增长,启用虚拟用户模式 guest_username=ftpvuser # 增长,配置虚拟用户映射到的本地用户名 pam_service_name=/etc/pam.d/ftpvuser.pam # 修改,配置虚拟用户的认证方式 user_config_dir=/etc/vsftpd/vuser.d # 增长,虚拟用户的配置文件目录
1)除了主配置文件外,还能够给特定用户设定我的配置文件 2)虚拟用户默承认以读写,访问时映射为本地用户,因此须要启用对本地用户的控制 3)实际的访问权限可由用户独立的配置文件进行单独控制
mkdir -p /etc/vsftpd/vuser.d cd /etc/vsftpd/vuser.d touch vuser.list
# 使用 db_load 工具生成加密文件 yum install db4-utils -y db_load -T -t hash -f vuser.list vuser.db file vuser.list file vuser.db # 为了安全,修改虚拟用户文件的访问权限 chmod 600 /etc/vsftpd/vuser.* ll /etc/vsftpd/vuser.*
cd /etc/pam.d/ mv vsftpd vsftpd.ori # 备份原有的ftp的pam认证文件 vim ftpvuser.pam # 建立新的ftp虚拟用户认证文件 ----------------------------------- #%PAM-1.0 auth required pam_userdb.so db=/etc/vsftpd/vuser.d/vuser account required pam_userdb.so db=/etc/vsftpd/vuser.d/vuser -----------------------------------
mkdir -p /data/ftpdata/zhaoshuai touch /data/ftpdata/zhaoshuai/ccc.txt # 建立测试文件 mkdir -p /data/ftpdata/zhaoshuai/ddd chown -R ftpvuser.ftpvuser /data/ftpdata chmod 755 /data/ftpdata/ ls -lhd /data/ftpdata/ ls -lh /data/ftpdata/
vim /etc/vsftpd/user_list --------------------- zhaoshuai ----------------------
1)注释掉其余本地用户认证的内容,由于启用了 guest_enable 后,本地用户将失效,全部非匿名用户变成虚拟用户 2)由于须要受权访问的用户比较少,因此user_list设置为能够访问ftp服务的用户
cd /etc/vsftpd/vuser.d vim vuser.list -------------------- zhaoshuai zhaoshuai # 这里的密码和系统用户 zhaoshuai 的密码不一样用以区分 -------------------- db_load -T -t hash -f vuser.list vuser.db
该文件的格式为:一行用户名一行密码linux
cd /etc/vsftpd/vuser.d vim zhaoshuai --------------------------- # 指定宿主目录,配置访问权限 local_root=/data/ftpdata/zhaoshuai # 虚拟用户的宿主目录 write_enable=YES anon_upload_enable=YES # 上传 anon_mkdir_write_enable=YES # 建立目录写权限 anon_other_write_enable=YES # 其余写入权限 ---------------------------
systemctl restart vsftpd systemctl status vsftpd
[root@srv05-CT75 vuser.d]# ftp 127.0.0.1 Connected to 127.0.0.1 (127.0.0.1). 220 (vsFTPd 3.0.2) Name (127.0.0.1:root): zhaoshuai 331 Please specify the password. Password: # 在这里使用系统用户zhaoshuai的密码没法登录 530 Login incorrect. Login failed. ftp> exit 221 Goodbye. [root@srv05-CT75 vuser.d]# ftp 127.0.0.1 Connected to 127.0.0.1 (127.0.0.1). 220 (vsFTPd 3.0.2) Name (127.0.0.1:root): zhaoshuai 331 Please specify the password. Password: # 使用虚拟用户zhaoshuai的密码能够正常登陆 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> ftp> ls # 能够查看到上面建立的测试文件 227 Entering Passive Mode (127,0,0,1,226,175). 150 Here comes the directory listing. drwxr-xr-x 3 1000 1000 4096 Jun 12 07:59 ccc.txt drwxr-xr-x 6 1000 1000 4096 Jun 12 07:45 ddd 226 Directory send OK. ftp> exit 221 Goodbye.
iptables -I INPUT -p tcp --dport 21 -j ACCEPT # FTP链接端口 iptables -I INPUT -p tcp --dport 33000:34000 -j ACCEPT # pasv模式下的随机端口 iptables-save >/etc/sysconfig/iptables # 保存防火墙配置 systemctl restart iptables.service systemctl restart vsftpd.service
service vsftpd restart service vsftpd status
ftp相关技术文档,写的较早,看文笔很不错,应该又能够借鉴的地方vim
http://os.51cto.com/art/201008/222036.htmcentos