您的位置:首页 > 编程语言 > PHP开发

如何用vsftpd实现用户不同权限:只能下载,可上传,管理权限等

2009-12-10 10:13 971 查看
前提条件:
必须安装包:vsftpd-2.0.1-5
利用虚拟用户可实现不同用户拥有不同权限的要求
第一步:建立本地虚拟用户(Create the local virtual user)
useradd -d /opt/ftp-server virtual
新建virtual用户,指定主目录为/opt/ftp-server(该目录实际存在)

第二步:建立虚拟用户数据库(Create the virtual users database)

用户手工建立文本文件logins.txt (存放/tmp)
logins.txt文件内容
==================
download
123
upload
234
admin
345

注:奇数行为用户名,偶数行为密码.

db3_load -T -t hash -f /tmp/logins.txt /etc/vsftpd_login.db

chmod 600 /etc/vsftpd_login.db

第三步:建立基于vsftpd_login的PAM授权文件(Create a PAM file which uses your new database)[此处也可用mysql建立用户信息]
ftp(存放在/etc/pam.d/)内容如下
==================================
auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd_login

第四步: 建立vsftpd.conf文件(Create your vsftpd.conf config file)
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
user_config_dir=/etc/vsftpd/(虚拟用户库中不同用户的权限文件)
listen=YES
listen_port=10021
pasv_min_port=30000
pasv_max_port=30999
第五步: 建立针对虚拟用户库中不同用户的权限文件(第四步中已指定存放位置)
(virtual主目录下有三个文件夹:download,upload,admin)
download文件内容(只能下载权限)
=====================
local_root=/opt/ftp-server/download
anon_world_readable_only=NO

upload文件内容(可上传权限)
=====================
local_root=/opt/ftp-server/upload
anon_world_readable_only=NO
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
admin文件内容(管理权限)
=====================
local_root=/opt/ftp-server/admin
anon_world_readable_only=NO
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anno_other_writer_enable=YES
第六步: 启动vsftpd(Start up vsftpd)
service vsftpd restart

第七步: 测试(Test)

[root@test vsftpd]# ftp 192.168.1.2 10021
Connected to 192.168.1.2.
220 (vsFTPd 2.0.1)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (192.168.1.2:root): admin
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,1,2,119,247)
150 Here comes the directory listing.
226 Directory send OK.
ftp> pwd
257 "/"
ftp> cd /home
550 Failed to change directory.
ftp>

vsftpd.conf中的参数cmds_allowed=XXXXX
===================================================
此用户可以使用的指令
# ABOR - abort a file transfer
# CWD - change working directory
# DELE - delete a remote file
# LIST - list remote files
# MDTM - return the modification time of a file
# MKD - make a remote directory
# NLST - name list of remote directory
# PASS - send password
# PASV - enter passive mode
# PORT - open a data port
# PWD - print working directory
# QUIT - terminate the connection
# RETR - retrieve a remote file
# RMD - remove a remote directory
# RNFR - rename from
# RNTO - rename to
# SITE - site-specific commands
# SIZE - return the size of a file
# STOR - store a file on the remote host
# TYPE - set transfer type
# USER - send username
#
# less common commands:
# ACCT* - send account information
# APPE - append to a remote file
# CDUP - CWD to the parent of the current directory
# HELP - return help on using the server
# MODE - set transfer mode
# NOOP - do nothing
# REIN* - reinitialize the connection
# STAT - return server status
# STOU - store a file uniquely
# STRU - set file transfer structure
# SYST - return system type
===================================================

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
[mysql建立用户信息]
配置虚拟用户(mysql)
  VSFTPD的本地用户本身是系统的用户,除了可以登录FTP服务器外,还可以登录系统使用其他系统资源,而
VSFTPD的虚拟用户则是FTP服务的专用用户,虚拟用户只能访问FTP服务器资源。对于只需要通过FTP对系统有读
写权限,而不需要其他系统资源的用户或情况来说,采用虚拟用户方式是很适合的。
  VSFTPD的虚拟用户采用单独的用户名/口令保存方式,与系统账号(passwd/shadow)分离,这大大增强了
