利用VSFTP架设Linux下的FTP站点
/etc/init.d/vsftpd restart
停止服务
/etc/init.d/vsftpd stop
也可以使用 rcconf 工具设置vsftpd 服务是否在系统引导时启动
6. 配置示例
一个示例文件
# 以独立模式启动 listen=YES #同时允许200客户端连入,每个IP最多允许4个进程 max_clients=200 max_per_ip=4 允许匿名访问,只有下载权限。 禁止本地(系统)用户登录 # Access rights anonymous_enable=YES local_enable=NO write_enable=NO anon_upload_enable=NO anon_mkdir_write_enable=NO anon_other_write_enable=NO # 禁止匿名用户下载具有全局读取权限的文件,目录中的用户和组信息列取时都显示为 "ftp". #被动模式下,服务器端口范围限制在50000~60000 anon_world_readable_only=YES connect_from_port_20=YES hide_ids=YES pasv_min_port=50000 pasv_max_port=60000 # 生成详细的上载和下载日志,禁止使用"ls -R"命令, xferlog_enable=YES ls_recurse_enable=NO ascii_download_enable=NO async_abor_enable=YES # 以节省资源模式运行(针对 Linux 2.4 内核), #远程客户端最大 FTP 命令间隔超过120秒,或空闲的数据连接超过300秒,都将被断开 #匿名客户端允许的最大数据传输速率50000b/s one_process_model=YES idle_session_timeout=120 data_connection_timeout=300 anon_max_rate=50000
7. 为VSFTPD配置虚拟用户(文本方式)
7.1 创建虚拟与用户数据库
1. 创建loguser.txt,格式如下:
userid pass
比如我创建两个用户:tony 密码为tonypass,etony密码为etonypass 则loguser.txt的内容如下:
tony tonypass etony etonypass
2. 安装数据库生成工具:
# aptitude install libdb3-util
3. 生成数据库:
# db_load -T -t hash -f loguser.txt /etc/vsftpd_login.db
4. 设置数据库文件的访问权限:
# chmod 600 /etc/vsftpd_login.db
7.2 配置PAM文件
修改/etc/pam.d/vsftpd 内容如下:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login account required /lib/security/pam_userdb.so db=/etc/vsftpd_login
7.3 为虚拟用户创建本地系统用户
useradd -d /home/ftpsite virtual mkdir /home/ftpsite chown virtual.virtual /home/ftpsite ls -ld /home/ftpsite drwxr-sr-x 2 virtual virtual 48 2006-08-18 05:48 /home/ftpsite
在目录下创建一些内容
echo "etony's vsftpd server" > /home/ftpsite/msg chown virtual.virtual /home/ftpsite/msg
7.4 创建/etc/vsftpd.conf
根据需要创建/etc/vsftpd.conf,但要确保含有一下设置:
anonymous_enable=NO local_enable=YES write_enable=NO anon_upload_enable=NO anon_mkdir_write_enable=NO anon_other_write_enable=NO chroot_local_user=YES guest_enable=YES guest_username=virtual listen=YES listen_port=21 pasv_min_port=30000 pasv_max_port=30999
7.5 启动vsftpd
/etc/init.d/vsftpd start|restart
7.6 测试
$ lftp localhost -u tony,tonypass lftp tony@localhost:~> ls -rw-r--r-- 1 1001 1001 22 Aug 17 21:49 msg lftp tony@localhost:/> exit $ lftp localhost -u tony,tonyp lftp tony@localhost:~> ls ls: Login failed: 530 Login incorrect.
8. 为VSFTPD配置虚拟用户(数据库方式)
8.1 安装MySQL数据库
# aptitude install mysql-server libpam-mysql
当前MySQL数据库版本为5.0.24-1 libpam-mysql 0.6.2-1
tonybox:/var/log# mysql -u rootWelcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 7 to server version: 5.0.22-Debian_4-logType 'help;' or '\h' for help. Type '\c' to clear the buffer.mysql>mysql>mysql> create database vsftpd;Query OK, 1 row affected (0.04 sec)mysql> use vsftpdDatabase changedmysql> create table users(name char(20), passwd char(20));Query OK, 0 rows affected (0.02 sec)mysql> insert into users values('tony',password('passtony'));Query OK, 1 row affected (0.02 sec)mysql> insert into users values('etony',password('passetony'));Query OK, 1 row affected (0.01 sec)mysql> grant select, insert on vsftpd.users to vsftpduser@localhost identified by 'vsftpdpass';Query OK, 0 rows affected (0.02 sec)
8.2 创建用户
tonybox:/var/log# mysql -u vsftpduser -pEnter password:Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 10 to server version: 5.0.22-Debian_4-logType 'help;' or '\h' for help. Type '\c' to clear the buffer.mysql> use vsftpdReading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql> select * from users;+----+-------+------------------+| id | name | passwd |+----+-------+------------------+| 1 | tony | 2351315b1bd1bd58 || 2 | etony | 59c0cde4781fb0be |+----+-------+------------------+2 rows in set (0.00 sec)mysql>
8.3 配置PAM文件
修改/etc/pam.d/vsftpd 内容如下:
auth required /lib/security/pam_mysql.so user=vsftpduser passwd=vsftpdpass host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=2account required /lib/security/pam_mysql.so user=vsftpduser passwd=vsftpdpass host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=passwd crypt=2
crypt 的值
0: 在数据库中明文存储 1: 使用crypt()函数加密存储 2: 使用MySQL PASSWORD()函数加密存储
8.4 其他配置
同 为VSFTPD配置虚拟用户(文本方式)
8.5 测试
tonybox:~# lftp localhost -u etony,passetony lftp etony@localhost:~> ls -rw-r--r-- 1 1001 1001 22 Aug 17 21:49 msg lftp etony@localhost:/>
注:
与mysql-server-5.0对应的libpam-mysql由于使用的PASSWORD()函数与服务器端使用的PASSWORD()不匹配, 故无法实现密码加密,仅可实现在数据库中明文存储ftp用户密码。 mysql-server-4.1 与 libpam-mysql( 0.5.0-6)可以实现在数据库中使用加密存储ftp用户密码
9. 关于日志
libpam-mysql 0.6.2-1模块仍然不是很完善 等待添加... ...
10. FAQ
http://www.vsftpdrocks.org/faq/ 中文版参阅:http://wolfg.iblog.cn/index.phpp=ViewArticle$articleId=50969
Q) 为什么设置了chroot_local_user=YES后,符号链接(symlink)就不起作用了呢?
A) 这是chroot()这种安全机制如何工作的结果。可选地,看一下硬连接(hard links),或者,你用的是"现代的"Linux,看一下强大的"mount --bind"命令。
Q) 求助!我得到了"refusing to run with writable anonymous root"错误信息。
A) vsftpd是不允许"危险(不安全)"的配置的。出现这个错误信息的原因通常是ftp的家(home)目录的属主权限不正确。 家(home)目录的属主不应该是ftp用户自己,而且ftp用户也不能有写的权限。解决的方法是: chown root ftp; chmod -w ftp
Q) 求助!上传或其他"写"命令都报"500 Unknown command.".
A) 默认情况下"写"命令(上传和建新目录等)都是被禁止的. 这是一种安全的方法. 要允许写命令需要在配置文件/etc/vsftpd.conf中加入write_enable=YES.
Q) 求助!上传后的文件权限是-rw-------。
A1) 根据上传用户是本地用户还是匿名用户,修改local_umask或anon_umask选项。例如,设置anon_umask=022指定匿名上传的文件权限为-rw-r--r--。注意,22前面的0不能少。
A2) 也可以看看vsftpd.conf的man帮助中的新选项file_open_mode。











文章评论
共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面