VSFTP服务详解

.简介:

LINUX下实现FTP服务的软件很多,最常见的有vsftpd,Wu-ftpdProftp

访问FTP服务器时需要经过验证,只有经过了FTP服务器的相关验证,用户才能访问和传输文件.vsftpd提供了3ftp登录形式:

   (1)anonymous(匿名帐号)

使用anonymous是应用广泛的一种FTP服务器.如果用户在FTP服务器上没有帐号,那么用户可以以anonymous为用户名,以自己的电子邮件地址为密码进行登录.当匿名用户登录FTP服务器后,其登录目录为匿名FTP服务器的根目录/var/ftp.为了减轻FTP服务器的负载以及保证服务器的安全性,一般情况下,应关闭匿名帐号的上传功能.

  (2)real(真实帐号)

real也称为本地帐号,就是以真实的用户名和密码进行登录,但前提条件是用户在FTP服务器上拥有自己的帐号.用真实帐号登录后,其登录的目录为用户自己的目录,该目录在系统建立帐号时系统就自动创建.

  (3)guest(虚拟帐号);

如果用户在FTP服务器上拥有帐号,但此帐号只能用于文件传输服务,那么该帐号就是guest. guest是真实帐号的一种形式,它们的不同之处在于:geust登录FTP服务器后,不能访问除宿主目录以外的内容.

 

.安装

[root@lyon1 ~]# yum -y install vsftpd lftp                                                              // vsftpd为服务端,lftp为连接ftp服务所使用的

[root@lyon1 ~]# service vsftpd start                                                                        //启动

Starting vsftpd for vsftpd:                                [  OK  ]

[root@lyon1 ~]# chkconfig vsftpd on                                                                       // 开机自启动

[root@lyon1 ~]#

[root@lyon1 ~]# service vsftpd stop                                                                          // 关闭

Shutting down vsftpd:                                      [  OK  ]

[root@lyon1 ~]#

 

.FTP相关配置文件说明

其相关配置文件有/etc/vsftpd/vsftpd.conf,  /etc/vsftpd.ftpusers,  /etc/vsftpd.user_list,在配置FTP服务器时,主要是修改这些文件中的相关语句.

1.vsftpd.conf文件说明

配置:

查看配置文件

[root@lyon1 ~]# grep -Ev '^#|^$' /etc/vsftpd/vsftpd.conf

anonymous_enable=YES                            //是否允许匿名,默认允许

local_enable=YES                                         // 是否允许本地用户登录FTP,默认允许

write_enable=YES                                       // 是否允许登录FTP服务的用户执行写的权限,默认允许

local_umask=022                                         // 设置本地用户的文件生成掩码为022,默认是077

dirmessage_enable=YES                             // 激活目录信息,当远程用户更改目录时,将出现提示信息

xferlog_enable=YES                                     // 启动上传和下载日志功能

connect_from_port_20=YES                      // 启动FTP数据端口的连接请求

xferlog_std_format=YES                             // 使用标准的日志格式

chroot_list_enable=YES                              // 用户登录后不能切换到除自己目录以外的其他目录(只针对user_list中的用户,如果需要本地用户也使用此功能,需添加chroot_local_user=YES,默认没有开启)

listen=YES                                                        // 使FTP处于独立启动模式

pam_service_name=vsftpd                       // 设置PAM认证服务的配置文件名称,该文件存放在/etc/pam.d/目录下

userlist_enable=YES                                     // 用户列表中的用户是否允许登录FTP服务器,默认是不允许

tcp_wrappers=YES                                        // 启动tcp_warppers

[root@lyon1 ~]#

 

2.vsftpd.ftpusers文件说明

这个文件是用来记录"不允许"登录到FTP服务器的用户,通常是一些系统默认的用户.

下面是该文件中默认的不允许登录的名单:

# Users that are not allowed to login via ftp

root //默认情况下,root和它以下的用户是不允许登录FTP服务器的.可以将不允许登录的用户添加到这里来.但切记每个用户都要单独占用一行.

bin

daemon

adm

lp

sync

shutdown

halt

mail

news

uucp

operator

games

nobody

3.vsftpd.user_list文件说明

其实它的内容跟上面那个文件内容一样,只是在系统对文件vsftpd.conf 进行检测时,会检测到"userlist_deny=YES",因此这个文件必须存在.下面是这个文件的内容.

# vsftpd userlist

# If userlist_deny=NO, only allow users in this file

# If userlist_deny=YES (default), never allow users in this file, and

# do not even prompt for a password.

# Note that the default vsftpd pam config also checks /etc/vsftpd.ftpusers

# for users that are denied.

root

bin

daemon

adm

lp

sync

shutdown

halt

mail

news

uucp

operator

games

nobody

 

.ftp命令:

