网络文件共享服务主流的主要有三种,分别是ftp、nfs、samba
FTP:文件传输协议(英文:File Transfer Protocol,缩写:FTP)是用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式。它属于网络传输协议的应用层。文件传送(file transfer)和文件访问(file access)之间的区别在于:前者由FTP提供,后者由如NFS等应用系统提供。
FTP是一个8位的客户端-服务器协议,能操作任何类型的文件而不需要进一步处理,就像MIME或Unicode一样。但是,FTP有着极高的延时,这意味着,从开始请求到第一次接收需求数据之间的时间,会非常长;并且不时的必须执行一些冗长的登录进程。
在使用FTP时候,用户经常会遇到两种概念:
将自己电脑上的文件拷贝到远端主机上
从远端主机拷贝文件到自己的电脑上面
FTP工作于应用层,它监听tcp的21号端口,是一种c/s架构的应用程序。其有多种客户端和服务端的应用程序
客户端工具
服务端软件
ftp有2种数据连接模式:
主动模式下
客户端以大于1023的随机端口去连接ftp服务端的21号端口
1024 --> 21 建立命令连接
服务端以自己的20号端口去连接客户端建立命令连接时的端口+1的端口号
20 --> 1025 建立数据连接
被动模式下
客户端以一个随机端口(1110)来连接服务器端的21号端口,之后服务器会返回一个告知客户端连接服务端的哪个端口号
1110 --> 21 (告知客户端连接哪一个端口)
客户端以创建命令连接的端口+1 (1110 + 1)的端口号去连接服务器端通过命令连接告知自己的一个随机端口号来创建数据连接
1111 --> (服务端告知自己的端口)
注意:
主动模式有个弊端,因为客户端的端口是随机的,如果客户端开了防火墙,那么服务器端去连接客户端创建数据连接时就可能会被拒绝。
FTP的用户主要有三种:
[root@client111 ~]# yum install -y vsftpd
........
已安装:
vsftpd.x86_64 0:3.0.2-22.el7
完毕!
# 配置文件目录
[root@client111 ~]# ls -ld /etc/vsftpd
drwxr-xr-x. 2 root root 88 6月 27 15:45 /etc/vsftpd
# 主配置文件
[root@client111 ~]# ls -l /etc/vsftpd/vsftpd.conf
-rw-------. 1 root root 5030 8月 3 2017 /etc/vsftpd/vsftpd.conf
# vsftpd用户认证配置文件
[root@client111 ~]# ls -l /etc/pam.d/vsftpd
-rw-r--r--. 1 root root 335 8月 3 2017 /etc/pam.d/vsftpd
# 匿名用户(映射为ftp用户)的共享资源位置是/var/ftp
# 系统用户通过ftp访问的资源位置为用户的家目录
# 虚拟用户通过ftp访问的资源位置为给虚拟用户指定的映射成为的系统用户的家目录
anonymous_enable=YES 启用匿名用户登陆
anon_upload_enable=YES 允许匿名用户上传
anon_mkdir_write_enable=YES 允许匿名用户创建目录,但是不能删除
anon_other_write_enable=YES 允许匿名用户创建和删除目录
local_enable=YES 启用本地用户登陆
write_enable=YES 允许本地用户有写权限
local_umask=022 通过FTP上传文件的默认遮罩码
chroot_local_user=YES 禁锢所有FTP本地用户只能在其家目录中
chroot_list_enable=YES 开启禁锢文件列表;需要与chroot_list_file参数一起使用
chroot_list_file=/etc/vsftp/chroot_list 指定禁锢列表文件路径;在此文件里面的用户将被禁锢在其家目录中
allow_writeable_chroot=YES 允许被禁锢的用户家目录有写权限
xferlog_enable=YES 是否启用传输日志,记录FTP传输过程
xferlog_std_format=YES 传输日志是否使用标准格式
xferlog_file=/var/log/xferlog 指定传输日志存储的位置
chown_uploads=YES 是否启用改变上传文件属性的功能
chown_username=whoever 指定要将上传的文件的属主改为哪个用户,此用户必须在系统中存在
pam_service_name=vsftpd 指定vsftp使用/etc/pam.d下的哪个pam配置文件进行用户认证
userlist_enable=YES 是否启用控制用户登陆的列表文件:默认为/etc/vsftpd/user_list文件
userlist_deny=YES 是否拒绝userlist指定的列表文件中存在的用户登陆FTP
max_cients=`#` 最大并发连接数
max_per_ip=`#` 每个IP可同时发起的并发请求数
anon_max_rate 匿名用户的最大传输速率,单位是‘字节/秒’
local_max_rate 本地用户的最大传输速率,单位是‘字节/秒’
dirmessage_enable=YES 启用某目录下的.message描述信息
#假设有一个目录,在此目录下面创建一个名为.message的文件,在此文件内写入一些描述信息之后切换出目录,目录会自动显示.message文件中的内容
message_file 设置访问一个目录时获得的目录信息文件的文件名,默认是.message
idle_session_timeout=600 设置默认的断开不活跃session的时间
data_connection_timeout=120 设置数据传输超时时间
ftpd_banner="Welcome to chenlf FTP service." 定制欢迎信息,登陆FTP时自动显示
虚拟用户的配置:
vsftpd虚拟用户的配置步骤:
[root@client111 ~]# cd /etc/yum.repos.d/
[root@client111 yum.repos.d]# wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
[root@client111 yum.repos.d]# vim CentOS7-Base-163.repo
[root@client111 yum.repos.d]# tail -n 5 CentOS7-Base-163.repo
name=CentOS-$releasever - Plus - 163.com
baseurl=http://mirrors.163.com/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=1 # 此处将0改为1
gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7
[root@client111 yum.repos.d]# yum clean all
[root@client111 yum.repos.d]# yum install -y epel-release
[root@client111 yum.repos.d]# yum install -y vsftpd
[root@client111 yum.repos.d]# cd /etc/vsftpd/
[root@client111 vsftpd]# vim vu.list
[root@client111 vsftpd]# cat vu.list
123
123321
abc
123321
# 用户和密码一一对应,前面为账户,后面为密码
[root@client111 vsftpd]# id 123
id: 123: no such user
[root@client111 vsftpd]# id abc
id: abc: no such user
# 账户在系统中没有创建过
[root@client111 vsftpd]# yum install -y db4*
-T 表示转换 -t 表示加密方式使用hash算法加密
[root@client111 vsftpd]# db_load -T -t hash -f /etc/vsftpd/vu.list /etc/vsftpd/vu.db
[root@client111 vsftpd]# ls
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh vu.db vu.list
[root@client111 vsftpd]# file vu.*
vu.db: Berkeley DB (Hash, version 9, native byte-order)
vu.list: ASCII text
[root@client111 vsftpd]# chmod 600 vu.*
[root@client111 vsftpd]# ls -l vu.*
-rw-------. 1 root root 12288 6月 27 17:16 vu.db
-rw-------. 1 root root 22 6月 27 17:08 vu.list
[root@client111 vsftpd]# useradd -d /file -s /sbin/nologin vftp
[root@client111 vsftpd]# cd /
[root@client111 /]# ls -ld file
drwx------. 3 vftp vftp 78 6月 27 17:32 file
[root@client111 /]# chmod 755 file
[root@client111 /]# ls -ld file
drwxr-xr-x. 3 vftp vftp 78 6月 27 17:32 file
[root@client111 pam.d]# cp /etc/pam.d/vsftpd{,.bak}
[root@client111 pam.d]# ls vsftpd*
vsftpd vsftpd.bak
[root@client111 pam.d]# vim /etc/pam.d/vsftpd
[root@client111 pam.d]# cat /etc/pam.d/vsftpd
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/vu
account required pam_userdb.so db=/etc/vsftpd/vu
[root@client111 pam.d]# vim /etc/vsftpd/vsftpd.conf
[root@client111 pam.d]# tail -n 2 /etc/vsftpd/vsftpd.conf
guest_enable=YES
guest_username=vftp
[root@client111 pam.d]# vim /etc/vsftpd/vsftpd.conf
[root@client111 pam.d]# tail -n 2 /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers_dir
allow_writeable_chroot=YES
上述配置配置完成之后,转到/etc/vsftpd/vusers_dir目录中为每个虚拟用户分别建立配置文件
[root@client111 pam.d]# mkdir /etc/vsftpd/vusers_dir
[root@client111 pam.d]# cd /etc/vsftpd/vusers_dir
[root@client111 vusers_dir]# ls
[root@client111 vusers_dir]# touch 123
[root@client111 vusers_dir]# touch abc
[root@client111 vusers_dir]# vim 123
[root@client111 vusers_dir]# vim abc
[root@client111 vusers_dir]# cat 123
anon_upload_enable=YES
[root@client111 vusers_dir]# cat abc
anon_upload_enable=YES
anon_mkdir_write_enable=YES
[root@client111 vusers_dir]# systemctl restart vsftpd
此时用另外一台主机去访问
[root@server222 ~]# yum install -y lftp
[root@server222 ~]# lftp --help
用法: lftp [OPTS] <site>
`lftp' 是在 rc 文件执行后 lftp 执行的第一个命令
-f <file> 执行文件中的命令后退出
-c <cmd> 执行命令后退出
--help 显示帮助信息后退出
--version 显示 lftp 版本后退出
其他的选项同 `open' 命令
-e <cmd> 在选择后执行命令
-u <user>[,<pass>] 使用指定的用户名/口令进行验证
-p <port> 连接指定的端口
<site> 主机名, URL 或书签的名字
[root@server222 ~]# lftp -u abc,123321 192.168.176.111
lftp [email protected]:~> ls
lftp [email protected]:/> mkdir abc
mkdir 成功, 建立 `abc'
lftp [email protected]:/> ls
drwx------ 2 1001 1001 6 Jun 27 14:28 abc
lftp [email protected]:/> help
!<shell-command> (commands)
alias [<name> [<value>]] attach [PID]
bookmark [SUBCMD] cache [SUBCMD]
cat [-b] <files> cd <rdir>
chmod [OPTS] mode file... close [-a]
[re]cls [opts] [path/][pattern] debug [<level>|off] [-o <file>]
du [options] <dirs> exit [<code>|bg]
get [OPTS] <rfile> [-o <lfile>] glob [OPTS] <cmd> <args>
help [<cmd>] history -w file|-r file|-c|-l [cnt]
jobs [-v] [<job_no...>] kill all|<job_no>
lcd <ldir> lftp [OPTS] <site>
ln [-s] <file1> <file2> ls [<args>]
mget [OPTS] <files> mirror [OPTS] [remote [local]]
mkdir [-p] <dirs> module name [args]
more <files> mput [OPTS] <files>
mrm <files> mv <file1> <file2>
[re]nlist [<args>] open [OPTS] <site>
pget [OPTS] <rfile> [-o <lfile>] put [OPTS] <lfile> [-o <rfile>]
pwd [-p] queue [OPTS] [<cmd>]
quote <cmd> repeat [OPTS] [delay] [command]
rm [-r] [-f] <files> rmdir [-f] <dirs>
scache [<session_no>] set [OPT] [<var> [<val>]]
site <site-cmd> source <file>
torrent [-O <dir>] <file|URL>... user <user|URL> [<pass>]
wait [<jobno>] zcat <files>
zmore <files>
[root@client111 /]# cd file/
[root@client111 file]# ls
abc
[root@client111 file]# echo "1234567890" > abc.txt
[root@client111 file]# ls
abc abc.txt
[root@server222 ~]# lftp -u abc,123321 192.168.176.111
lftp [email protected]:~> ls
drwx------ 3 1001 1001 21 Jun 27 14:34 abc
-rw-r--r-- 1 0 0 11 Jun 27 14:39 abc.txt
[root@server222 ~]# lftp -u abc,123321 192.168.176.111
lftp [email protected]:~> ls
drwx------ 3 1001 1001 21 Jun 27 14:34 abc
-rw-r--r-- 1 0 0 11 Jun 27 14:39 abc.txt
lftp [email protected]:/> get abc.txt -o /opt
11 bytes transferred
lftp [email protected]:/> exit
[root@server222 ~]# ll /opt
总用量 4
-rw-r--r--. 1 root root 11 6月 27 22:39 abc.txt
drwxr-xr-x. 2 root root 6 3月 26 2015 rh