主要讲了基本常识, 及匿名用户、实体用户,guest用户的建立方法
一、vsftp有两种模式及建立方法:
(一)主动模式:
1、客户端随机用一个大于1024端口A来与ftp服务器的21端口连接。当然要经过3次握手过程(客户端请求、服务器响应、客户端确认)。三次连接后建立起一个命令通道。
完成连接后,客户端就通过此通道对服务器下达上传、下载等命令。
2、客户端当要上传、下载数据时,将随机启用一个端口B,且通过事先建好的命令通道告知FTP服务器客户端要使用的命令及连接数据用的这个端口号B。等待服务器响应。
3、服务器收到后,服务器主动用20端口与客户端B相连传送数据。
即:客户端用一个大于1024的随机端口与FTP服务器的21端口相连,以建命令通道,此通道只传输命令,不传数据。
通道建立好后,客户端需要上传或下载资料时,将再随机启用一个端口号。通过建好的命令通道把这个端口号和命令传给服务器。服务器再用20端口与这个新建的端口响应给客户端。
(二)被动模式:
1、开始也和主动模式一样,客户端先用随机大于1024端口与服务器21端口建立起命令通道。
2、服务器如果能处理处理被动连接(有的服务器不支持被动连接),服务器会自定义一个范围内的端口,或一个随机端口进行监听
3、用命令通道把这个数据端口传给客户端,并等待客户端连接
4、客户端用一个大于1024的随机端口与传过来的服务器端口相连,传输数据。
二、三种用户
客户端访问服务器的用户可分三种用户。
1、匿名用户:只能访问/var/ftp里的目录。所有人都可以访问
2、real用户:真实帐号。即ftp服务器上拥有用户名。(etc/password中的真实的用户名)
这些用户除了可以访问/home/user这些自已的目录外。还能访问ftp服务器上的所有其他目录。此用户不安全,建议不要用。
3、guest用户:虚拟用户,此用户在ftp服务器上拥有帐号(/etc/password中有真实的用户名),但此帐号只能用于文件传输。登录后只能访问自已的宿主目录。(/home/user),宿主目录外的目录无法使用。建议使用这种。
三、相关参数
要先安装pam.d和db4软件,一般系统都已安装。
iptables要打开相应的20,21端口。
vsftp的配置文件在 /etc/vsftpd/vsftpd.conf
注释如下:
anonymous_enable=YES //设定是否允许匿名用户访问
local_enable=YES //设定本地用户可以访问
注意:主要是为虚拟宿主用户,如果该项目设定为NO那么所有虚拟用户将无法访问。
write_enable =YES //是否允许用户具有FTP服务器文件中执行写的权限。默认是有写权限。
local_umask=022 //设定上传后文件的权限掩码。
系统默认:建立的文件默认权限为666。而文件夹的是777,用默认权限减去此处的umask权限,就是建立文件的权限了。不能用简单的减法,而是减去此
处umask代表的权限。
anon_upload_enable=NO //禁止匿名用户上传。
anon_mkdir_write_enable=NO //禁止匿名用户建立目录。
--------全局参数开始-------------------------------
dirmessage_enable=YES //设定开启目录标语功能。
xferlog_enable=YES //设定开启日志记录功能。
connect_from_port_20=YES //设定端口20进行数据连接。
#listen_port =21 //默认是没有此项的,默认就是21端口所以此项可省略。
#chown_uploads=YES //设定禁止上传文件更改宿主。
xferlog_file=/var/log/vsftpd.log//设定Vsftpd的服务日志保存路径。注意,该文件默认不存在。必须要手动touch出来,并且由于这里更改了Vsftpd的服务宿主用户为手动建立的Vsftpd。必须注意给与该
xferlog_std_format=YES //使用标准的日志格式xferlog_enable =YES
xferlog_file=/var/log/xferlog //日志文件的存放地方
idl_session_timeout = 600 //空闲时间。设置空闲用户会话自动中断时间,以秒为单位
data_connection_timeout =120 //设置数据连接超时时间。
nopriv_user=vsftpd //设定支撑Vsftpd服务的宿主用户为手动建立的Vsftpd用户。
注意,一旦做出更改宿主用户后,必须注意一起与该服务相关的读写文件的读写赋权问题。比如日志文件就必须给与该用户写入权限等。
async_abor_enable=YES //设定支持异步传输功能。
ascii_upload_enable=YES
ascii_download_enable=YES //设定支持ASCII模式的上传和下载功能。
ftpd_banner=Welcome to Awei FTP servers //设定Vsftpd的登陆标语。
#max_clients =50 //客户最大连接数
#max_per_ip =5 //每ip最多连接线程。此处是一个IP只能连5个线程
--------------全局参数结束--------------------------
chroot_local_user=YES //禁止本地用户登出自己的FTP主目录。
chroot-list_enable=YES //打开下面的允许访问列表
chroot_lsit_file = /etc/vsftpd/chroot_list //chroot_list文件中的用户可以访问自已宿主目录以外的其他系统目录 。
如这三条配置中,没有 chroot_local_user=YES这一条配置,只有后两条,则结果刚好相反:则只有chroot_list文件中的用户不能访问宿主目录外的系统目录。其他用户都可以访问。
listen =YES //vsftp处理独立启动模式。
pam_service_name=vsftpd //设定PAM服务下Vsftpd的验证配置文件名。因此,PAM验证将参考/etc/pam.d/下的vsftpd文件配置。
tcp_wrappers = YES //用tcp_wrappers作为主机访问控制方式。
(一)与匿名用户相关的参数:
1、基本参数:
anonymous_enable=YES //允许匿名用户的访问
no_anon_password=YES //匿名用户登录时不需要输入密码
local_enable=NO //不允许实体帐户访问,关闭实体帐户访问。
2、匿名用户权限相关的参数:
anon_upload_enable =YES //是否允许匿名用户上传
anon_mkdir_write_enable= YES //是否允许匿名用户创建目录,但不能删除和更改
anon_other_write_enable =YES //开放匿名用户改名、删除文件的权限,一般不要开此权限
anon_world_readable_only =YES //匿名用户拥有读的权限
write_enable =YES //是否允许用户具有FTP服务器文件中执行写的权限。默认是有写权限。
chown_uploads =YES // 所有匿名用户上传上业的文件都自动更改为chown_username中指定的用户名为拥有者
chown_username= root //指定匿名用户上传到服务器上的文件的拥有者。此处指定为所有匿名用户传上来的文件的拥有者都为root用户。这样匿名用户只能上传文件,不能下载。
anon_root=/var/ftp //定义匿名文件登录后的根目,默认是/var/ftp
注:匿名用户身份默认是ftp,所以还要把/var/ftp(默认的匿名用户上传下载的目录)默认为755权限。不要改FTP文件夹的权限,否则会出错。如需要匿名上传的权限的话,最好是在FTP文件夹下建一个文件夹,对子文件夹设置可上传的权限
anon_max_rate = 3000 //匿名用户最大速率
anon_umask=077 //匿名用户上传到服务器上时的文件权限。
(三)与实体用户相关的参数:
1、基本参数:
anonymous_enable=NO
local_enable=YES
write_enable =YES
local_umask=022
2、设置是否允许登录ftp服务器的列表
userlist_enable= YES //用户列表中的用户是否允许访问ftp服务器。
userlist_deny=YES //此处为YES,下面的才生效。
userlist_file = /etc/vsftpd/user_list //此文件中的用户将被拒绝登录ftp服务器。以上配置为拒绝某些用户登录ftp服务器。
userlist_deny =NO 时,只有vsftpd.userlist中的用户才能登录ftp服务器。
pam_service_name=vsftpd
3、目录限制:
chroot_local_user=YES
chroot-list_enable=YES
chroot_lsit_file = /etc/vsftpd/chroot_list
local_max_rate = 1000000 //实体用户的最大速率
(三)guest虚拟用户相关的参数:
1、增加实体帐号和家目录:
每一个虚拟帐号对应一个实际帐号。也可把多个虚拟帐号对应一个实际帐号。并指定实体帐号的主目录。 并更改对应主目录的权限。
例:
useradd -d /home/ftp -s /sbin/nologin khp //建立实体帐号khp,且家目录为/home/ftp,此目录将为以后ftp上传下载文件的地方。 -s /sbin/nologin表示不允许实体帐号登入。
chmod 700 /home/ftp //修改目录的权限。
2、生成虚拟用户口令库文件。最好有 /etc/vsftpd目录下。
例:
建立一个虚拟帐号文件,并建立帐号和密码,单行为用户名,双行为密码,然后用db_load命令把虚拟帐号文件转换成库文件。
例:
vim /etc/vsftpd/vuser.txt
vip //用户名
123456 //密码
all
12345678
#db_load -T -t hash -f /etc/vsftpd/vuser.txt /etc/vsftpd/vuser.db //生成了库文件
#chmod 600 /etc/vsftpd/vuser.db //修改权限。
3、配置PAM文件:
为了使服务器能够使用数据库文件,对客户端进行身份验证。需要调节器用系统的PAM模块 .PAM
这就需要修改 /etc/pam.d/vsftpd文件,在文件尾加上两行内容:
32位系统:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vuser
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vuser
64位系统就要改成:
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
*******************************************************************************
切记把这两行放在最前面,然后把其他原有的内容删除或全注释掉,不然一直无法通过。
***********************************************************************************
4、修改配置文件 vsftpd.conf
anonynous_enable = NO
local_enable = YES
userlist_enable= YES //用户列表中的用户是否允许访问ftp服务器。
chroot_local_user = YES //都限制在宿主目录内
pam_service_name = vsftpd
以下面配置文件需手工增加:
guest_enable=YES //开启虚拟帐号登录。
user_config_dir = /etc/vsftpd/vuser //设置虚拟帐号配置文件所在目录。
guest_username=khp //设置虚拟帐号的实体帐号名。
5、然后在虚拟帐号目录中建立与虚拟帐号名一致的配置文件。 即在 user_config_dir 参数中设置的目录中下建立。
例:我有一虚拟帐号为 vip,其对应的实际帐号为 khp
mkdir /etc/vsftpd/vuser //建立虚拟帐号配置文件夹
vim /etc/vsftpd/vuser/vip //建立虚拟帐号访问配置文件,文件内容如下:
write_enable = YES //允许在文件中写入权限
anon_mkdir_write_enable = YES //允许创建文件夹
anon_upload_enable = YES //允许上传文件
anon_world_readable_only = NO //允许下载
anon_other_write_enable = YES //允许删改。
anon_max_rate=100000 //限定速率为100kb/s
(四)相关命令
service vsftpd start
/etc/rc.d/init.d/vsftpd start
service vsftpd stop
service vsftpd restart