FTP>ascii:设定以ASCII方式传送文件(缺省值

FTP>bell: 每完成一次文件传送,报警提示

FTP>binary: 设定以二进制方式传送文件

FTP>bye: 终止主机FTP进程,并退出FTP管理方式

FTP>case: 当为ON,MGET命令拷贝的文件名到本地机器中,全部转换为小写字母

FTP>cd: UNIXCD命令

FTP>cdup: 返回上一级目录

FTP>chmod: 改变远端主机的文件权限

FTP>close: 终止远端的FTP进程,返回到FTP命令状态, 所有的宏定义都被删除

FTP>delete: 删除远端主机中的文件

FTP>dir [remote-directory] [local-file] 列出当前远端主机目录中的文件.如果有本地文件,就将结果写至本地文件

FTP>get [remote-file] [local-file] 从远端主机中传送至本地主机中

FTP>help [command] 输出命令的解释

FTP>lcd: 改变当前本地主机的工作目录,如果缺省,就转到当前用户的HOME目录

FTP>ls [remote-directory] [local-file] DIR. 

FTP>macdef: 定义宏命令

FTP>mdelete [remote-files] 删除一批文件

FTP>mget [remote-files] 从远端主机接收一批文件至本地主机

FTP>mkdir directory-name 在远端主机中建立目录

FTP>mput local-files 将本地主机中一批文件传送至远端主机

FTP>open host [port] 重新建立一个新的连接

FTP>prompt: 交互提示模式

FTP>put local-file [remote-file] 将本地一个文件传送至远端主机中

FTP>pwd: 列出当前远端主机目录

FTP>quit: BYE. 

FTP>recv remote-file [local-file] GET. 

FTP>rename [from] [to] 改变远端主机中的文件名

FTP>rmdir directory-name 删除远端主机中的目录

FTP>send local-file [remote-file] PUT. 

FTP>status: 显示当前FTP的状态

FTP>system: 显示远端主机系统类型

FTP>user user-name [password] [account] 重新以别的用户名登录远端主机

FTP>? [command]: HELP. [command]指定需要帮助的命令名称。如果没有指定 commandftp 将显示全部命令的列表。

FTP>! ftp 子系统退出到外壳。

 

语法

ftp [ -d] [ -g ] [ -i ] [ -n ] [ -v] [ -f ] [ -k realm] [-q[-C]][ HostName [ Port ] ]

-C 允许用户指定:通过 send_file 命令发出的文件必须在网络高速缓冲区(NBC)中经过缓存处理。此标志必须在指定了-q 标志的情况下使用。只有当文件在无保护的情况下以二进制方式发送时此标志才适用。

-d 将有关 ftp 命令操作的调试信息发送给 syslogd 守护进程。如果您指定-d 标志,您必须编辑/etc/syslog.conf 文件并添加下列中的一项:

OR

user.debug FileName

请注意:syslogd守护进程调试级别包含信息级别消息。

如果不编辑/etc/syslog.conf文件,则不会产生消息。变更了/etc/syslog.conf 文件之后,请运行 refresh -s syslogd kill -1 SyslogdPID 命令,以通知 syslogd 守护进程其配置文件的变更。关于调试级别的更多信息,请参考/etc/syslog.conf 文件。也请参考 debug 子命令。

-g 禁用文件名中的元字符拓展。解释元字符可参考为扩展(有时叫做文件名匹配替换)文件名。请参考 glob 子命令。

-i 关闭多文件传送中的交互式提示。请参考 promptmgetmput mdelete 子命令,以取得多文件传送中的提示的描述。

-n 防止在起始连接中的自动登录。否则, ftp 命令会搜索$HOME/.netrc 登录项,该登录项描述了远程主机的登录和初始化过程。请参考 user 子命令。

-q 允许用户指定:send_file 子例程必须用于在网络上发送文件。只有当文件在无保护的情况下以二进制方式发送时此标志才适用。

-v 显示远程服务器的全部响应,并提供数据传输的统计信息。当 ftp 命令的输出是到终端(如控制台或显示)时,此显示方式是缺省方式。

如果 stdin 不是终端,除非用户调用带有-v标志的 ftp 命令,或发送 verbose 子命令,否则 ftp 详细方式将禁用。

-f 导致转发凭证。如果Kerberos 5 不是当前认证方法,则此标志将被忽略。

-k realm 如果远程站的域不同于本地系统的域,系统将允许用户指定远程站的域。因此,域和DCE 单元是同义的。如果Kerberos 5 不是当前认证方法,则此标志将被忽略。

 

脚本登录:

[root@lyon1 ~]# cat ftp_data.sh

#! /bin/sh

ftp -i -n << !

open 192.168.0.1

user ftpuser ftppasswd

cd bigdata

lcd /home/oracle/tbdata

put tablename.txt

Bye


实例:

[root@lyon1 ~]# lftp 192.168.50.50

lftp 192.168.50.50:~> ls

drwxr-xr-x    3 0        0            4096 Mar 02  2012 pub

lftp 192.168.50.50:/> user lyon

Password:

lftp [email protected]:~> ls

ls: Login failed: 500 OOPS: cannot change directory:/home/lyon                        // 用户无法访问家目录,selinux惹得祸

lftp [email protected]:~> exit

[root@lyon1 ~]# setsebool -P ftp_home_dir=1                               // 设置selinux,使ftp的家目录是可以访问的

[root@lyon1 ~]# setsebool -P allow_ftpd_full_access=1               // 设置selinux,给ftpd服务的所有访问权限

[root@lyon1 ~]# lftp 192.168.50.50

lftp 192.168.50.50:~> user lyon xiaowu

lftp [email protected]:~> ls

lftp [email protected]:~> pwd  

ftp://lyon:[email protected]/%2Fhome/lyon

lftp [email protected]:~>

 

实例:

[root@lyon1 ~]# lftp 192.168.50.50

lftp 192.168.50.50:~> ls

drwxr-xr-x    3 0        0            4096 Mar 02  2012 pub

lftp 192.168.50.50:/> cd pub

lftp 192.168.50.50:/pub> ls

dr-xr-xr-x   12 0        0            8192 Jun 14  2012 Server

lftp 192.168.50.50:/pub> cd Server/

lftp 192.168.50.50:/pub/Server> ls

dr-xr-xr-x    3 0        0            2048 Jun 14  2012 images

dr-xr-xr-x    2 0        0            2048 Jun 14  2012 isolinux

-r--r--r--    2 0        0             114 Jun 14  2012 media.repo

dr-xr-xr-x    2 0        0            4096 Jun 14  2012 repodata

lftp 192.168.50.50:/pub/Server> get media.repo

114 bytes transferred                   

lftp 192.168.50.50:/pub/Server> by

[root@lyon1 ~]# ls

anaconda-ks.cfg  Documents  install.log         media.repo  net.sh    Public     Videos

Desktop          Downloads  install.log.syslog  Music       Pictures  Templates

[root@lyon1 ~]#

实例:用户web只能登录FTP服务器,家目录为/var/www/,不能访问除家目录以外的目录

[root@lyon1 ~]# useradd -d /var/www/ -s /sbin/nologin web                                     // 创建web用户,指定家目录为 /var/www/,不允许登陆系统

useradd: warning: the home directory already exists.                                                    // 由于apache服务的用户apache的家目录已经是这个目录了,所以会发出警告信息

Not copying any file from skel directory into it.

[root@lyon1 ~]#  

[root@lyon1 ~]# echo "xiaowu" | passwd --stdin web                                                  // web用户设置密码

Changing password for user web.

passwd: all authentication tokens updated successfully.

[root@lyon1 ~]# echo userlist_deny=NO >> /etc/vsftpd/vsftpd.conf                         // user_list文件的默认拒绝关闭,所以user_list的用户就可以访问FTP

[root@lyon1 ~]# cp /etc/vsftpd/user_list /etc/vsftpd/user_list.bak                

[root@lyon1 ~]# echo web > /etc/vsftpd/user_list                                                          // web用户写入user_list文件,使其可以访问FTP

[root@lyon1 ~]#

[root@lyon1 ~]# echo chroot_list_enable=YES >> /etc/vsftpd/vsftpd.conf                // 启用根目录访问限制功能

[root@lyon1 ~]# echo chroot_list_file=/etc/vsftpd/chroot_list  >> /etc/vsftpd/vsftpd.conf       // 指定使用根目录访问控制功能的用户文件

[root@lyon1 ~]# echo web >> /etc/vsftpd/chroot_list                                                      // web用户写入到根目录访问控制文件中

[root@lyon1 ~]# service vsftpd restart                                                                                //重启服务

Shutting down vsftpd:                                      [  OK  ]

Starting vsftpd for vsftpd:                                [  OK  ]

[root@lyon1 ~]# lftp 192.168.50.50                                                                                  //登录

lftp 192.168.50.50:~> user web xiaowu                                                                           // 使用web用户

lftp [email protected]:~> ls                                                                                           // 直接显示的是家目录的内容

drwxr-xr-x    2 0        0            4096 Feb 07  2012 cgi-bin

drwxr-xr-x    3 0        0            4096 Sep 07 14:08 error

drwxr-xr-x    2 0        0            4096 Feb 07  2012 html

drwxr-xr-x    3 0        0            4096 Sep 07 14:08 icons

lftp [email protected]:/> cd ..                                                                                    // cd到上级目录

lftp [email protected]:/> ls                                                                                         // cd并没有执行成功,还是当前家目录

drwxr-xr-x    2 0        0            4096 Feb 07  2012 cgi-bin

drwxr-xr-x    3 0        0            4096 Sep 07 14:08 error

drwxr-xr-x    2 0        0            4096 Feb 07  2012 html

drwxr-xr-x    3 0        0            4096 Sep 07 14:08 icons

lftp [email protected]:/> user lyon xiaowu                                                          // 使用lyon用户登录(此用户并没有写入可登录列表中)

lftp [email protected]:~> ls                                                                                        // 登录失败

Interrupt                                   

lftp [email protected]:~>

 

注:

服务器报553错误,首先检查目录权限,是否可以访问并修改,再查看selinux是否允许服务访问


你可能感兴趣的:(vsftp)