vsftpd服务器的三种登陆方式

ftp服务搭建:


yum install vsftpd -y

anonymous_enable=NO

local_enable=NO

chroot_local_user=YES

chroot_list_enable=YES

# (default follows)

chroot_list_file=/etc/vsftpd/chroot_list

cd /etc/vsftpd/

vim chroot_list 定义哪些用户可以登录FTP服务

ftpuser1

ftpuser2

ftpuser4

ftpuser5

保存退出


useradd ftpuser3 -s /sbin/nologin 创建用户并指定家目录


passwd ftpuser3

Changing password for user ftpuser3.

New password: 密码

BAD PASSWORD: it is WAY too short

BAD PASSWORD: is too simple

Retype new password: 密码

passwd: all authentication tokens updated successfully.

service vsftpd restart 重启服务

-----------------------------------------------------------
配置文件的简介:


anonymous_enable=YES 是否允许匿名用户登录FTP服务器,默认是允许的

anon_upload_enable=YES 是否允许匿名用户上传文件,默认是不允许的。

local_enable=YES 是否允许本地用户登录FTP服务器,默认是允许,但是系统登陆访问的是自己的家目录。

write_enable=YES 是否允许用户具有在FTP服务器文件中执行写的权限,默认是允许

local_umask=022 设置本地用户的上传文件时生成掩码为022。

anon_mkdir_write_enable=YES 是否允许匿名账户在FTP服务器中创建目录

dirmessage_enable=YES 激活目录信息,当远程用户更改目录时,将出现提示信息

xferlog_enable=YES 启用上传和下载日志功能

connect_from_port_20=YES 启用FTP数据端口的连接请求

xferlog_std_format=YES 设置日志文件的文件名和存储路径,这是默认的

chroot_local_user=YES 如果希望用户登录后不能切换到自己目录以外的其它目录,需要设置该项

chroot_list_enable=YES 那么只允许/etc/vsftpd.chroot_list中列出的用户具有锁定家目录的功能,同时添加底下那一行。

chroot_list_file=/etc/vsftpd/chroot_list 指定chroot_list文件在哪

listen=YES 使vsftpd 处于独立启动模式

chown_uploads=YES 改变上传文件的属主属组

chown_username=whoever 改变成哪个属主和属组

pam_service_name=vsftpd 设置PAM认证服务的配置文件名称,该文件存放在/etc/pam.d/目录下.

userlist_enable=YES 用户列表中的用户是否允许登录FTP服务器,默认是不允许

userlist_deny=YES|NO 等于YES时user_list文件是黑名单,即在这个文件中的用户不能登陆ftp服务器,如果等于NO时user_list文件是白名单,即这个文件中的用户才能登陆ftp服务。

tcp_wrappers=YES 使用tcp_wrqppers作为主机访问控制方式


============================================================================================================================


匿名用户的上传文件和创建目录:


修改配置文件:

anonymous_enable=YES 允许匿名用户登陆

anon_upload_enable=YES 允许匿名用户上传文件

anon_mkdir_write_enable=YES #允许匿名用户创建文件

anon_other_write_enable=YES 允许匿名用户删除文件

重启服务

vsftpd的默认访问目录是/var/ftp/pub


到这里之后还不能上传文件,因为vsftpd服务是普通用户运行的,查看


[root@localhost ~]# ps aux|grep vsftpd
root 1672 0.0 0.0 52124 828 ? Ss 23:23 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
nobody 1674 0.0 0.1 54228 1464 ? Ss 23:23 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
ftp 1676 0.0 0.1 54252 1204 ? S 23:23 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root 1678 0.0 0.0 103312 876 pts/0 S+ 23:25 0:00 grep vsftpd


看到是ftp用户运行,普通用户对/var/ftp/pub是没有读写权限的。

不能给/var/ftp/pub这目录的777权限,如果给777就会形成所有的人都有读写权限

所以我们应该创建一个子目录,在子目录中进行上传文件,同时子目录也得提权

所以我们就应该使用setfacl命令和getfacl命令


这样做:

[root@localhost ~]# cd /var/ftp/
[root@localhost ftp]# ls
pub
[root@localhost ftp]# mkdir upload
[root@localhost ftp]# ls
pub upload
[root@localhost ftp]# ll
total 8
drwxr-xr-x. 2 root root 4096 Mar 22 2017 pub
drwxr-xr-x. 2 root root 4096 Apr 14 23:27 upload
[root@localhost ftp]# setfa
setfacl setfattr
[root@localhost ftp]# setfacl -m u:ftp:rwx upload/
[root@localhost ftp]# getfacl upload/
# file: upload/
# owner: root
# group: root
user::rwx
user:ftp:rwx
group::r-x
mask::rwx
other::r-x

[root@localhost ftp]# pwd
/var/ftp

重启服务

在客户端我们可以看到了

客户端执行的命令

