最近在linux中经常要上传下载文件,而使用其他服务器上的ftp的时候非常不方便,所以找了台服务器安装,这里选择了比较流行的vsftpd作为服务器端。以下是安装笔记,以便以后查阅。
安装步骤:
1.下载vsftpd(vsftpd-2.0.5.tar.gz )
地址:ChinaUnix下载
2.安装vsftpd
进入安装目录,执行以下命令:
shell>tar xvzf vsftpd-2.0.5.tar.gz
shell>cd vsftpd
编辑builddefs.h文件
shell>vi builddefs.h
文件内容如下:
#ifndef VSF_BUILDDEFS_H
#define VSF_BUILDDEFS_H
#undef VSF_BUILD_TCPWRAPPERS
#define VSF_BUILD_PAM
#undef VSF_BUILD_SSL
#endif /* VSF_BUILDDEFS_H */
将以上undef的都改为define,支持tcp_wrappers,支持PAM认证方式,支持SSL
shell>make
编译之后目录下多了一个可执行文件vsftpd,
shell>ls -la vsftpd
因为vsftp默认需要使用"nobody"这个用户来配置,所以你必须确定你的系统中有这个用户,一般说都会有的,但为了明确起见,执行下述命令
添加nobody用户:
shell>adduser nobody
如果出现adduser: user nobody exists,也不用管
vsftp默认的配置还需要一个空的目录(empty),该目录的绝对路径应该是/usr/share/empty/,另外若ftp 服务器需要匿名用户(anonymous)需要加一个用户ftp,此用户的要求这样:用户目录设为/var/ftp,它是VSFTP的匿名用户的映射本地用户,即指anonymous用户在进程中以ftp用户身分运行进程,但anonymous用户并不继承了ftp用户的文件权限,它只拥有其他组的文件权限。可使用下述的命令完成上面的需求:
shell>mkdir /var/ftp/
shell>useradd -d /var/ftp ftp
如果你的系统已经存在有ftp用户的话,使用下面的命令更改目录属主和用户目录:
shell>chown root.root /var/ftp
shell>chmod og-w /var/ftp
接下来把编译的文件安装到相应目录:
shell>make install
安装之后,在/usr/local/sbin/目录下有vsftpd这个主程序。在/etc/xinetd.d下也有一个vsftpd配置文件,这个文件是由xinetd守护进程启动vsftpd的配置文件。另外你不使用xinetd启动vsftp的话,你应该在/etc/目录下加一个vsftp的配置文件,默认的文件名为/etc/vsftpd.conf,这个文件你可以手动编辑,但在我们的源码目录里已经有一个样本配置文件了,可以直接修改这个文件以满足我们的需求,现在把这个样本配置文件拷贝到这个目录下:
shell>cp vsftpd.conf /etc/
这样在/etc/下有一个配置文件vsftpd.conf了。我们来测试一下VSFTP是否能够正常运行,我们采取使用独立进程而不是xinetd来启动VSFTP,这样要在刚才的文件/etc/vsftpd.conf后面加入一行:
listen=YES
加入之后用下面的命令试试启动VSFTP:
shell>/usr/local/sbin/vsftpd &
接下来测试FTP:
shell>ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 1.2.1)
Name (127.0.0.1:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
这样表示FTP服务器运行正常,使用匿名用户ftp登陆成功,也可以使用anonymous代替用户名ftp,一样可以成功登陆。
3.配置vsftpd
1)本地用户可以访问
按照上面的源码安装配置我们的FTP还不能让本地用户登录,因为缺少一个认证PAM文件,在源码目录下有一个RedHat/vsftpd.pam认证文
件,把它复制到/etc/pam.d/ftp。
shell>cp RedHat/vsftpd.pam /etc/pam.d/ftp
测试一下,假设有一个本地用户test,登录FTP:
#ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 1.2.1)
Name (127.0.0.1:root): test
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
这样表示本地帐户登录成功了。
2)配置匿名用户有浏览,读写,创建目录权限的FTP
这种配置的FTP是极度不安全的FTP,但在某些FTP网站上可能希望能匿名用户能上传文件,因此有必要讲解一下。编辑配置VSFTP的配置文件vsftpd.conf,在文件加入下面几行:
anon_world_readable_only=NO //关闭匿名用户只读权限,这个选项控制匿名用户只能下载具有可读权限的文件,绝不允许有其他权限,特别是写权限,因此要使匿名用户有写权限,应该禁止它
anonymous_enable=YES //允许匿名访问,这是匿名服务器必须的
write_enable=YES //全局配置可写
no_anon_password=YES //匿名用户login时不询问口令
anon_umask=077 //匿名用户上传的文件权限是-rw----
anon_upload_enable=YES //允许匿名用户上传文件
anon_mkdir_write_enable=YES //允许匿名用户建立目录
anon_other_write_enable=YES //允许匿名用户具有建立目录,上传之外的权限,如重命名
测试一下,如果可以上传的话表示设置成功!
3)创建本地用户访问
修改vsftpd.conf
shell> vi /etc/vsftpd-loc.conf
将如下三行加入文件
listen=YES
listen_port=21
tcp_wrappers=YES //支持tcp_wrappers,限制访问(/etc/hosts.allow,/etc/hosts.deny)
listen=YES的意思是使用standalone启动vsftpd,而不是super daemon(xinetd)控制它 (vsftpd推荐使用standalone方式),注意事项请参看匿名用户的配置。 anonymous_enable=NO
local_enable=YES //这两项配置说不允许匿名用户登陆,允许本地用户登陆
测试一下,OK就完成了