系统的安全性。VSFTPD可以采用数据库文件来保存用户/口令,如hash;也可以将用户/口令保存在数据库服务器
中,如MySQL等。VSFTPD验证虚拟用户,则采用PAM方式。由于虚拟用户的用户名/口令被单独保存,因此在验证
时,VSFTPD需要用一个系统用户的身份来读取数据库文件或数据库服务器以完成验证,这就是guest用户,这正
如同匿名用户也需要有一个系统用户ftp一样。当然,guest用户也可以被认为是用于映射虚拟用户。
  配置虚拟用户分为几部分:guest用户的创建、用户/口令的保存、PAM认证配置、vsftpd.conf文件设置等
。在后面的例子中,假定存在虚拟用户win和wingger.
1、在系统中添加vsftpdvirtual用户,作为虚拟用户在系统中的代表。
代码:
[root@Linux_win vsftpd]# useradd vsftpdvirtual
  当虚拟用户登录后,所在的位置为vsftpdvirtual的自家目录/home/vsftpdvirtual。
2、配置文件vsftpd.conf: 加入以下内容
guest_enable=YES
guest_username=vsftpdvirtual
virtual_use_local_privs=YES|NO
3、虚拟用户的权限配置。
virtual_use_local_privs参数,
当该参数激活(YES)时,虚拟用户使用与本地用户相同的权限。所有虚拟用户的权限使用local参数。
当此参数关闭(NO)时,虚拟用户使用与匿名用户相同的权限,所有虚拟用户的权限使用anon参数。
这两者种做法相比,后者更加严格一些,特别是在有写访问的情形下。默认情况下此参数是关闭的(NO)。
由于本人的vsftpd为1.1.3,只好用virtual_use_local_privs=NO了:
因此匿名用户的设置即是虚拟用户的设置,在改参数权限时,同时也要修改目录权限
如:让用户不能浏览目录,但仍可以对文件操作且虚拟用户目录的权限改为只能由vsftpdvirtual操作:
代码:
[root@Linux_win vsftpd]# chown vsftpdvirtual.vsftpdvirtual /home/vsftpdvirtual
[root@Linux_win vsftpd]# chmod 700 /home/vsftpdvirtual
由于这些设置对匿名用户生效。最好是禁止匿名用户登录。
在VSFTPD-1.2.0以上版本,当virtual_use_local_privs=YES时,只需write_enable=YES,虚拟用户就可以就拥
有写权限。应该与本地用户使用相同,有兴趣的可以去验证。
如果不同用户使用不同的目录,须加入权限
代码:
chown vsftpdvirtual.vsftpdvirtual /home/win
chown vsftpdvirtual.vsftpdvirtual /home/wingger
4、用MySQL保存虚拟用户
  1、虚拟用户的用户名/口令的保存。这部分在MySQL数据库中完成。
首先,创建数据库vsftpdvirtual以及表users,并插入虚拟用户win、wingger。执行以下命令:
代码:
[root@Linux_win vsftpd]# #mysql -uroot -p
mysql>create database vsftpdvirtual;
mysql>use vsftpdvirtual;
mysql>create table users(name char(16) binary,passwd char(16) binary);
mysql>insert into users (name,passwd) values ('win',password('123456'));
mysql>insert into users (name,passwd) values ('wingger',password('123456'));
mysql>quit
然后,授权vsftpdvirtual只能读vsftpdvirtual数据库的users表。执行以下命令:
代码:
[root@Linux_win vsftpd]# mysql -u root mysql -p
mysql>grant select on vsftpdvirtual.users to vsftpdvirtual@localhost identified by '123456';
mysql>quit
验证刚才的操作是否成功可以执行下面命令:
代码:
[root@Linux_win vsftpd]# mysql -u vsftpdvirtual -p123456 ftpdvirtual
mysql>select * from users;
如果成功,将会列出wing、wingger和加密后的密码。
如下所示:
引用:
mysql> select * from users;
+---------+------------------+
| name | passwd |
+---------+------------------+
| win | 23932fe477657768 |
| wingger | 23932fe477657768 |
+---------+------------------+
2 rows in set (0.00 sec)
  2、设置PAM认证。这里我们要用到一个利用mysql进行pam验证的开源项目(http://sourceforge.net/proj
ects/pam-mysql/)。首先从网站下载它的程序包pam_myql-0.5.tar.gz。在编译安装之前,要确保mysql-devel
的RPM包已经安装在你的机器上,如果没有请从RHL安装光盘中安装该包。然后,执行以下命令:
代码:
[root@Linux_win vsftpd]# tar xvzf pam_mysql-0.5.tar.gz
[root@Linux_win vsftpd]# cd pam_mysql
[root@Linux_win vsftpd]# make
[root@Linux_win vsftpd]# cp pam_mysql.so /bli/security
接下来,我们要设置vsftpd的PAM验证文件。打开/etc/pam.d/vsftpd文件,加入以下内容:
引用:
  auth required pam_mysql.so user=vsftpdvirtual passwd=123456 host=localhost db=vsftpdvirtual