[root@localhost ~]# ftp 192.168.0.110
Connected to 192.168.0.110 (192.168.0.110).
220 (vsFTPd 2.2.2)
Name (192.168.0.110:root): ftp
331 Please specify the password.
Password: #匿名用户的密码是一个空格
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/"
ftp> ls #查看木当前目录
227 Entering Passive Mode (192,168,0,110,91,242).
150 Here comes the directory listing.
drwxr-xr-x 2 0 0 4096 Mar 22 2017 pub
drwxrwxr-x 2 0 0 4096 Apr 14 15:33 upload
226 Directory send OK.
ftp> cd upload #切换到我们创建的子目录中
250 Directory successfully changed.
ftp> pwd
257 "/upload"
ftp> lcd /etc/ #切换到我们要上传的文件的所在目录,切记一定使用lcd命令
Local directory now /etc
ftp> put passwd
local: passwd remote: passwd
227 Entering Passive Mode (192,168,0,110,209,126).
150 Ok to send data.
226 Transfer complete.
854 bytes sent in 7e-05 secs (12200.00 Kbytes/sec)
ftp> ls #查看上传结果
227 Entering Passive Mode (192,168,0,110,223,25).
150 Here comes the directory listing.
-rw------- 1 14 50 779 Apr 14 15:33 fstab
-rw------- 1 14 50 854 Apr 14 15:48 passwd
226 Directory send OK.
ftp>

 

连接限制:

max_clients:最大连接数

max_per_ip:每个Ip可同时发起的并发请求数;

传输速率:

anon_max_rate: 匿名用户的最大传输速率,单位是字节每秒

local_max_rate: 本地用户的最大传输速率,单位字节每秒。

使用虚拟用户登陆:

所有的 虚拟用户会被统一映射为一个指定的系统账号,访问的共享位置即为此系统账号的家目录,

各虚拟用户可被赋予不同的访问权限,

通过匿名用户的权限控制参数进行参考,

虚拟用户账号的存储方式:

文件:编辑文件

奇数行为用户名

偶数行为密码:

此文件需要被编码为hash格式:

二种方式:

关系型数据库中的表中;

及时查询数据库完成用户认证;

mysql

pam要依赖于mysql的pam-msyql的模块。

# mysql和vsftpd在同一台服务器上部署和不在同一台服务器上部署,再次介绍的是在同一台服务器上部署。


安装mysql

mysql> create database vsftpd;
Query OK, 1 row affected (0.00 sec)

mysql> use vsftpd
Database changed
mysql> grant select on vsftpd.* to vsftpd@localhost identified by 'root';
Query OK, 0 rows affected (0.12 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> create table users(
-> id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> name VARCHAR(50) BINARY NOT NULL,
-> password CHAR(48) BINARY NOT NULL);
Query OK, 0 rows affected (0.23 sec)

mysql> DESC users;
+----------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(50) | NO | | NULL | |
| password | char(48) | NO | | NULL | |
+----------+------------------+------+-----+---------+----------------+
3 rows in set (0.08 sec)

mysql> insert into users (name,password) values ('tom',password('root')),('zhang',password('root'));
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> select * from users;
+----+-------+-------------------------------------------+
| id | name | password |
+----+-------+-------------------------------------------+
| 1 | tom | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| 2 | zhang | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
+----+-------+-------------------------------------------+
2 rows in set (0.00 sec)

配置vsftpd

1.建立pam认证所需文件

在这个文件中添加两行(有两种写法)

第一种是直接写用户名host=localhost或者是host=mysql的地址
vim /etc/pam.d/vsftpd.mysql

auth required /lib64/security/pam_mysql.so user=vsftpd passwd=root host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0
account required /lib64/security/pam_mysql.so user=vsftpd passwd=root host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0

第二种写法是host=mysql的套接字

auth required /lib64/security/pam_mysql.so user=vsftpd passwd=root host=/usr/lcoal/mysql/mysqld.sock db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0
account required /lib64/security/pam_mysql.so user=vsftpd passwd=root host=/usr/local/mysql/mysqld.sock db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0


2.修改vsftpd的配置文件,使其适应mysql的认证。

建立虚拟用户映射的系统用户及对应的目录

[root@localhost ~]# useradd -s /sbin/nologin -d /var/ftproot vuser
[root@localhost ~]# chmod go+rw /var/ftproot #记得给权限

[root@localhost ~]# egrep -v '^#|^$' /etc/vsftpd/vsftpd.conf
anonymous_enable=YES #自己实验感觉应该把YES改成NO这样就形成只能使用虚拟用户登陆
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
listen=YES
pam_service_name=vsftpd.mysql
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES
guest_username=vuser

开放虚拟用户的不同权限:

1.配置vsftpd为虚拟用户使用配置文件的目录

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf

在最后添加

user_config_dir=/etc/vsftpd/vuser #可以随意其名称

2.创建所需的目录,并为每个虚拟用户提供配置文件

[root@localhost ~]# mkdir /etc/vsftpd/vuser

cd /etc/vsftpd/vuser

3.为每个用户提供配置文件

[root@localhost ~]# ls /etc/vsftpd/vuser/
tom zhang

[root@localhost ~]# cat /etc/vsftpd/vuser/tom tom用户能够上传,下载和删除,创建目录
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES


[root@localhost ~]# cat /etc/vsftpd/vuser/zhang zhang用户不可以上传,下载和删除,创建目录
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO

到此讲述了vsftpd的三种登陆方式的介绍和使用

posted @ 2018-04-15 15:32  迷路的大雁  阅读(2347)  评论(0编辑  收藏  举报