-----------------------------------------------------------------------------------------------------------
虚拟用户登录(使用db4.8数据库文件)
-----------------------------------------------------------------------------------------------------------
http://wiki.ubuntu.org.cn/Vsftpd%E8%99%9A%E6%8B%9F%E7%94%A8%E6%88%B7%E8%AE%BE%E7%BD%AE
1,安装vsftpd
apt-get instasll vsftpd
2,安装数据库生成工具
apt-get install db4.8-util
3,建立用户清单
vim /home/loguser.txt
test
test
4,生成数据库
sudo db4.8_load -T -t hash -f /home/loguser.txt /etc/vsftpd_login.db
sudo chmod 600 /etc/vsftpd_login.db
5,配置验证资料
vim /etc/pam.d/vsftpd
auth required pam_userdb.so db=/etc/vsftpd_login account required pam_userdb.so db=/etc/vsftpd_login其它全部注释
6,创建本地用户,以管理虚拟用户
sudo useradd vsftpd -d /home/vsftpd -s /bin/false sudo chown vsftpd:vsftpd /home/vsftpd
ps.用户登录终端设为/bin/false(即使之不能登录系统)
http://www.cnblogs.com/Kevin_z/articles/VSFTP.html
设置相应目录的权限
chmod 700 /home/vsftpd
7,vsftpd.conf相应设置
vim /etc/vsftpd.conf
listen=YES anonymous_enable=NO dirmessage_enable=YES xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log xferlog_std_format=YES
chroot_local_user=YES guest_enable=YES
guest_username=vsftpd
#每个用户相应的设置文件 user_config_dir=/etc/vsftpd_user_conf pam_service_name=vsftpd.vu local_enable=YES
#debian中略有不同
secure_chroot_dir=/var/run/vsftpd
8,各人明细权限
sudo mkdir /etc/vsftpd_user_conf cd /etc/vsftpd_user_conf sudo touch db1 db2 db3
普通用户
local_root=/home/vsftpd/dbzh1
高级用户
write_enable=YES anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/home/vsftpd/dbzh3
ps.
1.须建立相应的用户文件夹,并设置vsftpd用户权限
2.这里要注意不能有空格
9,pasv被动模式
http://cwalet.iteye.com/blog/1143382
http://blog.csdn.net/fancsxx/article/details/5933669
http://linux.chinaunix.net/techdoc/net/2009/07/17/1124855.shtml
pasv_enable=yes
设置是否允许pasv模式
pasv_promiscuous=no
是否屏蔽对pasv进行安全检查,(当有安全隧道时可禁用)
pasv_max_port=10240
pasv使用的最大端口
pasv_min_port=1024
pasv使用的最小端口
10.删除chroot的写入权限
http://www.linuxdiyf.com/viewarticle.php?id=275431
http://my.oschina.net/chinesedragon/blog/62126
解决办法1:
去掉该用户根目录的写的权限,再新建一目录,以后用新目录
#sudo chmod a-w /home/用户名
#sudo mkdir /home/用户名/新目录名
其实很不方便,用户登陆进去会发现必须要再进一层目录才能找到自己的文件
google了下:500 OOPS: vsftpd: refusing to run with writable root inside chroot()
发现是新版的vsftpd为增强安全性,不允许chroot的目录具有写权限。
我勒了去,难道不允许写就增强了安全性了吗,只是增加的用户的麻烦度而已。
-----------------------------------------------------------------------------------------------------------
在此基础上改为mysql数据库设置用户登录
-----------------------------------------------------------------------------------------------------------
1,安装数据库
apt-get install myql-server libpam-mysql
2,创建表,及数据库管理权限
password varchar(40) not null,
primary key(username))
type=myisam;
mysql>
grant select on ftpvuser.users to
ftpguest@localhost
identified by '123456';
mysql> flush privileges;
mysql>
insert into users(username,password)
values('test','test');
mysql> quit
3,设置验证插件
vim /etc/pam.d/vsftpd
将以前的内容注释掉,然后添加下面2行内容
auth required pam_mysql.so user=ftpguest passwd=YourPassword host=localhost db=ftpvuser table=users usercolumn=username passwdcolumn=password crypt=0
account required pam_mysql.so user=ftpguest passwd=YourPassword host=localhost db=ftpvuser table=users usercolumn=username passwdcolumn=password crypt=0
ps.此项只是将验证插件改为更为灵活的mysql,其余权限设定,均与上相同
-------------------------------------------------------------------------------------------------------
以下为旧资料
--------------------------------------------------------------------------------------------------
1,安装vsftpd
http://linux.vbird.org/linux_server/0410vsftpd.php#theory_pasv
apt-get install vsftpd
2,设置conf
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 1. 與匿名者相關的資訊,在這個案例中將匿名登入取消:
anonymous_enable=NO
# 2. 與實體用戶相關的資訊:可寫入,且 umask 為 002 喔!
local_enable=YES
write_enable=YES
local_umask=002
userlist_enable=YES
userlist_deny=YES
userlist_file=/etc/vsftpd/user_list <==這個檔案必須存在!還好,預設有此檔案!
信息
[root@www ~]# vim /etc/vsftpd/welcome.txt
歡迎光臨本小站,本站提供 FTP 的相關服務!
主要的服務是針對本機實體用戶提供的,
若有任何問題,請與鳥哥聯絡!
禁止访问用户
[root@www ~]# vim /etc/vsftpd/user_list
root
bin
....(底下省略)....
/etc/vsftpd/ftpusers
這兩個檔案的內容是一樣的哩~
/etc/init.d/vsftpd restart
限制目录
# 1. 修改 vsftpd.conf 的參數值:
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 增加是否設定針對某些使用者來 chroot 的相關設定呦!
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
# 2. 建立不被 chroot 的使用者帳號列表,即使沒有任何帳號,此檔案也是要存在!
[root@www ~]# vim /etc/vsftpd/chroot_list
vbird
dmtsai
[root@www ~]# /etc/init.d/vsftpd restart
3,将user_list修改为可访问用户
[root@www ~]# vim /etc/vsftpd/vsftpd.conf
# 這幾個參數必須要修改成這樣:
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
[root@www ~]# /etc/init.d/vsftpd restart
則此時『寫入 /etc/vsftpd/user_list 變成可以使用 FTP 的帳號』了!
4,由于是NAT内,将PASV改为PORT模式
http://hi.baidu.com/blassyiu/blog/item/3a33e96ca36ca0f2421694e4.html
port_enable=YES|NO
如果你要在数据连接时取消PORT模式时,设此选项为NO。默认值为YES。
5,添加普通用户
http://linux.vbird.org/linux_basic/0410accountmanager.php#users_adduser_env
useradd abc
passwd abc
mkdir /home/abc
chown abc abc
-----------------------------------------------------------------------------------------------------------
以下为使用MYSQL作虚拟用户的VSFTPD
-----------------------------------------------------------------------------------------------------------
chown ftpguest.nogroup /home/ftp
mysql> create table users(username varchar(20) not null,
-> password varchar(40) not null,
-> primary key(username))
-> type=myisam;
mysql> grant select on ftpvuser.users to
-> ftpguest@localhost
-> identified by '123456';
mysql> flush privileges;
mysql> insert into users(username,password)
-> values('test','test');
mysql> quit
5,
vim /etc/pam.d/vsftpd
将以前的内容注释掉,然后添加下面2行内容
auth required pam_mysql.so user=ftpguest passwd=YourPassword host=localhost db=ftpvuser table=users usercolumn=username passwdcolumn=password crypt=0
account required pam_mysql.so user=ftpguest passwd=YourPassword host=localhost db=ftpvuser table=users usercolumn=username passwdcolumn=password crypt=0
6,
vim vsftpd.conf
#关闭匿名用户访问
#anonymous_enable=YES
#开启本地用户访问
local_enable=YES
#开启虚拟用户访问
guest_enable=YES
guest_username=ftpguest
#将本地用户限制在自己的家目录,这样可避免FTP用户访问到其他的系统目录
chroot_local_user=YES
7,
#mkdir /etc/vsftpd/vsftpd_user_conf
#nano /etc/vsftpd/vsftpd_user_conf/test
anon_world_readable_only=NO
#允许写入,上传以及建立目录
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
8,
$ lftp localhost -u tony,tonypass lftp
#mkdir /home/ftp
2),创建名为ftpguest的本地用户
#useradd ftpguest -d /home/ftp
3),修改FTP家目录的所有者和组
#chown ftpguest.nogroup /home/ftp
4,配置MySQL数据库
1),创建用于存储虚拟用户信息的数据库ftpvuser
#mysqladmin -u root -p create ftpvuser
2),连接数据库
#mysql -u root -p
3)创建用于存储虚拟用户信息的表users
mysql>use ftpvuser; mysql>CREATE TABLE users (username varchar(20) NOT NULL, password varchar(40) NOT NULL, PRIMARY KEY (username)) TYPE=MyISAM;
4)让本地用户ftpguest能读取ftpvuser数据库的users表的内容
注:YourPassword用于设定ftpguest访问数据库的密码.
mysql>grant select on ftpvuser.users to ftpguest@localhost identified by 'YourPassword'; mysql>flush privileges;
5),建立虚拟用户
mysql>insert into users (username,password) values ('normal','555555'); mysql>insert into users (username,password) values ('admin','666666'); mysql>insert into users (username,password) values ('webmaster','777777');
6),完成MySQL的配置
mysql>quit;
1),打开PAM配置文件
#nano /etc/pam.d/vsftpd
2),将以前的内容注释掉,然后添加下面2行内容
注:YourPassword就是刚才在前面设定的ftpguest访问数据库的密码.
auth required pam_mysql.so user=ftpguest passwd=YourPassword host=localhost db=ftpvuser table=users usercolumn=username passwdcolumn=password crypt=0 account required pam_mysql.so user=ftpguest passwd=YourPassword host=localhost db=ftpvuser table=users usercolumn=username passwdcolumn=password crypt=0
1),打开vsftpd的配置文件
#nano /etc/vsftpd.conf
#/etc/init.d/vsftpd stop #/etc/init.d/vsftpd start
2),修改vsftpd.conf文件如下
#关闭匿名用户访问 #anonymous_enable=YES #开启本地用户访问 local_enable=YES #开启虚拟用户访问 guest_enable=YES guest_username=ftpguest #将本地用户限制在自己的家目录,这样可避免FTP用户访问到其他的系统目录 chroot_local_user=YES
3),500 OOPS: cap_set_proc
赶快登录FTP试一下吧,不过为什么无法登录呢?服务器返回错误:500 OOPS: cap_set_proc
Google之,这个错误似乎与SELinux有关,解决办法是加载capability模块:
#modprobe capability
为了让Linux在启动时自动加载此模块,把这个模块放到/etc/modules中即可.
a,激活单个用户配置功能,增加以下配置行到vsftpd的配置文件:
#nano /etc/vsftpd.conf #指定不同用户配置文件的存放路径 user_config_dir=/etc/vsftpd/vsftpd_user_conf
注意:用户的配置文件名与用户名一致,不过匿名用户的配置文件名为ftp,而不是anonymous
#mkdir /etc/vsftpd/vsftpd_user_conf #nano /etc/vsftpd/vsftpd_user_conf/normal
anon_world_readable_only=NO #允许写入,上传以及建立目录 write_enable=YES anon_upload_enable=YES anon_mkdir_write_enable=YES
管理员除了拥有普通用户的权限以外,还拥有删除/重命名/改变文件属性的权限
加入以下内容:
#允许重命名和删除文件 anon_other_write_enable=YES #虚拟用户拥有与本地用户相同的权限(由于chmod仅仅对本地用户有效,所以如果想要虚拟用户拥有chmod的权限,这一项必须激活) virtual_use_local_privs=YES #允许修改文件属性 chmod_enable=YES
d,网站管理员
加入以下内容:
#将FTP家目录指向网站的家目录(我的www目录使用Apache默认的目录) local_root=/var/www #默认情况下,上传到FTP站点的文件的拥有者都是ftpguest,其他用户是没有访问权限的 #所以,当访问网站的时候,会出现"没有权限访问该文件的错误",这是由于Apache的用户 #www-data无法访问/var/www下的文件造成的,把umask设置成033甚至000即可解决这个问题. local_umask=033
# vi /etc/vsftpd/vsftpd.conf
设置vsftpd为standalone工作模式
listen=YES
tcp_wrappers=YES
启用本地用户:
local_enable=YES
禁用匿名用户:
anonymous_enable=NO
#anon_upload_enable=YES
#anon_mkdir_write_enable=YES
更改FTP默认监听端口21:
添加
##Set the listen_port
Listen_port=5200
设置FTP的PASV模式传输端口,以配合防火墙通过PASV模式传输数据:
添加
##set the pasv ports
port_enable=NO
pasv_enable=YES
pasv_min_port=10021
pasv_max_port=10025
设置FTP服务器最大的并发连接数,默认值为0,表示不限最大连接数。
添加
max_clients=1000
设置每个IP地址最大的并发连接数目,默认值为0,表示不限制。
添加
max_per_ip=10
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.
-----------------------------------------------------------------------------------------------------------
使用虚拟用户登录(pam)
-----------------------------------------------------------------------------------------------------------
http://wiki.ubuntu.org.cn/Vsftpd%E8%99%9A%E6%8B%9F%E7%94%A8%E6%88%B7%E8%AE%BE%E7%BD%AE
1,安装vsftpd
apt-get instasll vsftpd
2,安装数据库生成工具
apt-get install 4.8-util
3,建立用户清单
vim /home/loguser.txt
4,生成数据库
sudo db4.8_load -T -t hash -f /home/loguser.txt /etc/vsftpd_login.db
sudo chmod 600 /etc/vsftpd_login.db
5,配置验证资料
vim /etc/pam.d/vsftpd
auth required pam_userdb.so db=/etc/vsftpd_login account required pam_userdb.so db=/etc/vsftpd_login其它全部注释
6,创建本地用户,以管理虚拟用户
sudo useradd vsftpd -d /home/vsftpd -s /bin/false sudo chown vsftpd:vsftpd /home/vsftpd
ps.用户登录终端设为/bin/false(即使之不能登录系统)
http://www.cnblogs.com/Kevin_z/articles/VSFTP.html
设置相应目录的权限
chmod 700 /home/vsftpd
7,vsftpd.conf相应设置
vim /etc/vsftpd.conf
listen=YES anonymous_enable=NO dirmessage_enable=YES xferlog_enable=YES xferlog_file=/var/log/vsftpd.log xferlog_std_format=YES chroot_local_user=YES guest_enable=YES guest_username=vsftpd
#每个用户相应的设置文件 user_config_dir=/etc/vsftpd_user_conf pam_service_name=vsftpd.vu local_enable=YES
#debian中略有不同 secure_chroot_dir=/var/run/vsftpd
8,各人明细权限
sudo mkdir /etc/vsftpd_user_conf cd /etc/vsftpd_user_conf sudo touch db1 db2 db3
普通用户
local_root=/home/vsftpd/dbzh1
高级用户
write_enable=YES anon_world_readable_only=NO anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES local_root=/home/vsftpd/dbzh3
ps.
1.须建立相应的用户文件夹,并设置vsftpd用户权限
2.这里要注意不能有空格