Linux vsftpd服务器
1.1. 概述
Vsftpd是众多ftp中的一种,主要应用于生产环境网络访问共享文件使用。多用于网络环境
FTP
工作模式:
主动模式 客户机向FTP服务器请求连接 随机端口>1024 ,20端口向客户机随机端口连接
被动模式 客户机向FTP服务器连接21端口,并指定客户端端口与20相连
1.2. 软件安装
客户端软件 ftp lftp
yum install vsftpd -y
1.3. 服务和端口:
20 传输数据
21 传输验证信息
1.4. 防火墙配置
iptables -I INPUT 1 -p tcp --dport 20:21 -JACCEPT
service iptables save
1.5. 用户模式
匿名用户:
l 用户名为: ftp anonymous
l 密码为:ftp
l 家目录 /var/ftp
l Shell /sbin/nologin
当使用匿名用户上传文件时需注意以下三点:
1. 目录的权限 755 有修改权
2. 配置文件允许上传
3. 修改selinux
# 匿名用户不具备删除权限,只有上传修改的权限
allow_ftpd_anon_write --> off
普通用户:
普通用户以自已的家目录为共享主目录
setsebool-P ftp_home_dir on
跨网段访问,采用被动模式
1.6. 配置文件
:注意:当匿名更改为普通用户模式时,不能使用#注释的方式取消,必须使用NO给值
Cd /etc/vsftpd/
vsftpd.conf: # 主配置文件;
ftpusers: # 指定哪些用户不能访问FTP服务器;
user_list: # 指定的用户是否可以访问ftp服务器由vsftpd.conf文件中的userlist_deny的取值来决定。
/etc/vsftpd/vsftpd.conf # 主配置文件
************************************************************************************************************************
#匿名用户配置
anonymous_enable=YES # 是否启用匿名用户 ftp anonymousNO为需要验证方式
anon_root=/xx # 指定匿名用户根目录
#anon_upload_enable=YES # 是否允许匿名用户写上传
#anon_mkdir_write_enable=YES # 是否允许匿名用户删创建
# 普通用户配置
local_enable=YES # 是否允许本地用户登录
local_root=/xx # 指定普通用户的根目录
#开启ftp普通用户登录家目录访问权限
write_enable=YES # 是否允许写入
local_umask=022 # umask值
dirmessage_enable=YES # 切换目录时的欢迎词
# 设置 vi /etc/ftp/.message
xferlog_std_format=YES # 是否启用日志
#xferlog_file=/var/log/xferlog # 日志路径
xferlog_std_format=YES # 日志格式
#chown_uploads=YES # 上传文件的所有者会被改变
#chown_username=whoever # 指定上传文件后改变的所有者
#idle_session_timeout=600 # 连接后闲置时间600秒
#ftpd_banner=Welcome to blah FTP service. #FTP登录欢迎词
# 目录锁定
# users to NOT chroot().
#chroot_local_user=YES # 锁定目录,不允许本地用户切换其它目录
#chroot_list_enable=YES # 指定用户锁定目录
#chroot_list_file=/etc/vsftpd/chroot_list 出现在此文件的用户做锁定目录
防止用户返回到上一级目录:
如果你想禁止所有用户调转到上级目录,可以设置
chroot_local_user=YES 前提:需要设置local_root目录;
然后将要禁止的用户添加到chroot_list里面即可。
# 安全限制
pam_service_name=vsftpd # /etc/pam.d/vsftpd 是属于pam管理
userlist_enable=YES #
userlist_deny=YES # 拒绝用户列表 NO 为出现在文件中的用户为同意
userlist_file=/etc/vsftpd/user_list # 列表文件
tcp_wrappers=YES # ip限制 /etc/host.deny
deny_file={*.mp3,*.exe} # 拒绝上传文件格式为exe mp3
**************************************************************************************************************************
修改家目录布尔值
getsebool -a | grep ftp
ftp_home_dir --> off
setsebool -P ftp_home_dir on
/etc/pam.d/vsftpd # PAM管理文件
#%PAM-1.0
session optional pam_keyinit.so force revoke
auth required pam_listfile.soitem=user sense=deny (拒绝) file=/etc/vsftpd/ftpusersonerr=succeed
auth required pam_shells.so
auth include password-auth
account include password-auth
session required pam_loginuid.so
session include password-auth
/etc/vsftpd/ftpusers # 出现在此文件中的为不能登录用户
上传模式:ascii 文本文件可编
bin 图片语音 不可编
1.7. 配置用户
1.7.1.创建系统用户:
2.创建一个用户来访问FTP,并指定该用户的FTP 目录:
[[email protected] \]# useradd -d /var/www/html/qs -g ftp -s /sbin/nologin user1
[[email protected] \]# passwd uesr1
以上创建用户的方法可以用该帐号登录系统,但是我们要创建的帐号是可以登录FTP但是不可以登录系统。
#useradd-d /var/www/html/qs -g ftp -s /sbin/nologin user1 //-d是指定目录(必须为相对根的跟路径,否则提示阿弥有home家目录),-g指定分组为ftp组,-s指定该用户不能返回上一级。
#passwduser1 //设置密码
1.7.2.创建虚拟用户
1.7.2.1.创建普通虚拟用户ftp站点
首先安装FTP 虚拟用户需要用到的软件及认证模块
yum install pam* db4* --skip-broken –y
yum install pam* libdb-utils libdb*--skip-broken –y #centos 7安装方法
创建并生成vsftpd数据库文件vi /etc/vsftpd/user, # 建立user用户文件
******************************************************************
1. user01 # 用户名
2. 123 # 密码
3. user02
4. 123
以此类推,一直添加账号
*******************************************************************
生成数据库文件命令:
db_load -T -t hash -f /etc/vsftpd/ftpusers.txt/etc/vsftpd/vsftpd_login.db
chmod 700 /etc/vsftpd/vsftpd_login.db 给权限
配置PAM验证文件:
在配置文件vi /etc/pam.d/vsftpd 行首加入如下两行认证语句:(如果是32位,lib64需改成lib,如果RedHat,加入的语句不一样,需注意)
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
创建vsftpd映射本地用户:
所有的FTP虚拟用户需要使用一个系统用户,这个系统用户不需要密码,也不需要登录。主要用来做虚拟用户映射使用。
useradd –d /home/ftpuser -s /sbin/nologin ftpuser
修改完整版配置文件内容如下:
Vi/etc/vsftpd/vsftpd.conf
anonymous_enable=NO //禁止匿名用户访问
local_enable=YES //允许本地用户登录FTP
write_enable=YES //允许用户在FTP目录有写入的权限
local_umask=022 //设置本地用户的文件生成掩码为022,默认是077
dirmessage_enable=YES //激活目录信息,当远程用户更改目录时,将出现提示信息
xferlog_enable=YES //启用上传和下载日志功能
connect_from_port_20=YES //启用FTP数据端口的连接请求
xferlog_file=/var/log/vsftpd.log //是否使用标准的ftpd xferlog日志文件格式
xferlog_std_format=YES
ascii_upload_enable=YES
ascii_download_enable=YES
listen=YES /使vsftpd处于独立启动监听端口模式
guest_enable=YES # 开启虚拟用户
guest_username=ftpuser # 虚拟用户
pam_service_name=vsftpd //设置PAM认证服务配置文件名称,文件存放在/etc/pam.d/目录
user_config_dir=/etc/vsftpd/vsftpd_user_conf # 指定虚拟用户独立目录配置文件
virtual_use_local_privs=YES # 虚拟用户和本地用户权限匹配
保存重启,/etc/init.d/vsftpd restart 即可使用虚拟用户登录,这时候所有的虚拟用户共同使用/home/ftpuser目录上传下载,如果想使用自己独立的目录,可以在/etc/vsftpd/vsftpd_user_conf目录创建各自的配置文件,如给user01创建独立的配置文件:多个用户创建多个
vi /etc/vsftpd/vsftpd_user_conf/user01
local_root=/home/ftpsite/wugk # 锁定目录
write_enable=YES # 开启写入
anon_world_readable_only=YES # 允许读取
anon_upload_enable=YES # 允许上传
anon_mkdir_write_enable=YES # 允许写入
anon_other_write_enable=YES #
同时,要在/home/ftpuser/下创建对应用户的家目录,例如:/home/ftpuser/user01
重启,使用客户端登录FTP,测试即可。关于FTP讲解就到此,windows还可以使用Server-U来搭建FTP服务器端,有兴趣的童鞋可以研究一下。
1.7.2.2.创建public公共账号和管理账号
实验目的:
Public 可以公共下载文件,但不能删除文件
Ftpadmin有所有权限。
**********前面省略 与上相同******
5.创建虚拟帐号对应的系统用户
普通帐号:
public对应系统帐号ftp_public,并指定其主目录为/var/ftp/public
# 对家目录做权限设置, chmod-R 500 /var/ftp/public/
普通帐号public只允许下载,修改public目录用户权限为rx可读可执行。
管理帐号:
ftpadmin对应系统帐号ftp_admin,指定主目录为/var/ftp/ftpadmin
# 对家目录做权限设置,chmod-R 700 /var/ftp/ftpadmin/
专用帐号ftpadmin允许上传和下载,所以对ftpadmin目录权限设置为rwx,可读可写可执
[[email protected] ftp]# useradd -d /home/ftpadmin/-s /sbin/nologin ftpadmin
[[email protected] ftp]# useradd -d/home/ftppublic/ -s /sbin/nologin ftppublic
[[email protected] ftp]# chmod -R 500/home/public/
[[email protected] ftp]# chmod -R 700/home/ftpadmin/
6.建立配置文件
设置多个虚拟帐号的不同权限,需要为每个虚拟帐号建立独立的配置文件,并根据需要进行相应的设置
1)修改vsftpd.conf主配置文件
配置主配置文件/etc/vsftpd/vsftpd.conf
添加user_config_dir字段,设置虚拟用户配置文件和目录
此主配置文件是全局配置,所有账号生效
anonymous_enable=NO(修改配置) 禁用匿名用户登录
write_enable=YES (默认开启) 允许使用任何可以修改文件系统的FTP的指令
local_enable=YES (默认开启) 启用本地用户登录设置
chroot_local_enable=YES (自建配置) 将所有本地用户限制在家目录中
pam_service_name=vsftpd:(默认开启)配置vsftpd使用的PAM模块为vsftpd user_config_dir=/etc/vsftpd/vsftpd_login:(自建配置)设置虚拟帐号的主目录为/
vsftpd_login max_clients=300:(自建配置) 设置FTP服务器最大接入客户端数为300个
max_per_ip=10: (自建配置) 设置每个IP地址最大连接数为10个
port_enable=NO (自建配置) 取消PORT模式进行数据传输
pasv_min_port=65341 (自建配置) PASV模式下数据传输所使用port范围下界
pasv_max_port=65351 (自建配置) PASV模式下数据传输所使用port范围上界
connect_from_port_20=NO (修改配置) PORT模式进行数据传输不使用20端口
pasv_enable=YES (自建配置) 允许PASV模式进行数据传输
(2)建立虚拟帐号配置文件
在user_config_dir=/etc/vsftpd_login指定路径下,建立与虚拟帐号同名的配置文件并添加相应的配置字段
[[email protected] vsftpd]# mkdir /vsftpd_login
[[email protected] vsftpd]# touch/etc/vsftpd/vsftpd_login/public
[[email protected] vsftpd]# touch/etc/vsftpd//vsftpd_login/ftpadmin
首先建立普通帐号public的配置文件
vi /etc/vsftpd/vsftpd_login/public
guest_enable=yes 开启虚拟帐号登录
guest_username=ftp_public 设置ftp对应的系统帐号为ftppublic
anon_world_readable_only=no 允许匿名用户浏览器整个服务器的文件系统
anon_max_rate=50000 限定传输速率为50KB/s
建立专用帐号的配置文件ftpadmin
vi /etc/vsftpd/vsftpd_login/ftpadmin
guest_enable=yes: 开启虚拟帐号登录
guest_username=ftp_ personal:设置ftp对应的系统帐号为ftp_personal
anon_other_write_enable=YES: 允许匿名账号具有删除.更名权限
anon_mkdir_write_enable=yes:允许创建文件夹
anon_upload_enable=yes: 开启匿名帐号的上传功能
anon_world_readable_only=no 允许匿名用户浏览器整个服务器的文件系统
anon_max_rate=100000: 限定传输速度为100KB/s
重启服务 service vsftpd restart
如果ftpadmin用户需要复制文件到public中,方便它人下载,可以在ftpadmin的配置文件中加入下面两行代码
还有一种方法就是在personal配置文件加入以下两个参
chown_uploads=YES 激活匿名用户所上传文件的修改所有权
chown_username=root 拥有匿名用户上传文件所有权的用户
然后就可以直接拷贝文件到public目录下
1.8. ftp客户端软件lftp
lftp [email protected] 登录FTP 指定用户名
口令:
ls 查看
cd 切换目录
put 文件名 上传
get 文件名 下载
1.9. 故障排除
- 如果无法上传,故障排除:
- 检查配置文件是否有允许写
- 目录权限
getsebool -a | grep ftp 查询Bool值
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off
setsebool -P allow_ftpd_anon_write on
setsebool -P allow_ftpd_full_access on
- 登录后无法执行命令,提示没有主机路由
vim /etc/sysconfig/iptables-config
IPTABLES_MODULES="ip_conntrack_ftp"