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的三种登陆方式的介绍和使用