1)使用yum安装vsftpd
[root@C67-X64-A1 ~]# /etc/init.d/vsftpd start
为 vsftpd 启动 vsftpd: [确定]
[root@C67-X64-A1 ~]# chkconfig vsftpd on
//查看21端口是否开启
[root@C67-X64-A1 ~]# netstat -tulnp| grep 21
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 4169/vsftpd
tcp 0 0 :::23 :::* LISTEN 2321/xinetd
[root@C67-X64-A1 ~]# lsof -i :21
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
vsftpd 4169 root 3u IPv4 18067 0t0 TCP *:ftp (LISTEN)
//备份vsftpd配置文件
[root@C67-X64-A1 ~]# cd /etc/vsftpd/
[root@C67-X64-A1 vsftpd]# cp vsftpd.conf vsftpd.conf.bak
说明:/var/ftp/pub目录默认情况下是只能下载,不允许上传的(不要调整该目录的任何权限)
2)配置有关匿名用户的常用功能
a.默认情况下,使用匿名用户进行测试
分别下载和上传文件进行测试
如上图提示可以知道,下载test.iso,正常;上传的xml提示权限问题,
说明:匿名用户默认是可以下载,但不允许上传资料的。
我们开放匿名用户上传文件的权限:
anon_upload_enable=YES
[root@C67-X64-A1 vsftpd]# cd /var/ftp/pub/
[root@C67-X64-A1 pub]# mkdir -p upload
[root@C67-X64-A1 pub]# ls -ld upload/
drwxr-xr-x 2 root root 4096 8月 24 14:22 upload/
//匿名用户在系统中对应的是ftp用户,通过acl配置,让ftp用户对upload目录具有最大权限
[root@C67-X64-A1 pub]# setfacl -m u:ftp:rwx upload/
[root@C67-X64-A1 pub]# getfacl upload/
# file: upload/
# owner: root
# group: root
user::rwx
user:ftp:rwx
group::r-x
mask::rwx
other::r-x
文件能够上传,但新建目录提示权限问题
在配置文件中添加:anon_mkdir_write_enable=YES
然后我们使用匿名账号在upload下创建一个123的目录
如上图所示,我们正常创建了一个名为123的目录,如果我们想删除名为123的目录
如上图所示,我们删除upload下的123目录,没有删除成功
添加“anon_other_write_enable=YES”命令参数到配置文件中,然后再次删除123目录,成功删除
关于匿名用户配置的小结:
-
anonymous_enable=YES
-
anon_upload_enable=YES(默认没有开启)
-
anon_mkdir_write_enable=YES(默认没有开启,开启后表面可以创建目录)
-
anon_other_write_enable=YES(默认在配置文件中没有这个选项,删除文件)
-
真正的权限=共享权限与文件系统的权限的交集
3)关于本地用户的配置参数
[root@C67-X64-A1 ~]# adduser wanzhixing
[root@C67-X64-A1 ~]# echo wanzhixing | passwd –stdin wanzhixing
更改用户 wanzhixing 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
默认情况下,本地用户登录的ftp的家目录为自己的家目录,比如用户wanzhixing,实际所在的目录为/home/wanzhixing,并且能够上传/下载/创建目录/删除目录和文件(这里我就不截图说明了)
配置信息:
local_enable=YES
write_enable=YES
local_umask=022
从上图信息可以看出,用户并没有禁锢在自己的家目录,这样操作起来就会显得非常不安全,为避免这种现象,我们使用另外一个参数:
chroot_local_user=YES
配置完成后,验证可知被禁锢在自己的目录了,看不到其它目录
本地用户小结:
-
local_enable=YES
-
write_enable=YES
-
local_umask=022
-
chroot_local_user=YES(禁锢所有的ftp本地用户于其家目录中)
-
禁锢文件中指定的用户在其家目录中
-
chroot_list_enable=YES
-
chroot_list_file=/etc/vsftpd/chroot_list
补充信息:
<—————————————————————————————————————–
使用CentOS7配置ftp本地用户添加chroot_local_user=YES参数后,有一个报错信息:
500 OOPS: vsftpd: refusing to run with writable root inside chroot ()
解决方法:
a、从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误。
b、要修复这个错误,可以用命令chmod a-w /home/user去除用户主目录的写权限,注意把目录替换成你自己的。或者你可以在vsftpd的配置文件中增加下列两项中的一项:
allow_writeable_chroot=YES
<—————————————————————————————————————–
4)关于虚拟用户的配置参数
a.所有的虚拟用户会被统一映射为一个指定的系统账号,访问的共享位置即为此系统账号的家目录
b.各虚拟用户可被赋予不同的访问权限:通过匿名用户的权限控制参数进行指定:
c.常见的配置虚拟用户的方式有两种(配置到文本中或者配置到数据库中)
我们本次主要是介绍虚拟用户结合mysql数据库来进行配置:
安装所需要的程序:
[root@C67-X64-A1 ~]# rpm -ivh http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm [root@C67-X64-A1 ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 [root@C67-X64-A1 ~]# yum clean all [root@C67-X64-A1 ~]# yum -y install yum-fastestmirror [root@C67-X64-A1 ~]# yum -y install pam_mysql(需要注意,如果没有合适的yum源,可能没法进行安装) [root@C67-X64-A1 ~]# rpm -ql pam_mysql /lib64/security/pam_mysql.so /usr/share/doc/pam_mysql-0.7 /usr/share/doc/pam_mysql-0.7/COPYING /usr/share/doc/pam_mysql-0.7/CREDITS /usr/share/doc/pam_mysql-0.7/ChangeLog /usr/share/doc/pam_mysql-0.7/NEWS /usr/share/doc/pam_mysql-0.7/README [root@C67-X64-A1 ~]# yum -y install mysql-server mysql-devel pam_mysql 配置数据库相关的信息: [root@C67-X64-A1 ~]# /etc/init.d/mysqld start [root@C67-X64-A1 ~]# /usr/bin/mysqladmin -u root password redhat12345 [root@C67-X64-A1 ~]# mysql -uroot -predhat12345 mysql> create database vsftpd; mysql> grant select on vsftpd.* to vsftpd@localhost identified by 'vsftpd12345'; mysql> grant select on vsftpd.* to vsftpd@127.0.0.1 identified by 'vsftpd12345'; mysql> grant select on vsftpd.* to vsftpd@'10.10.10.129' identified by 'www.magedu.com'; mysql> flush privileges; mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | test | | vsftpd | +--------------------+ 4 rows in set (0.00 sec) mysql> use vsftpd; Database changed mysql> show tables; Empty set (0.00 sec) mysql> create table users ( -> id int AUTO_INCREMENT NOT NULL, -> name char(20) binary NOT NULL, -> password char(48) binary NOT NULL, -> primary key(id) -> ); Query OK, 0 rows affected (0.05 sec) mysql> show tables; +------------------+ | Tables_in_vsftpd | +------------------+ | users +------------------+ 1 row in set (0.00 sec)
创建虚拟用户:
mysql> insert into users(name,password) values('magedu1',password('magedu'));
mysql> insert into users(name,password) values('magedu2',password('magedu'));
mysql> insert into users(name,password) values('wanlong',password('redhat')),('wanzhixing1',password('wanzhixing1'));
mysql> select * from users;
+—-+————-+——————————————-+
| id | name | password |
+—-+————-+——————————————-+
| 1 | magedu1 | *6B8CCC83799A26CD19D7AD9AEEADBCD30D8A8664 |
| 2 | magedu2 | *6B8CCC83799A26CD19D7AD9AEEADBCD30D8A8664 |
| 3 | wanlong | *84BB5DF4823DA319BBF86C99624479A198E6EEE9 |
| 4 | wanzhixing1 | *EF6F8314A516192D2CC241E6A6B24E36B33908AA |
+—-+————-+——————————————-+
4 rows in set (0.00 sec)
配置pam的认证方式:
[root@C67-X64-A1 ~]# vim /etc/pam.d/vsftpd.mysql
auth required /lib64/security/pam_mysql.so user=vsftpd passwd=vsftpd12345 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 account required /lib64/security/pam_mysql.so user=vsftpd passwd=vsftpd12345 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 说明:用户vsftpd,密码vsftpd12345,使用localhost登陆,数据库为vsftpd,表为users crypt=0:表示口令使用明文方式保存在数据库中 crypt=1:表示口令使用UNIX的DES加密方式加密后保存在数据库中 crypt=2:表示口令使用MySQL的password()函数加密后保存在数据库中 crypt=3:表示口令使用MD5散列值的方式保存在数据库中 [root@C67-X64-A1 ~]# useradd -s /sbin/nologin -d /var/ftproot vuser [root@C67-X64-A1 ~]# chmod go+rx /var/ftproot 请确保/etc/vsftpd/vsftpd.conf中已经启用了以下选项 anonymous_enable=NO local_enable=YES write_enable=YES anon_upload_enable=NO anon_mkdir_write_enable=NO chroot_local_user=YES 而后添加以下选项 guest_enable=YES guest_username=vuser 指定访客的身份为vuser。 并确保pam_service_name选项的值如下所示 pam_service_name=vsftpd.mysql
此时用户还只有下载的权限,不能下载,因为默认被映射为匿名用户的权限
5)配置虚拟用户具有不同的访问权限
vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可。
a. 配置vsftpd为虚拟用户使用配置文件目录
# vim vsftpd.conf
添加如下选项
user_config_dir=/etc/vsftpd/vusers_config
b. 创建所需要目录,并为虚拟用户提供配置文件
# mkdir /etc/vsftpd/vusers_config/
# cd /etc/vsftpd/vusers_config/
# touch magedu1 wanzhixing1
c. 配置虚拟用户的访问权限
虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。比如,如果需要让wanzhixing1用户具有上传文件的权限,可以修改/etc/vsftpd/vusers_config/wanzhixing1文件,在里面添加如下选项即可。
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
编辑用户magedu1的权限,设置允许上传、不允许创建目录、不允许删除权限(这里我就不截图演示了) [root@ns1 vusers_config]# cat magedu1 anon_upload_enable=YES anon_mkdir_write_enable=NO anon_other_write_enable=NO
以上的一些案列与配置,基本上涵盖了vsftpd下面的三种用户的应用。具体的操作不不杂,但需要我们去理解场景,做到跟实际需求结合起来。
原创文章,作者:Net21-冰冻vs西瓜,如若转载,请注明出处:http://www.178linux.com/39628