一.简介:
LINUX下实现FTP服务的软件很多,最常见的有vsftpd,Wu-ftpd和Proftp等
访问FTP服务器时需要经过验证,只有经过了FTP服务器的相关验证,用户才能访问和传输文件.vsftpd提供了3种ftp登录形式:
(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
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
news
uucp
operator
games
nobody
四.ftp命令:
FTP>ascii:设定以ASCII方式传送文件(缺省值)
FTP>bell: 每完成一次文件传送,报警提示.
FTP>binary: 设定以二进制方式传送文件.
FTP>bye: 终止主机FTP进程,并退出FTP管理方式.
FTP>case: 当为ON时,用MGET命令拷贝的文件名到本地机器中,全部转换为小写字母.
FTP>cd: 同UNIX的CD命令.
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]指定需要帮助的命令名称。如果没有指定 command,ftp 将显示全部命令的列表。
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 关闭多文件传送中的交互式提示。请参考 prompt、mget、mput 和 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是否允许服务访问