table=users usercolumn=name passwdcolumn=passwd crypt=2
  account required pam_mysql.so user=vsftpdvirtual passwd=123456 host=localhost
db=vsftpdvirtual table=users usercolumn=name passwdcolumn=passwd crypt=2
具体可查看vsftpd源包里的EXAMPLE中的例子。
附:虚拟用户文档
1、vsftpd.conf配置文件
代码:
[root@Linux_win vsftpd]# cat vsftpd.conf
listen=YES
listen_address=192.168.1.2
anonymous_enable=NO
local_enable=YES
write_enable=YES
#anon_root=
anon_upload_enable=YES
anon_other_write_enable=YES
anon_mkdir_write_enable=YES
#anon_world_readable_only=YES
#anon_umask=777
#dirmessage_enable=YES
ftpd_banner=welcome to this FTP server
xferlog_enable=YES
#xferlog_file=/var/log/vsftpd.log
connect_from_port_20=YES
#pasv_mix_port=50000
#pasv_max_port=60000
#xferlog_std_format=YES
max_clients=10
max_per_ip=10
hide_ids=YES
#limit all users in it's owner dir
#chroot_local_user=YES
#or limit some
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
#use ownwer conf file
user_config_dir=/etc/vsftpd/vsftpd_user_conf
pam_service_name=/etc/pam.d/vsftpd
guest_enable=YES
guest_username=vsftpdvirtual
#virtual_use_local_privs=NO
代码:
2、[root@Linux_win vsftpd]# cat /etc/pam.d/vsftpd
#%PAM-1.0
#auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd.ftpusers
onerr=succeed
#auth required pam_stack.so service=system-auth
#auth required pam_shells.so
#account required pam_stack.so service=system-auth
#session required pam_stack.so service=system-auth
auth required /lib/security/pam_mysql.so user=vsftpdvirtual passwd=123456
host=localhost db=vsftpdvirtual table=users usercolumn=name passwdcolumn=passwd crypt=2
account required /lib/security/pam_mysql.so user=vsftpdvirtual passwd=123456
host=localhost db=vsftpdvirtual table=users usercolumn=name passwdcolumn=passwd crypt=2
代码:
3、[root@Linux_win vsftpd]# cat /etc/vsftpd/chroot_list
win
wingger
代码:
4、[root@Linux_win vsftpd]# ls -l /etc/vsftpd/vsftpd_user_conf
总用量 8
-rw-r--r-- 1 root root 21 1月 8 00:25 win
-rw-r--r-- 1 root root 25 1月 8 00:17 wingger
代码:
5、[root@Linux_win vsftpd]# cat /etc/vsftpd/vsftpd_user_conf/win
local_root=/home/win
[root@Linux_win vsftpd]# cat /etc/vsftpd/vsftpd_user_conf/wingger
local_root=/home/wingger
代码:
6、drwx------ 6 vsftpdvirtual vsftpdvirtual 4096 1月 8 00:16 vsftpdvirtual
drwxrwxrwx 5 vsftpdvirtual vsftpdvirtual 4096 1月 8 01:47 win
drwxrwxrwx 3 vsftpdvirtual vsftpdvirtual 4096 1月 8 20:19 wingger
7、版本:(vsFTPd 1.1.3)、pam_mysql-0.5.tar.gz、mysql3.23.54
8、[root@Linux_win vsftpd]# mysql -u vsftpdvirtual -pchenwy vsftpdvirtual
mysql> select * from users;
+---------+------------------+
| name | passwd |
+---------+------------------+
| win | 23932fe477657768 |
| wingger | 23932fe477657768 |
+---------+------------------+
2 rows in set (0.00 sec)

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

官方文档

http://www.vsftpdrocks.org/faq/
(常见问题解决办法)

http://vsftpd.beasts.org

参考文档(各种形式的设置)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: