相关环境:
redhat AS4.6 vsftpd-1.2.0.tar.gzshell
1、以系统用户访问ftp服务器数据库
一、卸载系统自带的ftp软件(若是有)
[root@test root]# rpm -qa | grep ftp
[root@test root]# rpm -e ftp lftp
[root@test root]# cd /usr/local/src 浏览器
2. 开始编译与安装 固然也能够yum方式安装
# vsftpd 预设安装的路径为:
# 全部可执行档放置在 /usr/local/sbin 里面;
# man page 放置在 /usr/local/man/man5 与 /usr/local/man/man8
# 若 super daemon 为 xinetd 时,会复制一份启动档案到 /etc/xinetd.d 去! 服务器
[root@test src]# tar -zxvf /root/vsftpd-1.2.0.tar.gz
[root@test src]# cd vsftpd-1.2.0/ # 在这个目录下有个 INSTALL 与 README 请务必察看喔!
[root@test vsftpd-1.2.0]# make # 编译的过程可能有 warning 的讯息,只要不是 Error 就能够不理他!
[root@test vsftpd-1.2.0]# make install
[root@test vsftpd-1.2.0]# mkdir /etc/ftp
[root@test vsftpd-1.2.0]# cp vsftpd.conf /etc # 创建主配置文件
[root@test vsftpd-1.2.0]# cp RedHat/vsftpd.pam /etc/pam.d/vsftpd # 将 PAM 身份认证模块给他放进去系统里面!
[root@test vsftpd-1.2.0]# useradd -M ftp -d /var/ftp # 创建 ftp 这个使用者以及他的家目录:# 若原本就存在 ftp 这个使用者,那就不须要进行新增!
[root@test vsftpd-1.2.0]# mkdir -p /var/ftp
[root@test vsftpd-1.2.0]# chown root:root /var/ftp # 更改目录权限
[root@test vsftpd-1.2.0]# chmod 755 /var/ftp
[root@test vsftpd-1.2.0]# mkdir -p /usr/share/empty # 创建 vsftpd 须要的特殊目录
3. 若是须要移除时:
# 若是想要移除 vsftp 时,能够这样作
[root@test vsftpd-1.2.0]# rm /usr/local/sbin/vsftpd
[root@test vsftpd-1.2.0]# rm /usr/local/man/man5/vsftpd.conf.5
[root@test vsftpd-1.2.0]# rm /usr/local/man/man8/vsftpd.8
[root@test vsftpd-1.2.0]# rm /etc/xinetd.d/vsftpd
[root@test vsftpd-1.2.0]# rm /etc/ftp/vsftpd.conf session
4. 创建上传目录:
[root@test vsftpd-1.2.0]# cd /root
[root@test ~]# mkdir -p /var/ftp/upload
[root@test ~]# chown ftp /var/ftp/upload app
5. 编辑配置文件
[root@test root]# more /etc/ftp/vsftpd.conf | grep -v "#" | moresocket
#####系统相关设置
dirmessage_enable=YES # 显示目录信息
xferlog_enable=YES # 记录用户的上传下载行为
connect_from_port_20=YES # 使用20端口传输数据
xferlog_file=/var/log/vsftpd.log # log文件
idle_session_timeout=600 # 链接超时600s
data_connection_timeout=120 # 数据传输超时120s
use_localtime=YES # 使用本地时间
xferlog_std_format=YES # 使用同wu ftp相同的文件格式
pam_service_name=vsftpd # pam 模块名称
tcp_wrappers=YES # tcp_wrappers支持
listen_port=21 # ftp 端口
listen=YES # 以独立进程启动
max_clients=50 # 最大客户端
max_per_ip=5 # 同一IP最大链接数
ascii_upload_enable=NO # 不使用ascii格式上传
ascii_download_enable=NO # 不使用ascii格式下载
nopriv_user=ftp # 服务运行者为 ftp
write_enable=YES # 写入权限
ls_recurse_enable=NO #禁止用户登录FTP后使用"ls -R"的命令。该命令会对服务器性能形成巨大开销。若是该项被容许,那么挡多用户同时使用该命令时将会对该服务器形成威胁.tcp
####本地用户访问相关设置
local_enable=YES # 容许本地用户访问
local_umask=022 # 本地用户上传的文件权限
chroot_list_enable=YES # 将用户限止在本身的主目录内
chroot_list_file=/etc/ftp/vsftpd.chroot_list # 限定不能更改目录的用户
userlist_enable=YES # 指定能登陆的用户
userlist_deny=NO # 指定不能登陆的用户
userlist_file=/etc/ftp/vsftpd.user_list # 指定能登陆的用户
local_max_rate=10000 # 本地用户传输速度 10000 bytes/secondide
####匿名用户访问相关设置
anonymous_enable=NO # 匿名用户登陆
anon_other_write_enable=NO # 匿名用户写入权限
anon_mkdir_write_enable=NO # 匿名用户创建目录权限
anon_upload_enable=NO # 匿名用户上传数据
deny_email_enable=YES # 限止某email address 用户使用匿名访问
banned_email_file=/etc/ftp/vsftpd.banned_emails # 禁止登陆的email address
anon_max_rate=3000 # 匿名用户传输速度 3000 bytes/second工具
####虚拟用户访问相关设置
guest_enable=YES # 启用虚拟用户
guest_username=vsftp # 虚拟用户对应的系统用户名
user_config_dir=/etc/ftp/vsftpd_user_conf # 虚拟用户的个性配置文件目录
创建相关文件
[root@test root]# touch /etc/ftp/vsftpd.chroot_list # 此文件内的用户不能更改目录 每行一个用户名
[root@test root]# touch /etc/ftp/vsftpd.user_list # 只容许此文件内的列出的用户登陆
每行一个用户名
[root@test root]# touch /etc/ftp/vsftpd.banned_emails # 此文件内的email 不能login
每行一个eamil地址
[root@test root]# vi /etc/pam.d/vsftpd 创建pam文件 注意:若是是64位系统,那么下面的路径就是/lib64/security/ ,固然也能够不写这个路径
#%PAM-1.0
auth required /lib/security/pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
auth required /lib/security/pam_pwdb.so shadow nullok
auth required /lib/security/pam_shells.so
account required /lib/security/pam_pwdb.so
session required /lib/security/pam_pwdb.so
[root@test root]# vi /etc/xinetd.d/vsftpd
# default: on
# description:
# The vsftpd FTP server serves FTP connections. It uses
# normal, unencrypted usernames and passwords for authentication.
# vsftpd is designed to be secure.
service ftp
{
socket_type = stream
wait = no
user = root
server = /usr/local/sbin/vsftpd
# server_args =
# log_on_success += DURATION USERID
# log_on_failure += USERID
nice = 10
disable = yes # 关闭xinetd模式启动vsftpd
}
[root@test root]# vsftpd & # 启动ftp服务器
[root@test root]# echo "/usr/local/sbin/vsftpd &" >> /etc/rc.local # 开机自启动
6. 测试
创建测试用户
[root@test root]# useradd -p test1 test1
[root@test root]# useradd -p test2 test2
[root@test root]# useradd -p test3 test3
[root@test root]# more /etc/ftp/vsftpd.user_list # 更改/etc/ftp/vsftpd.user_list内容以下
test2 # 容许test2 、test3访问ftp服务器
test3
[root@test root]# more /etc/ftp/vsftpd.chroot_list # 更改/etc/ftp/vsftpd.chroot_list内容以下
test2 # 禁止test1 更改主目录
使用ftp工具或是浏览器时行访问,得出的结果应该是:
匿名用户不能访问
test1 用户不能访问
test2 用户能访问 可是只能在自的主目录中 而且可读写
test3 用户能访问 也能够自由切换工做目录 而且可读写
用户的读写权限 需系统文件权限的支持。
完成
2、以虚拟用户访问ftp服务器 (推荐方式)
1. 创建虚拟用户的用户名和密码,
[root@test root]# vi /etc/ftp/logins.txt
t1
pass1
t2
pass2
t3
pass3
格式以下:
<用户名>
<密 码>
<用户名>
<密 码>
2.创建虚拟用户数据库
[root@test root]# db_load -T -t hash -f /etc/ftp/logins.txt /etc/ftp/vsftpd_login.db
[root@test root]# chmod 600 /etc/vsftpd_login.db # 创建虚拟用户数据库
3.创建pam认证文件,
[root@test root]# vi /etc/pam.d/vsftpd.vu 注意:若是是64位系统,那么下面的路径就是/lib64/security/ ,固然也能够不写这个路径
auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd_login
#/etc/vsftpd_login指的就是以前创建的虚拟用户数据库
4.编辑配置文件
[root@test root]# more /etc/ftp/vsftpd.conf | grep -v "#" | more
#####系统相关设置
dirmessage_enable=YES # 显示目录信息
xferlog_enable=YES # 记录用户的上传下载行为
connect_from_port_20=YES # 使用20端口传输数据
xferlog_file=/var/log/vsftpd.log # log文件
idle_session_timeout=600 # 链接超时600s
data_connection_timeout=120 # 数据传输超时120s
use_localtime=YES # 使用本地时间
xferlog_std_format=YES # 使用同wu ftp相同的文件格式
##############################更改此内容##############################################
pam_service_name=vsftpd.vu # pam 模块名称 这是咱们以前建的pam文件
######################################################################################
tcp_wrappers=YES # tcp_wrappers支持
listen_port=21 # ftp 端口
listen=YES # 以独立进程启动
max_clients=50 # 最大客户端
max_per_ip=5 # 同一IP最大链接数
ascii_upload_enable=NO # 不使用ascii格式上传
ascii_download_enable=NO # 不使用ascii格式下载
nopriv_user=ftp # 服务运行者为 ftp
write_enable=YES # 写入权限
ls_recurse_enable=NO #禁止用户登录FTP后使用"ls -R"的命令。该命令会对服务器性能形成巨大开销。若是该项被容许,那么挡多用户同时使用该命令时将会对该服务器形成威胁.
####本地用户访问相关设置
local_enable=YES # 容许本地用户访问
local_umask=022 # 本地用户上传的文件权限
chroot_list_enable=YES # 将用户限止在本身的主目录内
chroot_list_file=/etc/ftp/vsftpd.chroot_list # 限定不能更改目录的用户
userlist_enable=YES # 指定能登陆的用户
userlist_deny=NO # 指定不能登陆的用户
userlist_file=/etc/ftp/vsftpd.user_list # 指定能登陆的用户
local_max_rate=10000 # 本地用户传输速度 10000 bytes/second
####匿名用户访问相关设置
anonymous_enable=NO # 匿名用户登陆
anon_world_readable_only=NO # 匿名只读
anon_other_write_enable=NO # 匿名用户写入权限
anon_mkdir_write_enable=NO # 匿名用户创建目录权限
anon_upload_enable=NO # 匿名用户上传数据
deny_email_enable=YES # 限止某email address 用户使用匿名访问
banned_email_file=/etc/ftp/vsftpd.banned_emails # 禁止登陆的email address
anon_max_rate=3000 # 匿名用户传输速度 3000 bytes/second
####################添加如下内容###########################
####虚拟用户访问相关设置
guest_enable=YES # 启用虚拟用户
guest_username=ftpvu # 虚拟用户对应的系统用户名
user_config_dir=/etc/ftp/vsftpd_user_conf # 虚拟用户的个性配置文件目录
###########################################################
5.创建相关文件
[root@test root]# mkdir /etc/ftp/vsftpd_user_conf # 虚拟用户的个性配置文件目录
[root@test root]# useradd -d /var/ftp -s /sbin/nologin -g ftp ftpvu # 虚拟用户对应的系统用户名
[root@test root]# chown ftpvu.ftp /var/ftp
[root@test root]# mkdir -pv /var/ftp/t1 /var/ftp/t2 /var/ftp/t3 # 创建各虚拟用户的主目录
6.为各用户单独设置访问权限
[root@test root]# vi /etc/ftp/vsftpd_user_conf/t1
local_root=/var/ftp/t1 # 将用户t1访问限定在/var/ftp/t1中
[root@test root]# vi /etc/ftp/vsftpd_user_conf/t2
local_root=/var/ftp/t2 # 将用户t2访问限定在/var/ftp/t2中
anon_other_write_enable=YES # 写入权限
anon_mkdir_write_enable=YES # 创建目录权限
anon_upload_enable=YES # 用户上传数据
[root@test root]# vi /etc/ftp/vsftpd_user_conf/t3
anon_other_write_enable=YES # 写入权限
anon_mkdir_write_enable=YES # 创建目录权限
anon_upload_enable=YES # 用户上传数据
[root@test root]# more /etc/ftp/vsftpd.user_list # 更改/etc/ftp/vsftpd.user_list内容以下
t1 # 容许t一、t二、t3访问ftp服务器
t2
t3
[root@test root]# more /etc/ftp/vsftpd.chroot_list # 更改/etc/ftp/vsftpd.chroot_list内容以下
t1 # 禁止t一、t2更改主目录
t2
7.测试
使用ftp工具或是浏览器时行访问,得出的结果应该是:
匿名用户不能访问
t1 用户能访问,只读权限,只能在主目录(/var/ftp/t1)里活动
t2 用户能访问,读写权限,只能在主目录(/var/ftp/t2)里活动
t3 用户能访问,读写权限,能在/var/ftp里活动,可切换目录
完成
3、常见错误
1. ftp登录时候,500 cannot locate user****
缘由:多是用户名有问题
注意看 logins.txt文件和
vsftpd.conf里guest_username有没有错,好比多个空格!
2. 530 login failed
pam验证错误,检查下/etc/pam.d/***配置文件,看看是否是指向正确的位置
3. 登录后533 cannot create file
缘由,guest_username对目标文件夹没有权限
4. 530 permission denied
缘由,看一下有没有权限访问目录,还有用户有没有加到/etc/ftp/vsftpd.user_list文件中。
4、补充:
若是想更改用户类型,好比原本是系统用户访问ftp,如今想要用虚拟用户访问ftp,更改vsftpd.conf中的pam_service_name=vsftpd 改成 pam_service_name=vsftpd.vu, 反之亦然。