Centos6.4 vsftpd服务器搭建(一)
ftp这个服务大家工作中也经常用,我也就不再这里介绍ftp哪种服务器更好一点了,相信大家大部分在服务器上面使用的还是vsftp。这里就重点对vsftpd做一些记录行的讲解。
一、sftp
1.1 sftp介绍
sftp 是一个交互式文件传输程式。它类似于 ftp, 但它进行加密传输,比FTP有更高的安全性。
ftp的数据加密传输一种就是通过这种基于ssh协议的数据传输方式,一种就是通过基于ssl协议的数据传输方式。
sftp对于开发和一些人并无陌生,可能我们运维人员习惯了用lrzsz这种工具来进行本地与服务器之间的数据传输,另一种就是这种sftp如果你习惯使用CRT的话。SecureCRT这个工具自带了一个FTP,方便我们上传和下载,而且做的比较人性化,由于其基本命令和linux中基本命令大都相似,熟悉LINUX人能很容易上手。
1.2 sftp命令介绍
# sftp --help
usage: sftp [-1Cv] [-B buffer_size] [-b batchfile] [-F ssh_config]
[-o ssh_option] [-P sftp_server_path] [-R num_requests]
[-S program] [-s subsystem | sftp_server] host
sftp [user@]host[:file ...]
sftp [user@]host[:dir[/]]
sftp -b batchfile [user@]host
cd 路径 更改远程目录到“路径” lcd 路径 更改本地目录到“路径” chgrp group path 将文件“path”的组更改为“group” chmod mode path 将文件“path”的权限更改为“mode” chown owner path 将文件“path”的属主更改为“owner” exit 退出 sftp help 显示这个帮助文本 get 远程路径 下载文件 ln existingpath linkpath 符号链接远程文件 ls [选项] [路径] 显示远程目录列表 lls [选项] [路径] 显示本地目录列表 mkdir 路径 创建远程目录 lmkdir 路径 创建本地目录 mv oldpath newpath 移动远程文件 open [用户@]主机[:端口] 连接到远程主机 put 本地路径 上传文件 pwd 显示远程工作目录 lpwd 打印本地工作目录 quit 退出 sftp rmdir 路径 移除远程目录 lrmdir 路径 移除本地目录 rm 路径 删除远程文件 lrm 路径 删除本地文件 symlink existingpath linkpath 符号链接远程文件 version 显示协议版本
1.3 sftp使用介绍
使用方式(命令行):
sftp> ls #显示ftp服务器当前目录下的列表(这样不能分出文件和目录,可以用ls -l来查看)
sftp> lls #显示本地当前目录下的文件和目录列表(也可以用lls -l)
sftp> cd /root/ #切换到ftp服务器指定的目录下面
sftp> lcd D:/ #切换到本地客户端指定的目录下面
sftp> pwd #查看ftp服务器端当前的位置
sftp> lpwd #查看本地客户端所在的当前位置
sftp> get 1.sh #从ftp服务器端下载指定文件(sftp> get /tmp/nslcd.conf 当然也可以加目录)
sftp> get -r expect #加参数-r 是下载目录
sftp> put -r expect #上传本地的目录
sftp> put id_rsa #上传本地的文件
好了,关于sftp的介绍就到这里,不是我们要说的重点。掌握这些就可以在没有vsftp和不安装lrzsz的情况下对服务器进行上传下载。
博文来自:www.51niux.com
二、vsftp的介绍
2.1 ftp的连接与数据连接方式
ftp的有两种连接:tcp的命令连接也就是服务器监听21端口,客户端与之进行的连接,还有一种是数据连接,等数据传输的时候才会开启的端口进行与客户端之间的数据连接。
说到数据连接,数据连接就分为两种形式:主动模式和被动模式,这两种模式都是相对于服务器端来说的。
主动模式(PORT):
ftp客户端通过服务器的TCP的21端口,客户端会使用一个随机端口(如随机端口为32456)与服务器建立了连接,当需要产生数据传输的时候,服务器端会开启TCP的20端口向客户端的32456+1=32457端口发起连接请求,如果客户端的32457被占用了,就再加+1也就是32458端口进行数据传输,这就需要客户端的不要开启防火墙或者防火墙做相应的设置。
被动模式(PASV):
ftp客户端通过服务器的TCP的21端口,客户端会使用一个随机端口与服务器建立连接,当需要产生数据传输的时候,服务器会告诉客户端一个报文,如(53,32),也就是告诉客户端一个大于1024的随机算口,ftp服务器端将要就开启53*256+32=13600端口,客户端就会向13600这个随机端口发起tcp请求连接,进行数据传输。这就需要服务器端不要开启防火墙或者防火墙做相应的设置。
从网络安全的角度来看的话似乎ftp port模式更安全,而ftp pasv更不安全,那么为什么RFC要在ftp port基础再制定一个ftp pasv模式呢?其实RFC制定ftp pasv模式的主要目的是为了数据传输安全角度出发的,因为ftp port使用固定20端口进行传输数据,那么作为黑客很容使用sniffer等探嗅器抓取ftp数据,这样一来通过ftp port模式传输数据很容易被黑客窃取,因此使用pasv方式来架设ftp server是最安全绝佳方案。而且也可以将客户端是否开启防火墙的问题导致数据无法传输的问题解决掉。
vsftp默认是支持两种模式的请求的,想要使用主动模式还是客户模式主要是客户端的设置,ftp客户端大部分是以被动模式的形式发起请求。当然我们也可以让vsftp只启用一种形式。
配置文件:/etc/vsftpd/vsftpd.conf
主动模式配置方法:
#主动式连接使用的数据通道
connect_from_port_20=YES
#支持数据流的被动式连接模式
pasv_enable=NO
被动模式配置方法:
#主动式连接使用的数据通道
connect_from_port_20=NO #关闭20端口
pasv_enable=YES(默认为YES) #设置是否允许被动模式
pasv_min_port=1024(default:0(use any port)) #pasv使用的最小端口
pasv_max_port=65536(default:0(use any port)) #pasv使用的最大端口
2.2 ftp的响应码
响应代码 | 解释说明 |
110 | 新文件指示器上的重启标记 |
120 | 服务器准备就绪的时间(分钟数) |
125 | 打开数据连接,开始传输 |
150 | 打开连接 |
200 | 成功 |
202 | 命令没有执行 |
211 | 系统状态回复 |
212 | 目录状态回复 |
213 | 文件状态回复 |
214 | 帮助信息回复 |
215 | 系统类型回复 |
220 | 服务就绪 |
221 | 退出网络 |
225 | 打开数据连接 |
226 | 结束数据连接 |
227 | 进入被动模式(IP 地址、ID 端口) |
230 | 登录因特网 |
250 | 文件行为完成 |
257 | 路径名建立 |
331 | 要求密码 |
332 | 要求帐号 |
350 | 文件行为暂停 |
421 | 服务关闭 |
425 | 无法打开数据连接 |
426 | 结束连接 |
450 | 文件不可用 |
451 | 遇到本地错误 |
452 | 磁盘空间不足 |
500 | 无效命令 |
501 | 错误参数 |
502 | 命令没有执行 |
503 | 错误指令序列 |
504 | 无效命令参数 |
530 | 未登录网络 |
532 | 存储文件需要帐号 |
550 | 文件不可用 |
551 | 不知道的页类型 |
552 | 超过存储分配 |
553 | 文件名不允许 |
博文来自:www.51niux.com
2.3 vsftp的安装
# yum install vsftpd #一般我们就在linux系统上面采取yum安装rpm包的形式。
# man /etc/vsftpd/vsftpd.conf #这样可以查看vsftpd.conf文件里面那些参数的用法和解释
还有就是ftp的传输是以文本传输和二进制传输两种形式,如果不特殊在配置文件里面指定的话,ftp服务器会根据要传输的文件类型进行灵活的自动调度。
#chown ftp:ftp /var/ftp/pub
2.4 vsftp配置文件详解
如果配置文件里面默认有的,就用黑色字体标注,如果配置文件里面没有,我就用绿色字体标注,方便区分。
这里大部分是用不到的,在这里罗列一下,方便万一有需要的时候方便查询。
#################用户登陆控制##############
#开启匿名用户,默认是开启的
anonymous_enable=YES
#匿名用户login时不询问口令
no_anon_password=YES
#匿名用户主目录
anon_root=(none)
#接受本地用户,默认也是开启的
local_enable=YES
#本地用户主目录
local_root=(none)
#如果匿名用户需要密码,那么使用banned_email_file里面的电子邮件地址的用户不能登录
deny_email_enable=YES
#仅在没有pam验证版本时有用,是否检查用户有一个有效的shell来登录
check_shell=YES
#若启用此选项,userlist_deny选项才被启动(这就是涉及到ftp默认黑名单的机制了)
userlist_enable=YES
#若为YES,则userlist_file中的用户将不能登录,为NO则只有userlist_file的用户可以登录
userlist_deny=NO
#如果和chroot_local_user一起开启,那么用户锁定的目录来自/etc/passwd每个用户指定的目录
passwd_chroot_enable=NO
#定义匿名登入的使用者名称。默认值为ftp。
ftp_username=FTP
注:
userlist_enable=YES #启动,配置文件有两种用法,默认是黑名单机制:
黑名单:userlist_enable=YES #启用这个名单
userlist_deny=YES #这个名单里面的用户都拒绝,默认就是YES
白名单:
userlist_enable=YES #启用这个名单
userlist_deny=NO #这个名单里面的用户不拒绝,默认就是YES
如果两个用户出现在ftpusers和 userlist_deny=NO中,以前者为准。
#################用户权限控制###############
#可以上传(全局控制).
write_enable=YES #这里主要是针对本地用户设置的
#本地用户上传文件的umask
local_umask=022
#上传文件的权限配合umask使用
#file_open_mode=0666
#匿名用户可以上传
#anon_upload_enable=YES
#匿名用户可以建目录
#anon_mkdir_write_enable=YES
匿名用户其它的写权利(如可以进行删除操作)
anon_other_write_enable=YES
#如果设为YES,匿名登入者会被允许下载可阅读的档案。默认值为YES。
anon_world_readable_only=YES
#如果开启,那么所有非匿名登陆的用户名都会被切换成guest_username指定的用户名
#guest_enable=YES
#所有匿名上传的文件的所属用户将会被更改成chown_username
#chown_uploads=YES
#匿名上传文件所属用户名
chown_username=whoever
#如果启动这项功能,则所有列在chroot_list_file之中的使用者不能更改根目录
chroot_list_enable=YES
#允许使用"async ABOR"命令,一般不用,容易出问题
async_abor_enable=YES
#管控是否可用ASCII 模式上传。默认值为NO。
#ascii_upload_enable=YES
#管控是否可用ASCII 模式下载。默认值为NO。
#ascii_download_enable=YES
#这个选项必须指定一个空的数据夹且任何登入者都不能有写入的权限,当vsftpd 不需要file system 的权限时,就会将使用者限制在此数据夹中。默认值为/usr/share/empty
secure_chroot_dir=/usr/share/empty
###################超时设置##################
#空闲连接超时(单位为妙)
#idle_session_timeout=600
#数据传输超时
#data_connection_timeout=120
#PAVS请求超时
ACCEPT_TIMEOUT=60
#PROT模式连接超时
connect_timeout=60
################服务器功能选项###############
#开启日记功能(光开启这个命令是不会记录日志的,还要将xferlog_file=/var/log/xferlog一起开启)
xferlog_enable=YES
#使用标准格式
xferlog_std_format=YES
#当xferlog_std_format关闭且本选项开启时,记录所有ftp请求和回复,当调试比较有用.
#log_ftp_protocol=NO
#允许使用pasv模式
pasv_enable=YES
#关闭安全检查
#pasv_promiscuous=NO
#允许使用port模式
#port_enable=YES
#关闭安全检查
#prot_promiscuous=NO
#开启tcp_wrappers支持
tcp_wrappers=YES
#定义PAM 所使用的名称,预设为vsftpd。
pam_service_name=vsftpd
#当服务器运行于最底层时使用的用户名
#nopriv_user=nobody
#使vsftpd在pasv命令回复时跳转到指定的IP地址
pasv_address=(none)
#################服务器性能选项##############
#是否能使用ls -R命令以防止浪费大量的服务器资源
#ls_recurse_enable=YES
#是否使用单进程模式
#one_process_model
#绑定到listen_port指定的端口
listen=YES
#当使用者登入后使用ls -al 之类的指令查询该档案的管理权时,预设会出现拥有者的UID,而不是该档案拥有者的名称。若是希望出现拥有者的名称,则将此功能开启。
text_userdb_names=NO
#显示目录清单时是用本地时间还是GMT时间,可以通过mdtm命令来达到一样的效果
use_localtime=NO
#测试平台优化
#use_sendfile=YES
################信息类设置################
#login时显示欢迎信息.如果设置了banner_file则此设置无效(banner_file=文件位置,然后文件里面写的是欢迎信息)
#ftpd_banner=Welcome to blah FTP service.
#允许为目录配置显示信息,显示每个目录下面的message_file文件的内容(然后再ftp目录下面创建.message文件)
dirmessage_enable=YES
#显示会话状态信息
#setproctitle_enable=YES
############## 文件定义 ##################
#定义不能更改用户主目录的文件
#chroot_list_file=/etc/vsftpd/vsftpd.chroot_list
#定义限制/允许用户登录的文件(主要取决于userlist_deny的设置,如果设置为YES,则这个文件里的用户是不能登录的,如果设置为NO,则这个文件里 的用户是可以登录的。)
userlist_file=/etc/vsftpd/vsftpd.user_list
#定义登录信息文件的位置
banner_file=/etc/vsftpd/banner
#禁止使用的匿名用户登陆时作为密码的电子邮件地址
#banned_email_file=/etc/vsftpd.banned_emails
#日志文件位置
#xferlog_file=/var/log/vsftpd.log
#目录信息文件
message_file=.message
############## 目录定义 #################
#定义用户配置文件的目录,就是定义虚拟用户用户以及权限的目录
user_config_dir=/etc/vsftpd/userconf
#定义本地用户登陆的根目录,注意定义根目录可以是相对路径也可以是绝对路径.相对路径是针对用户家目录来说的.
local_root=webdisk #此项设置每个用户登陆后其根目录为/home/username/webdisk
#匿名用户登陆后的根目录
anon_root=/var/ftp
注:
如果要对每个用户进行单独的控制,只需要在user_config_dir中建立username文件,内容为数据传输和用户权利里面设置个人的合适的选项,用户自定义文件同样适合用pam支持的虚拟用户
#############用户连接选项#################
#可接受的最大client数目
max_clients=100
#每个ip的最大client数目
max_per_ip=5
#使用标准的20端口来连接ftp
connect_from_port_20=YES
#绑定到某个IP,其它IP不能访问
listen_address=192.168.1.108
#绑定到某个端口
#listen_port=2121
#数据传输端口
#ftp_data_port=2020
#pasv连接模式时可以使用port 范围的上界,0 表示任意。默认值为0。
pasv_max_port=10250
#pasv连接模式时可以使用port 范围的下界,0 表示任意。默认值为0。
pasv_min_port=1025
##############数据传输选项#################
#匿名用户的传输比率(字节/秒)
anon_max_rate=51200
#本地用户的传输比率(字节/秒)
local_max_rate=5120000
博文来自:www.51niux.com
三、vsftp服务器几种设置
3.1 vsftp服务器匿名用户登录设置
# cat /etc/vsftpd/vsftpd.conf #注意行后面不要有空格,不然会Starting vsftpd for vsftpd: 500 OOPS: bad bool value in config file for:报错
anonymous_enable=YES #在这句话的下面添加下面三行
anon_upload_enable=YES #开启匿名用户上传
anon_other_write_enable=YES#开启匿名用户创建目录权限
anon_mkdir_write_enable=YES #开启匿名用户除创建目录外的写权限
anon_world_readable_only=NO #默认值是YES,这句话的意思是匿名用户只容许下载完全可读的文件,这也就容许了ftp用户拥有对文件的所有权,尤其是在上传的情况下。如果你不设置或者设置为YES的话,那些尽管是ftp用户,但是文件是600的文件,你就下载不了,只有设置为NO才可以。
anon_umask=022#创建的目录权限为755,不然默认为700,上传的文件权限为644,不然默认为600
# /etc/init.d/vsftpd restart #重启vsftpd服务
测试:
[root@master tmp]# lftp 192.168.1.111 #登录ftp服务器,服务器IP为192.168.1.111
lftp 192.168.1.111:~> ls #查看登录的目录下面的列表
drwxr-xr-x 4 14 50 4096 Nov 27 12:34 pub
lftp 192.168.1.111:/> cd pub/ #切换到服务器的当前目录下的pub目录
lftp 192.168.1.111:/pub> ls -l #查看目录和文件
drwxr-xr-x 2 14 50 4096 Nov 27 12:34 hah
drwx------ 2 14 50 4096 Nov 27 12:30 test
-rw-r--r-- 1 14 50 4678 Nov 27 12:33 vsftpd.conf #可见我们匿名用户默认都是以ftp用户创建文件
lftp 192.168.1.111:/pub> lcd /tmp/ #切换本地目录到/tmp下面
lcd ok, local cwd=/tmp
lftp 192.168.1.111:/pub> get vsftpd.conf #get文件
4678 bytes transferred #下载成功提示,有文件的大小4678字节
lftp 192.168.1.111:/pub> put haha.conf #上传一个文件
1786 bytes transferred
lftp 192.168.1.111:/pub> mkdir nihao #创建一个nihao目录
mkdir ok, `nihao' created #提示创建成功
lftp 192.168.1.111:/pub> rmdir hah #删除一个hah的目录
rmdir ok, `hah' removed #提示删除成功
lftp 192.168.1.111:/pub> cd / #切换到根
lftp 192.168.1.111:/> ls -l #只是在ftp服务器的根分区下面
drwxr-xr-x 4 14 50 4096 Nov 27 12:36 pub
lftp 192.168.1.111:/> cd /etc #切换到其他的用户
cd: Access failed: 550 Failed to change directory. (/etc) #提示是没有权限的。
好了到此我们的匿名用户的上传下载已经测试完毕了,而且我们还补充了一下linux连接ftp服务器的一些命令行操作。
3.2 系统用户登录设置
我们现在假设我们没有做上面的操作,现在配置文件还没有进行修改。
#cat /etc/vsftpd/vsftpd.conf
anonymous_enable=NO #拒绝匿名用户
local_enable=YES #默认的,启动本地用户
write_enable=YES #本地用户有写权限
local_umask=022 #创建文件和目录的umask权限
chroot_local_user=YES #本地所有帐户都只能在自家目录
chroot_list_enable=YES #这里是要取消注释的,启用下面的列表
chroot_list_file=/etc/vsftpd/chroot_list #所有列在chroot_list_file之中的系统用户可以跳出自己的家目录去访问其他的目录
这里我们用两个用户进行测试,一个hadoop用户在/etc/vsftpd/chroot_list文件中,一个test用户不在这个文件中。
先用test用户测试:
# lftp 192.168.1.111
lftp 192.168.1.111:~> login test 123456 #login 后面跟用户名 密码 中间用空格隔开
lftp test@192.168.1.111:~> cd /etc #切换到其他用户
cd: Access failed: 550 Failed to change directory. (/etc) #报错不能切换
再用hadoop用户进行测试:
# lftp 192.168.1.111
lftp 192.168.1.111:~> login hadoop 123456
lftp hadoop@192.168.1.111:/> cd /opt t#切换到服务器的/opt目录下
cd ok, cwd=/opt #提示切换成功
lftp hadoop@192.168.1.111:/opt> ls -l #没有提示报错,并且是可以查看的
drwxr-x--- 3 0 0 4096 Nov 07 13:24 cn=config.bak20161107
drwx------ 5 2527 2527 4096 Aug 10 2015 hadoop
-rw-r--r-- 1 0 0 4 Sep 22 18:12 nihao
drwxr-xr-x 2 0 0 4096 Feb 22 2013 rh
drwxr-xr-x 2 0 0 4096 Aug 16 2015 rsync
drwxr-xr-x 2 0 0 4096 Nov 03 18:09 samba
drwxr-xr-x 8 0 0 4096 Jun 16 15:45 scripts
drwxr-xr-x 3 0 0 4096 Jul 08 2015 sun
lftp hadoop@192.168.1.111:/opt> mkdir hadooptest #创建一个目录
mkdir: Access failed: 550 Create directory operation failed. (hadooptest) #但是还是不能创建的,因为这个目录是root目录
lftp hadoop@192.168.1.111:/opt> cd ~ #这是切换ftp系统的根目录或者cd /
lftp hadoop@192.168.1.111:/> cd /home/hadoop/ #切换回自己的家目录
lftp hadoop@192.168.1.111:/home/hadoop> mkdir hadooptest #进行创建目录操作
mkdir ok, `hadooptest' created #创建目录成功
lftp hadoop@192.168.1.111:~> get agent1.channels #下载文件也是OK的
7 bytes transferred #文件大小7字节
注:
如果开启了chroot_list_file=/etc/vsftpd/chroot_list,就要手工创建一下这个文件,#touch /etc/vsftpd/chroot_list 不管你用到用不到这个文件,不然你就算本地用户只在本家目录下操作也不行。
如下面的报错:
lftp test@192.168.1.111:~> mkdir haha
mkdir: 登录失败: 500 OOPS: could not read chroot() list file:/etc/vsftpd/chroot_list
至此我们关于系统用户的登录设置的测试读写功能已经测试完毕,这里主要想写一点就是除了将大部分系统用户锁在自己的家目录以外,也可以放开一些系统用户让他在系统其他目录里自由的翱翔。