• Category Archives: vsftp/vsftpd

添加vsftp账号

直接使用命令:
添加ftp账号www,指定/home/www为www的宿主目录,该账户号默认不能登陆系统
useradd -d /home/mytest/ -g ftp -s /sbin/nologin mytest

 

修改账号密码:
passwd mytest

 

修改指定目录权限:
chown -R mytest /home/mytest

 

CentOS yum 安装 vsftpd

vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序。特点是小巧轻快,安全易用,下面直接上干货。

一、安装vsftp

以管理员的身份使用yum命令安装vsftp:

[root@localhost ~]#yum install vsftpd

根据系统yum的不同,可能无法找到软件包源,可以按照这里的方法解决

二、设置vsftp开机自动启动

1、查看开机自动启动服务项目

[root@localhost ~]# chkconfig –list

2、设置vsftpd服务开机自动启动

[root@localhost ~]# chkconfig –level 35 vsftpd on

三、配置环境

1、添加vsftp账号,指定账号权限

■ 添加ftp账号www,指定/home/www为www的宿主目录,该账户号默认不能登陆系统。

[root@localhost ~]# useradd -s /bin/nologin -d /home/www www  #nologin的位置通常在/usr/sbin/nologin或/sbin/nologin位置,如果指定错误则无法登陆。

■ 修改账号密码。

[root@localhost ~]# passwd www

■ 修改指定目录权限。

[root@localhost ~]# chown -R www /home/www  #-R参数:递归设置/home/www目录及期子目录的所有者为用户www。

2、配置vsftp

编辑vsftp的配置文件/etc/vsftpd/vsftpd.conf,修改配置文件相关配置项,如下:

anonymous_enable=NO  #不允许匿名登陆

ascii_upload_enable=YES #上传时允许ASCII模式

ascii_download_enable=YES #下载时允许ASCII模式

local_enable=YES  #允许本地用户登录ftp服务器,默认是允许,不包含id为500以下用户陆

write_enable=YES  #允许用户具有在ftp服务器文件中具有写的权限

chroot_local_user=YES  ##是否将所有用户锁定在主目录,YES为启用 NO禁用

chroot_list_enable=YES  #是否启动锁定用户的名单,YES为启用 NO禁用

chroot_list_file=/etc/vsftpd/chroot_list  #当chroot_list_enable=YES时,该项有效,禁用的列表名单格式为一行一个用户, 如果名单里面有一个test01的用户, 则test01用户不会锁定在主目录,用户将可以自由切换目录。

举例:

情况一:

现在有 test1 test2 test3 这三个ftp的用户,想让1跟2用户锁定主目录不允许切换到其他目录, 但是允许3用户自由切换那么/etc/vsftpd/chroot_list列表名单如下:

test3

也就说chroot_local_user=YES,并且chroot_list_enable=YES的时候,/etc/vsftpd/chroot_list名单里面添加的是排除锁定主目录的用户名单。

情况二:

如果chroot_local_user=NO并且chroot_list_enable=YES的时候,那么/etc/vsftpd/chroot_list列表名单如下:

test1

test2

情况三:

如果chroot_local_user=YES 并且 chroot_list_enable=NO 的时候那列表名单也就不生效了,因此满足上面的条件时,所有的FTP用户将全部锁定在主目录。

ls_recurse_enable=YES  #启用递归

listen=YES  #使用IPV4时设置为YES

listen_ipv6=NO   #使用IPV6时设置为YES

local_root=/data/ftproot    #指定根目录,如果未指定,用户的宿主目录将作为FTP主目录

use_localtime=YES  # use localtime

seccomp_sandbox=NO     #turn off for seccomp filter ( if you cannot login, add this line )

3、修改shells配置

编辑shell的配置文件/etc/shells,如果文件中没有/sbin/nologin或者usr/sbin/nologin,在文件中追加该上即可。

4、配置防火墙

编辑/etc/sysconfig/iptables文件,在REJECT行之前添加如下命令:

-A INPUT -m state –state NEW -m tcp -p tcp –dport 21 -j ACCEPT  #从上一行中进行复制粘贴后修改端口号为21即可

添加后保存,然后重启防火墙服务。

[root@localhost ~]# service iptables restart  #其它命令:service iptables stop停止防止墙服务

六、启动vsftp并测试登陆

启动vsftp服务

[root@localhost ~]# service vsftpd start #其它命令:service vsftpd restart重启FTP服务、service vsftpd stop停止FTP服务

服务成功启动后,用FTP客户端登陆即可(推荐使用Xshell ),ftpadmin管理目录是/www/web。

七、错误处理

1、500 OOPS: cannot change directory:/home/www

该错误原因是在CentOS系统下默认安装了SELinux,没有开启FTP支持,所以访问时都被阻止了,需要手动开启。

[root@localhost ~]# getsebool -a|grep ftp   #查看所有ftp设置

[root@localhost ~]# setsebool ftp_home_dir 1  #setsebool -P ftp_home_dir 1 使用P参数实现重启后ftp_home_dir自动为1

vsftp 虚拟账户的 site chmod 的启用

