如果将Linux作为服务器使用,自然ftp服务器绝对少不了。
查了一些资料对比,最终选择vsftpd。安装倒是简单,apt-get即可。
可安装完后,就开始折腾配置了。
首先,帐号的管理。vsftpd可以通过本地帐户登陆,或者pam虚拟用户方式。
对于pam,还不太了解这东西,先扔一边吧。
整理了一些个人认为比较重要的配置:
配置名称 | 示例值 | 说明 |
anonymous_enable | YES | 接受匿名用户 |
no_anon_password | YES | 匿名用户login时不询问口令 |
anon_root | 匿名用户主目录 | |
ftp_username | ftp | 定义匿名登入的使用者名称 |
local_enable | YES | 接受本地用户 |
local_root | /home/www | 本地用户主目录 |
userlist_enable | YES | 若启用此选项,userlist_deny选项才被启动 |
userlist_deny | NO | 若为YES,则userlist_file中的用户将不能登录,为NO则只有userlist_file的用户可以登录 |
userlist_file | 当userlist_enable设置为YES时所查询文件的文件名 | |
write_enable | YES | 可以上传(全局控制) |
local_umask | 022 | 本地用户上传文件的umask |
file_open_mode | 0666 | 上传文件的权限配合umask使用 |
listen | YES | 若设置为YES,则会使vsftpd在独立模式下运行;而若设置为NO,则会使其在普通模式下运行 |
listen_address | 在独立模式下,指定vsftpd用来监听入站连接请求的那个本地接口的IP地址 | |
listen_port | 21 | 在独立模式下,指定vsftpd用来监听入站连接请求的端口 |
max_clients | 0 | 在独立模式下,指定客户端的最大数目。零(0)表示客户端数目不受限制 |
max_per_ip | 0 | 在独立模式下,指定来自同一个IP地址的客户端最大数目。零(0)表示来自同一个IP地址的客户端数目不受限制。 |
chroot_list_enable | YES | 开启chroot监牢功能 |
chroot_list_file | 指定的监牢用户清单文件 | |
chroot_local_user | YES | chroot监牢每个用户于自己的根目录 |
| ||
user_config_dir | 用户配置目录。在此目录中每个文件名对应一个用户名。可覆盖 |
首先对默认配置的修改,关闭匿名用户,打开本地用户登陆,write_enable打开,即可上传文件。
这些都是比较容易理解的。
接着就是chroot监牢功能的理解。假设有用户abc,ftp登陆后,默认配置的情况下,会进到/home/abc目录下,即用户的主目录。
而且用户可以浏览根目录 / 以及切换到整个系统中的任意目录。这样的配置绝对不安全。而chroot的目的就是为了解决这种情况。
当chroot_list_enable打开后,用户登陆FTP以后,也会进到/home/abc目录下,但不同的是,在FTP上看到的并不是/home/abc,而直接就是/。也就是说,chroot把/home/abc替换成为根目录/了,所以用户就不再可能往上一级目录浏览。意思也就是说,打开chroot后,用户就被死死的限制在/home/abc目录下,就像一个监牢。
同时有一个配置,也就是local_root。它指定了用户登陆后所进入的目录,也就是如果指定了local_root,就不会是默认情况下进入用户主目录。
完成以上修改后,还会有一个问题,也就是最新版本的vsftpd,当启用chroot后,chroot的根目录不允许是可写的属性。否则登陆就失败。而通常用户的主目录即/home/abc却都是可写的,所以我在这点上也郁闷了好一阵。
所以只好采取在根目录下先建好一个子目录,让这个子目录属性为可写。
最后还有一个很重要的配置,就是user_config_dir。它指定了一个目录,在该目录下可包含不同用户的不同配置。假设用abc帐户登陆,则vsftpd就会加载该目录下名为abc的文件。这样的话,我们就可以为每一个用户建立不同的配置。例如给用户A指定local_root目录为 目录A,为用户B指定local_root为 目录B。这样两个用户登陆FTP后,看到的目录是不一样的。
折腾了好久,总算对vcftpd的配置有一定的了解了。下一步再了解一下结合pam控制帐户吧