#vi account.txt
zhangsan
1234
lisi
4321
wangwu
5678
#db_load -T -t hash -f ./account.txt /etc/vsftpd/account.db
#chmod 600 /etc/vsftpd/account.db
#vi /etc/pam.d/vsftp.vu
auth required /lib/security/pam_userdb.sodb=/etc/vsftpd/account
account required /lib/security/pam_userdb.sodb=/etc/vsftpd/account
#useradd -d /ftpsite virtual_user
#chmod 700 /ftpsite
#su - virtual_user
$vi /ftpsite/mytest
This is a test file.
$su - root
anonymous_enable=NO
local_enable=YES
local_umask=022
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
one_process_model=NO
chroot_local_user=YES
ftpd_banner=Welcom to my FTP server.
anon_world_readable_only=NO
guest_enable=YES
guest_username=virtual_user
pam_service_name=vsftp.vu
# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 Welcom to my FTP server.
Name (127.0.0.1:root): zhangsan
331 Please specify the password.
Password:
230 Login successful. Have fun.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> get mytest
local: mytest remote: mytest
227 Entering Passive Mode (127,0,0,1,159,19)
150 Opening BINARY mode data connection for mytest (21bytes).
226 File send OK.
21 bytes received in 0.00038 secs (54 Kbytes/sec)
ftp> !ls
account.db
ftp> put vsftpd.conf
local: vsftpd.conf remote: vsftpd.conf
227 Entering Passive Mode (127,0,0,1,117,203)
150 Ok to send data.
226 File receive OK.
4229 bytes sent in 0.00195 secs (2.1e+03 Kbytes/sec)
# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 Welcom to my FTP server.
Name (127.0.0.1:root): user1
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.
#vi /etc/user_config_dir/gou
write_enable=NO
anono_upload_enable=NO
admin的配置文件是/etc/vsftpd_user_conf/admin
local_root=/home/ftpsite
download的配置文件是/etc/vsftpd_user_conf/download
local_root=/home/ftpsite/download
upload的配置文件是/etc/vsftpd_user_conf/upload
local_root=/home/ftpsite/upload
每个用户可以单独在自己的配置文件中设置各自的权限。
anonymous_enable=YES #是否启用匿名用户
no_anon_password=YES #匿名用户login时不询问口令
下面这四个主要语句控制这文件和文件夹的上传、下载、创建、删除和重命名。
anon_upload_enable=(yes/no);
anon_world_readable_only=(yes/no);
anon_mkdir_write_enable=(yes/no);
anon_other_write_enable=(yes/no);
注:匿名用户下载是使用的是nobody这个用户,所以相应的O这个位置要有R权限才能被下载。若想让匿名用户能上传和删除权限,必需设置
write_enable=YES
anon_root=(none)
anon_max_rate=(0)
anon_umask=(077)
chown_uploads=YES
chown_username=whoever
#################本地用户权限控制###############
write_enable=YES
local_umask=022
userlist_enable=YES
local_root
user_config_dir
download_enable
chown_uploads=YES
chown_username=whoever
chroot_list_enable=YES #如果启动这项功能,则所有列在chroot_list_file之中的使用者不能更改根目录
chroot_list_file=/etc/vsftpd/chroot_list #指定限制的用户文件
user_config_dir=
可以通过以下三条配置文件来控制用户切换目录。
chroot_list_enable=YES/NO
chroot_list_file=/etc/vsftpd/chroot_list
chroot_list_enable=YES
通过与chroot_local_user=YES/NO搭配能实现以下几种效果:
1、当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd.chroot_list文件中列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录。
2、当chroot_list_enable=YES,chroot_local_user=NO时,在/etc/vsftpd.chroot_list文件中列出的用户,不能切换到其他目录;未在文件中列出的用户,可以切换到其他目录。
3、当chroot_list_enable=NO,chroot_local_user=YES时,所有的用户均不能切换到其他目录。
4、当chroot_list_enable=NO,chroot_local_user=NO时,所有的用户均可以切换到其他目录。
下面是个实例,希望对大家有用:
1、只能上传。不能下载、删除、重命名。
cmds_allowed=FEAT,REST,CWD,LIST,MDTM,MKD,NLST,PASS,PASV,PORT,PWD,QUIT,RMD,SIZE,STOR,TYPE,USER,ACCT,APPE,CDUP,HELP,MODE,NOOP,REIN,STAT,STOU,STRU,SYST
对于参数的详细的解释
cmds_allowed=ABOR,ACCT,APPE,CWD,CDUP,DELE,HELP,LIST,MODE,MDTM,MKD,NOOP,NLST,PASS,PASV,PORT,PWD,QUIT,REIN,RETR,RMD,RNFR,RNTO,SITE,SIZE,STOR,STAT,STOU,STRU,SYST,TYPE,USER
CWD - change working directory 更改目录
DELE - delete a remote file 删除文件
LIST - list remote files 列目录
MKD - make a remote directory 新建文件夹
NLST - name list of remote directory
PWD - print working directory 显示当前工作目录
RETR - retrieve a remote file 下载文件
RMD - remove a remote directory 删除目录
RNFR - rename from 重命名
RNTO - rename to 重命名
STOR - store a file on the remote host 上传文件
# 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
2、只能下载。不能上传、删除、重命名。write_enable=NO
3、只能上传、删除、重命名。不能下载。download_enable=NO
4、只能下载、删除、重命名。不能上传。
cmds_allowed=FEAT,REST,CWD,LIST,MDTM,MKD,NLST,PASS,PASV,PORT,PWD,QUIT,RMD,RNFR,RNTO,RETR,DELE,SIZE,TYPE,USER,ACCT,APPE,CDUP,HELP,MODE,NOOP,REIN,STAT,STOU,STRU,SYST
###################虚拟用户设置###################
虚拟用户使用PAM认证方式。
pam_service_name=vsftpd
check_shell=YES
guest_enable= YES/NO
guest_username=ftp
virtual_use_local_privs=YES/NO
###################访问控制设置###################
两种控制方式:一种控制主机访问,另一种控制用户访问。
1、控制主机访问:
tcp_wrappers=YES/NO
设置vsftpd是否与tcpwrapper相结合来进行主机的访问控制。默认值为YES。如果启用,则vsftpd服务器会检查/etc/hosts.allow和/etc/hosts.deny中的设置,来决定请求连接的主机,是否允许访问该FTP服务器。这两个文件可以起到简易的防火墙功能。
比如:若要仅允许192.168.10.1—192.168.10.254的用户可以连接FTP服务器,
则在
/etc/hosts.allow
/etc/hosts.deny
文件中添加以下内容:
其格式如下:
限制的服务:ip(网段)
vsftpd:192.168.1.
vsftpd:192.168.1.12
vsftpd:192.168.1.0/255.255.255.0这里不能写成192.168.1.0/24
2、控制用户访问:
vsftpd.ftpusers
vsftpd.user_list
(1)设置禁止vsftpd.user_list文件中的用户登录:要在主配置文件vsftpd.conf中修改如下两项,
userlist_enable=yes
userlist_deny=yes
说明:配置完以后,除了vsftpd.ftpusers文件和vsftpd.user_list文件中记录的ftp用户不能登录vsftp服务以外,其他的ftp用户都可以登录。
(2)设置只允许vsftpd.user_list文件中的用户登录;同样的道理要把主配置文件vsftpd.conf中的语句修改如下两项:
userlist_enable=yes
userlist_deny=no
###################超时设置##################
idle_session_timeout=600
data_connection_timeout=120
ACCEPT_TIMEOUT=60
connect_timeout=60
################服务器功能选项###############
xferlog_enable=YES
xferlog_std_format=YES
log_ftp_protocol=NO
pasv_enable=YES
pasv_promiscuous+NO
port_enable=YES
prot_promiscuous
tcp_wrappers=YES
pam_service_name=vsftpd
nopriv_user=nobody
pasv_address=(none)
#################服务器性能选项##############
ls_recurse_enable=YES
one_process_model
listen=YES
text_userdb_names=NO
use_localtime=NO
#use_sendfile=YES
################信息类设置################
ftpd_banner=welcome to FTP. #login时显示欢迎信息.如果设置了banner_file则此设置无效
dirmessage_enable=YES
setproctitle_enable=YES
############## 文件定义##################
chroot_list_file=/etc/vsftpd/vsftpd.chroot_list
userlist_file=/etc/vsftpd/vsftpd.user_list
banner_file=/etc/vsftpd/banner
banned_email_file=/etc/vsftpd.banned_emails
xferlog_file=/var/log/vsftpd.log
message_file=.message
############## 目录定义#################
user_config_dir=/etc/vsftpd/userconf #定义用户配置文件的目录
local_root=webdisk
anon_root=/var/ftp
#############用户连接选项#################
max_clients=100
max_per_ip=5
connect_from_port_20=YES
listen_address=192.168.0.2
listen_port=2121
ftp_data_port=2020
pasv_max_port=0
pasv_min_port=0
##############数据传输选项#################
anon_max_rate=51200
local_max_rate=5120000
##############安全选项#################
Idle_session_timeout=600
Data_connection_timeout=120
Accept_timeout=60
Connect_timeout=60
Local_max_rate=50000
Anon_max_rate=30000
Pasv_min_port=50000
Pasv_max_port=60000
Max_clients=200
Max_per_ip=4
Listen_port=5555
以上如果有什么不全或错误的地方,请大家与我联系,我及时改进,谢谢
【案例1】建立基于虚拟用户的FTP服务器,并根据以下要求配置FTP服务器。
(1)配置FTP匿名用户的主目录为/var/ftp/anon。下载带宽限制为100kB/s
(2)建立一个名为abc,口令为xyz的FTP账户。下载带宽限制为500kB/s。
(3)设置FTP服务器同时登录到FTP服务器的最大链接数为100;每个IP最大链接数为3;用户空闲时间超过限值为5分钟。
mkdir /var/fpt/anon
useradd abc
passwd abc
vim /etc/vsftpd/vsftpd.conf
主要内容如下
anonymous_enable=YES
anon_root=/var/ftp/anon
anon_max_rate=100
# Uncomment this to allow local users to log in.
local_enable=YES
local_max_rate=500
max_clients=100
max_per_ip=3
connect_timeout=300
以上是本地的LOCAL用户
下面是用虚拟用户来实现
vim /etc/vsftpd/vuser
内容如下
tom
123
生成数据库文件
db_load -T -t hash -f /etc/vsftpd/vuser /etc/vsftpd/vuser.db
chmod 600 /etc/vsftpd/vuser.db
vim /etc/pam.d/vsftpd
注释掉原来的内容
然后加入
auth
account
最后编辑VSFTPD.CONF加入下面两句
guest_enable=YES
guest_username=abc
大家可以自行测试。
到此,案例一完成
【案例2】
1、新建一分区,10G空间,ext3 文件系统,挂在到 /ftp下,作为 ftp服务器数据存放地方。
2、四个部门:dep1,dep2, dep3, dep4,分别对应目录/ftp/dep1,/ftp/dep2,/ftp/dep3,/ftp/dep4。另外设定一个公共目录/ftp/public。
3、五个用户:admin,user1,user2,user3,user4。其中:user1/2/3/4分别对应部门dep1/2/3/4,他们只能访问自己所属部门的目录和public目录。如:user1只能访问dep1和public目录,不能访问其它目录。admin为管理员用户,可以访问ftp 服务器上的任何目录。
4、用户访问权限限制:user1/2/3/4在所能访问的目录,具有上传文件、下载文件的功能,但是不能够删除文件、更改文件权限等功能。admin管理员用户对所有目录具有文件上传、下载、删除、权限更改等功能。
5、对每个部门定制一个quota,设置该账户的文件配额为1000个;磁盘配额为2G。
6、匿名用户不能访问。
第一、增加一块硬盘,然后分区,把分区挂载情况写入/etc/fstab
# fdisk /dev/hdb
# mkfs.ext3 /dev/hdb1
# mkidr /ftp
# mount /dev/hdb1 /ftp -o usrquota,grpquota
# vim /etc/fstab
加入下面一句
/dev/hdb1
第二、建立用户组和用户和相应的文件夹并更改权限,达到题目要求
# groupadd dep1
# groupadd dep2
# groupadd dep3
# groupadd dep4
# groupadd boobooke
# usradd
# usradd
# usradd
# usradd
# usradd
# passwd user1
# passwd user2
# passwd user3
# passwd user4
# passwd admin
# mkdir /ftp/dep1
# mkdir /ftp/dep2
# mkdir /ftp/dep3
# mkdir /ftp/dep4
# mkdir /ftp/public
# chmod uesr1:dep1 /ftp/dep1
# chmod uesr2:dep2 /ftp/dep2
# chmod uesr3:dep3 /ftp/dep3
# chmod uesr4:dep4 /ftp/dep4
# chmod admin:boobooke /ftp/public
# chmod 770 /ftp/dep1
# chmod 770 /ftp/dep2
# chmod 770 /ftp/dep3
# chmod 770 /ftp/dep4
# chmod 770 /ftp/pubic
最终结果如下
-rw------- 1 root
-rw------- 1 root
drwxrwx--- 2 user1 dep1
drwxrwx--- 2 user2 dep2
drwxrwx--- 2 user3 dep3
drwxrwx--- 2 user4 dep4
drwx------ 2 root
drwxrwx--- 2 admin boobooke
第三、创建quota,配置磁盘配额
#mount /dev/hdb1 /ftp -ousrquota,grpquota
# quotacheck -cuvg /dev/sdb1
# quotaon -a
# edquota -g dep1
Disk quotas for group dep1 (gid503):
# edquota -g -p dep1 dep2 dep3 dep4(-u-g将源用户组和群组的quota设置套用至其他用户或群组。)
第四、编辑VSFTPD.CONF
# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
加入
local_root=/ftp
user_config_dir=/etc/vsftpd/ftp_config_dir
开启chroot
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
第五、建立用户的独立文件
# mkdir /etc/vsftpd/ftp_config_dir
# vim /etc/vsftpd/ftp_config_dir/user1
cmds_allowed=ABOR,ACCT,APPE,CWD,CDUP,HELP,LIST,MODE,MDTM,NOOP,NLST,PASS,PASV,PORT,PWD,QUIT,REIN,RETR,SITE,SIZE,STOR,STAT,STOU,STRU,SYST,TYPE,USER
# cp /etc/vsftpd/ftp_config_dir/user1/etc/vsftpd/ftp_config_dir/user2
# cp /etc/vsftpd/ftp_config_dir/user1/etc/vsftpd/ftp_config_dir/user3
# cp /etc/vsftpd/ftp_config_dir/user1/etc/vsftpd/ftp_config_dir/user4
第六、测试