Linux&&ftp文件传输服务
FTP文件传输服务
vsftpd服务基础
FTP服务概述
ftp是文件传输协议,仅限于上传、下载文件,不支持创建文件。
FTP连接及传输模式是什么样的?
- 控制连接 : 使用TCP协议的21端口,用于发送FTP命令信息
- 数据连接 : 使用TCP协议的20端口,用于客户端与服务之间上传、下载数据。
数据连接的建立有以下两种建立模式:
主动模式 : 服务端从20端口主动向客户端发起连接
被动模式 : 服务端在指定范围内的某个端口被动等待客户端连接。
注:数据连接的使用端口在主动模式下建立时,是TCP的20端口;在被动模式下建立时,是TCP的随机端口号。
FTP服务的数据连接是被动模式建立的情况下,如何进行防火墙配置?
FTP服务的传输模式有哪几种?各是什么样的?
文本模式
ASCII模式,以文本序列传输数据
二进制模式
Binary模式,以二进制序列传输数据
文本模式和二进制模式在数据传输过程中自动协商、切换。
FTP服务的用户有哪几种类型?
- 匿名用户 : anonymous 或 ftp。无法指明用户具体详细信息的用户。
- 本地用户 : 将账号名称、密码等信息保存在服务器端的passwd、shadow文件中的用户。
- 虚拟用户: 使用独立的账号、密码数据文件的用户
-
常见的FTP服务器程序有哪些?
- IIS、Serv-U、wu-ftpd、Proftpd、vsftpd
- IIS : windows系统中自带的服务.
- Serv-U : 运行在windows系统环境中常见的ftp服务。
常见的FTP客户端程序有哪些?
- ftp命令
- cuteFTP,flashFXP,leapFTP,Filezilla
- gftp,kuftp
启动软件服务时,为什么许多软件服务名后面有一个d?如httpd,vsftpd,dhcpd等。
d : 是Daemon的缩写,指守护进程。
守护进程 : 系统启动时,不需要用户登录即可运行的进程被称为守护进程。在后台运行的进程。
vsftpd的配置文件
centOS之FTP搭建步骤
#固化ip、关闭防火墙
#rpm安装vsftpd服务
rpm -ivh vsftpd-2.2.2-11.el6_4.1.x86_64.rpm
#配置vsftpd配置文件
vim /etc/vsftpd/vsftpd.conf
#匿名用户允许访问
anonymous_enable=YES
#匿名用户上传允许
anon_upload_enable=YES
#匿名用户创建写入允许
anon_mkdir_write_enable=YES
#重启服务生效
service vsftpd start
#查看匿名用户默认访问的目录
ls /var/ftp/pub
/etc/vsftpd/ftpusers : 黑名单,禁止使用ftp服务的用户
/etc/vsftpd/user_list : 黑白名单,可以控制名单内用户自由的切换禁止、允许访问ftp的状态。
/etc/rc.d/init.d/vsftpd : 开机启动控制脚本
/etc/vsftpd/vsftpd.conf : ftp主配置文件
当白名单user_list功能启用时,仅在白名单user_list中出现的用户,才可访问ftp服务。
当白名单user_list功能未启用时,只要用户不在黑名单ftpusers 中,即可访问ftp服务。
022 : 指的是644权限掩码
对于ftp来说,其对文件不具备执行权限,所以默认是666。
anon_other_write_enable=YES : 指的是文件和目录的重命名、删除权限。
local_root=/var/ftp : 该功能可以设置普通用户在登录时看到目标目录,而非仅看到用户宿主目录。
chroot_local_user=YES : 指用户只能看到主目录。类似虚根目录的功能。
客户端如何访问FTP服务?
- 客户端打开文件夹,在地址栏访问“ftp://192.168.1.100”即可。
- 或 ftp:dfq@//192.168.1.100 : dfq是用户名。
- 命令行模式下,执行“ftp 192.168.1.100”命令即可。
- 客户端安装客户端软件输入FTP服务器地址、用户名、密码即可连接。
基于系统用户的FTP服务
匿名访问的FTP服务
准备匿名FTP访问的目录
默认支持匿名用户访问
开放匿名用户配置并启动vsftpd服务
测试匿名FTP服务器
用户验证的FTP服务
准备基本的本地用户验证
userlist_enable=YES : 启动黑白名单功能
userlist_deny=NO : 仅令黑白名单的白名单功能生效
使用user_list用户列表文件
vsftpd服务的其他常用配置
FTP使用示例
需求:
操作步骤:
#安装FTP软件包
#创建目标目录,意在将/home作为用户登录的根目录
mkdir /home/caiwu
mkdir /home/yewu
mkdir /home/pub
#创建财务组,业务组
groupadd caiwu
groupadd yewu
#新建用户账号
useradd -g caiwu cw-jl
useradd -g caiwu cw1
useradd -g yewu yw-jl
useradd -g yewu yw1
#更改财务组目录权限
chown cw-jl:caiwu /home/caiwu
chmod 750 /home/caiwu
#更改业务组目录权限
chown yw-jl:yewu /home/yewu
chmod 750 /home/yewu
#更改共享组权限
chmod o+wt /home/pub
#配置vsftpd服务
vim /etc/vsftpd/vsftpd.conf
#禁止匿名用户登录访问
anonymous_enable=NO
#限制用户登录后的根目录
local_root=/home
chroot_local_user=YES
#重启服务生效
service vsftpd restart
基于虚拟用户的FTP服务
建立虚拟用户的账号数据库
虚拟用户:每个用户的 权限状态,访问位置均可独立设置。管理灵活。
虚拟用户仅能在FTP服务中使用。身份单一。
每个虚拟用户均有独立的配置文件,便于权限设置。
基于虚拟用户的FTP服务实现步骤
#创建账号数据
##建立虚拟FTP用户的账号数据库文件
### 建立虚拟用户的账号名、密码列表,注意用户前面不能留有空格!
vim /etc/vsftpd/vusers.list
dfq1 #奇数行为账号名
123456 #偶数行为上一行中账号的密码
dfq2 #奇数行为账号名
123456 #偶数行为上一行中账号的密码
###安装db4-utils软件包,借助db_load转换工具,将列表转化为Berkeley DB格式的数据文件
cd /etc/vsftpd/
db_load -T -t hash -f vusers.list vusers.db
#查看vusers.db文件类型
file vusers.db
#更新虚拟用户文件权限,更改为只允许root用户读写。
chmod 600 /etc/vsftpd/vusers.*
##创建FTP根目录及虚拟用户映射的系统用户
###虚拟用户仅限于ftp环境中登录时验证使用;而在系统中对目录、文件、资源进行访问时,需要将虚拟用户切换或映射成系统用户使用。
####“/var/ftproot” :宿主目录,“virtual” : 虚拟用户名,“/sbin/nologin” : 不能从tty终端登录。
useradd -d /var/ftproot -s /sbin/nologin virtual
chmod 755 /var/ftproot
##建立支持虚拟用户的PAM认证文件,"/etc/vsftpd/vusers"对应上面创建的vusers.db文件。
####“/etc/pam.d/vsftpd”代表本地用户如何验证的。
vim /etc/pam.d/vsftpd.vu
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers
##在vsftpd.conf文件中添加支持配置
vim /etc/vsftpd/vsftpd.conf
anonymous_enable=no
local_enable=YES
write_enable=YES
anon_umask=022
guest_enable=YES
guest_username=virtual
pam_service_name=vsftpd.vu
##重启服务生效
service vsftpd restart
pam : 认证机制.
虚拟用户一旦启动,本地(系统)用户将不能使用,因为本地用户验证是通过pam验证的,本地用户文件与虚拟用户文件是同等的,本地用户与虚拟用户不能同时用于“pam_service_name”。会冲突。
##客户端使用虚拟用户登录vsftpd服务
#打开文件夹,访问“ftp://192.168.10.11”
为vsftpd服务添加虚拟用户支持
如何为不同的虚拟用户实现不同的文件配置?
#在vsftpd.conf文件中添加用户配置目录支持
vim /etc/vsftpd/vsftpd.conf
#添加不同用户独立配置目录的支持
user_config_dir=/etc/vsftpd/vusers_dir
mkdir /etc/vsftpd/vusers_dir
cd /etc/vsftpd/vusers_dir
#为虚拟用户dfq1创建独立配置文件
vim dfq1
anonymous_enable=YES
anon_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_max_rate=0
#local_root=/var/ftp1
vim dfq2
anonymous_enable=YES
#匿名或虚拟用户上传到服务器的文件,文件权限是怎样的?
anon_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_max_rate=0
#local_root=/var/ftp2
"anon_umask=022"可以确保不同权限的用户创建的文件,其他用户可读。
如何实现不同虚拟用户的根目录各不相同?
mkdir /home/caiwu
mkdir /home/yewu
chown virtual.virtual /home/caiwu
chown virtual.virtual /home/yewu
chmod 755 /home/caiwu
chmod 755 /home/yewu
cd /etc/vsftpd
vim vusers.list
cw-jl
123456
cw1
123456
db_load -T -t hash -f vusers.list vusers.db
cd /etc/vsftpd/vusers_dir
vim cw-jl
#此时用户cw-jl登录时,访问的目录是/home/caiwu,并且对该目录具备写权限
local_root=/home/caiwu
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
客户端命令行登录ftp服务器后如何下载文件?
ftp 192.168.10.11
#查看客户端的当前路径
ftp>!pwd
#查看服务器端的当前路径
ftp>pwd
#切换客户端的当前路径到/tmp下.“l”代表local
ftp>lcd /tmp
#从ftp服务器端下载文件ddd到客户端的当前路径下
ftp>get ddd
#将客户端当前路径下的文件aaa上传到ftp服务器目录下
ftp> put aaa
#使用mget从服务器下载多个文件到客户端当前路径,使用mput上传客户端当前路径下的多个文件到服务器端。
ftp>mget ddd aaa
#退出连接
ftp>by