vsftp中使用了虚拟账户,但在默认配置下虚拟账户没有site chmod的使用权限,总是报550 Permission denied 。
让vsftp虚拟用户拥有site chmod的权限的方法是:
1、让vsftp的本地用户(我的是vsuer)拥有文件的目录。

2、修改vsftpd.conf配置文件

guest_enable=YES #允许guest以vuser访问

guest_username=vsuer #允许映射到vuser

virtual_use_local_privs=YES #虚拟用户与vuser 有相同权限

另外可能还需要开启chmod,当然,它是默认开启的。
chmod_enable=YES

在CentOs中安装vsFtpd并创建多个虚拟用户,且不同的用户拥有不同的权限以及指向不同的文件夹

在vsftpd中要实现不同用户不同权限,可以利用虚拟用户来实现。

vsftpd的本地用户本身是系统的用户,除了可以登录FTP服务器外,还可以登录系统使用其他系统资源,而vsftpd的虚拟用户则是FTP服务的专用用户,虚拟用户只能访问FTP服务器资源。对于只需要通过FTP对系统有读写权限,而不需要其他系统资源的用户或情况来说,采用虚拟用户方式是很适合的。

vsftpd的虚拟用户采用单独的用户名/口令保存方式,与系统账号(passwd/shadow)分离,这大大增强了系统的安全性。vsftpd可以采用数据库文件来保存用户/口令,如hash;也可以将用户/口令保存在数据库服务器中,如MySQL等。vsftpd验证虚拟用户,则采用PAM方式。由于虚拟用户的用户名/口令被单独保存,因此在验证时,vsftpd需要用一个系统用户的身份来读取数据库文件或数据库服务器以完成验证,这就是guest用户,这正如同匿名用户也需要有一个系统用户ftp一样。当然,guest用户也可以被认为是用于映射虚拟用户。

环境:
CentOS 6.3
vsFtp 2.2.2

1、安装vsFtpd
$sudo apt-get install vsftpd
$sudo apt-get install db4.6-utils

2、建立本地虚拟用户
#useradd -d /home/ftp virtual
指定目录为/home/ftp

3、建立虚拟用户数据库
#mkdir /etc/vsftpd
#vim /etc/vsftpd/logins.txt
login.txt文件内容:
gavin
123
jimson
123
admin
admin

注:奇数行为用户名,偶数行为密码。
#db_load -T -t hash -f /etc/vsftpd/logins.txt /etc/vsftpd/vsftpd_login.db
#chmod 600 /etc/vsftpd/vsftpd_login.db
生成数据库文件之后建议删除logins.txt。

这里有个问题,我在创建的时候,在后面的build过程中出现过如下出错提示:
db_load: unexpected end of input data or key/data pair
db_load: odd number of key/data pairs
原因大概是在ftpUserInfo.txt最后需要再加个回车,加回车后,就没问题了,在图形界面的文本编辑器保存默认也会添加一个回车,所以,如果是在图形界面的文本编辑器下直接生成的,不会出现该错误.

4、建立基于vsftpd_login的PAM授权文件
#vim /etc/pam.d/vsftpd.vu

vsftpd.vu文件内容(32位系统):
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login

vsftpd.vu文件内容(64位系统):
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login

注意:这里必须清楚知道自己的linux系统是32位还是64位的,如果这里不正确,那么在整过配置过程完成后,FTP将无法成功验证用户的登录,出现“530 Login incorrect 错误”。

5、设置用户权限
建立用来存放用户权限设置文件的目录
#mkdir /etc/vsftpd/virtual
并在该文件夹下依次建立与logins.txt对应的帐号名称相同的文件
#vim gavin
内容可以参考下面:
#[gavin]只允许下载
anon_world_readable_only=NO
local_root=/home/ftp

#[jimson]允许建立,修改,但是不允许删除
anon_world_readable_only=NO
write_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YES
local_root=/home/ftp

#[admin]全部权限
anon_world_readable_only=NO
write_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YES
anon_other_write_enable=YES
local_root=/home/ftp

6、设置vsftpd.conf
#vim /etc/vsftpd/vsftpd.conf
修改内容如下:
listen=YES
connect_from_port_20=YES
ftpd_banner=Welcome to virtual FTP service.

anonymous_enable=NO
local_enable=YES
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
chroot_local_user=YES

guest_enable=YES
guest_username=virtual

pam_service_name=vsftpd.vu
user_config_dir=/etc/vsftpd/virtual
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log

注意备份原配置文件

7、重新启动vsftpd
#service vsftpd restart

【可能出现的问题】
1、无法登陆
解决方法:
(1)检查ftp根目录目录是否存在;
(2)检查上面设置的各个路径是否正确;
(3)查看ftp根目录的owner属性是否是virtual
#ls -al /home
如果不是
#chown -R virtual /home/ftp

【日常维护】
(1)更新帐号
#db_load -T -t hash -f /etc/vsftpd/logins.txt /etc/vsftpd/vsftpd_login.db
(2)更新/etc/vsftpd/virtual/下不同用户对应的权限
(3)重启vsftpd
#service vsftpd restart

close