共计 7404 个字符,预计需要花费 19 分钟才能阅读完成。
FTP 服务器简介:
FTP 服务器是提供文件存储和访问服务的服务器,通过 ftp(文件传输协议)实现数据传输,而且 FTP 是仅基于 TCP 的服务,不支持 UDP。FTP 应用是一种 C / S 架构的应用,客户端和服务器端都需要安装相关的软件才能实现相互之间的数据传输。常见的软件套件有 FileZilla,Server-U,VsFTP,Pure-FTPd,ProFTPD 等,其中 VsFTP,Pure-FTPd,ProFTPD 是单纯的服务器程序,常见客户端程序有 ftp,lftp。本文实验环境中采用的服务器程序是 vsftp。
工作原理:
基于 pam 认证框架实现认证:
安装:
[root@sherry ~]# yum install vsftpd -y
启动:
[root@sherry home]# service vsftpd start
Starting vsftpd for vsftpd: [OK]
[root@sherry home]# ps -ef |grep vsftpd
root 85235 1 0 00:52 ? 00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf #以 root 启动以 ftp 运行
默认家目录:
[root@sherry home]# cat /etc/passwd |grep ftp
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
[root@sherry pub]# cd /var/ftp/pub
[root@sherry pub]# touch a
客户端默认登入:
[root@martin ~]# ftp 172.16.178.153
Connected to 172.16.178.153 (172.16.178.153).
220 (vsFTPd 2.2.2)
Name (172.16.178.153:root): anonymous #匿名用户
331 Please specify the password.
Password: #密码空
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (172,16,178,153,65,242).
150 Here comes the directory listing.
drwxr-xr-x 2 0 0 4096 May 25 16:59 pub
226 Directory send OK.
ftp> cd pub
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (172,16,178,153,138,207).
150 Here comes the directory listing.
-rw-r–r– 1 0 0 0 May 25 16:59 a
226 Directory send OK.
图形化操作:
创建一个 ftp 账号:
[root@sherry tftp]# useradd -g sherry -s /sbin/nologin -d /home/tftp testftp
登入本地账号(use lftp):
[root@martin ~]# yum install lftp -y
[root@martin ~]# lftp -u testftp,111111 172.16.178.153
lftp testftp@172.16.178.153:~> ls
-rw-r–r– 1 0 0 0 May 25 17:59 1
-rw-r–r– 1 501 500 0 May 25 18:02 a
lftp testftp@172.16.178.153:/> put all.sql
651585 bytes transferred
lftp 指令获取:
lftp testftp@172.16.178.153:/> help
!<shell-command> (commands)
alias [<name> [<value>]] bookmark [SUBCMD]
cache [SUBCMD] cat [-b] <files>
cd <rdir> chmod [OPTS] mode file…
close [-a] [re]cls [opts] [path/][pattern]
debug [<level>|off] [-o <file>] du [options] <dirs>
exit [<code>|bg] get [OPTS] <rfile> [-o <lfile>]
glob [OPTS] <cmd> <args> help [<cmd>]
history -w file|-r file|-c|-l [cnt] jobs [-v]
kill all|<job_no> lcd <ldir>
lftp [OPTS] <site> ls [<args>]
mget [OPTS] <files> mirror [OPTS] [remote [local]]
mkdir [-p] <dirs> module name [args]
more <files> mput [OPTS] <files>
mrm <files> mv <file1> <file2>
[re]nlist [<args>] open [OPTS] <site>
pget [OPTS] <rfile> [-o <lfile>] put [OPTS] <lfile> [-o <rfile>]
pwd [-p] queue [OPTS] [<cmd>]
quote <cmd> repeat [OPTS] [delay] [command]
rm [-r] [-f] <files> rmdir [-f] <dirs>
scache [<session_no>] set [OPT] [<var> [<val>]]
site <site_cmd> source <file>
torrent [-O <dir>] <file> user <user|URL> [<pass>]
version wait [<jobno>]
zcat <files> zmore <files>
在 lftp 上用!command 执行本地命令
lftp testftp@172.16.178.153:/> !ls
a a.bin.sql a.sql all.sql anaconda-ks.cfg install.log install.log.syslog
获取配置文件帮助:
[root@sherry vsftpd]# man vsftpd.conf
配置文件:
[root@sherry vsftpd]# vim /etc/vsftpd/vsftpd.conf
# 注释
# 是否启用匿名用户
anonymous_enable=YES
# 匿名用户默认再根目录下没有写权限 子目录文件系统有写权限和服务进程开启写就可以写入 跟目录不能改权限
# 上传
#anon_upload_enable=YES
# 删除
#anon_other_write_enable=YES
# 创建目录
#anon_mkdir_write_enable=YES
# 是否允许本地用户访问
local_enable=YES
# 是否允许本地用户上传
write_enable=YES
# 禁锢所有用户家目录 默认 no
chroot_local_user=YES
# 开启对记录文件中的用户 禁锢功能 跟上面 chroot_local_user=YES 不能同时使用
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd/chroot_list
# 登入信息显示
#ftpd_banner=Welcome to blah FTP service.
# 还可以引入文件
#banner_file=/etc/vsftpd/banner
# 在有.messages 的目录 切换到此目录就会显示.messages 里面信息
dirmessage_enable=YES
# 用户列表是否启用 默认是黑名单
# 黑名单:userlist_enable=YES userlist_deny=YES 第二选项可省略
# 白名单: userlist_enable=YES userlist_deny=NO
userlist_enable=YES
# 连接限制
# 最大并发连接数
#max_clients
# 每个 ip 可同时发起并发请求
#max_per_ip
# 传输速率
# 匿名用户的最大传输速率,单位是“字节 / 秒”
#anon_max_rate
# 本地用户的最大传输速率,单位是“字节 / 秒”
#local_max_rate
# 上传文件的 umask
# 匿名用户上传文件的 umask;
#anno_umask
# 本地用户上传文件的 umask;
#local_umask
# 修改匿名用户上传文件的属主和属组:
#chown_uploads=YES
#chown_username=someuser
# 日志
xferlog_enable=YES
#xferlog_file=/var/log/xferlog
很多系统用户不能登入比如 root:
[root@sherry tftp]# cat /etc/pam.d/vsftpd
#%PAM-1.0
session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed #这项认证中的文件里的用户都是不能登入的
auth required pam_shells.so
auth include password-auth
account include password-auth
session required pam_loginuid.so
session include password-auth
[root@sherry tftp]# cat /etc/vsftpd/ftpusers
# Users that are not allowed to login via ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
所有的虚拟用户会映射会一个系统用户,访问时的文件目录是为此系统用户的家目录;
虚拟用户配置:
hash 编码的文件:奇数行为用户名,偶数行为密码
关系型数据库:pam-mysql 实现认证
查询 pam_mysql.so 是否安装
[root@sherry vsftpd]# ls /lib64/security/pam_m
pam_mail.so pam_mkhomedir.so pam_motd.so
yum install pam_mysql -y
[root@sherry vsftpd]# ls /lib64/security/pam_m
pam_mail.so pam_mkhomedir.so pam_motd.so pam_mysql.so
创建 vsftpd 所需用到的库,表,以及 vsftpd 用户
12345678910 mysql> create database vsftpd;
mysql> grant select on vsftpd.* to ‘vsftpd’@’localhost’ identified by ‘222222’;
mysql> flush privileges;
mysql> create table users (
id int AUTO_INCREMENT NOT NULL,
name char(20) binary NOT NULL,
password char(48) binary NOT NULL,
primary key(id)
);
添加虚拟用户:
mysql> insert into users(name,password) values(‘tom’,password(‘tom’));
mysql> insert into users(name,password) values(‘jerry’,password(‘jerry’));
配置 vsftpd:
建立 pam 认证所需文件
12345 [root@sherry pam.d]# vim /etc/pam.d/vsftpd.mysql
# 认证时 crypt=2 mysql-password 加密 3 md5 4sha1
auth required /lib64/security/pam_mysql.so user=vsftpd passwd=222222 host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
# 账号检验
account required /lib64/security/pam_mysql.so user=vsftpd passwd=222222 host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
[root@sherry tftp]# useradd -g sherry -s /sbin/nologin -d /home/tftp testftp
[root@sherry home]# chmod go+rx tftp/
请确保 /etc/vsftpd.conf 中已经启用了以下选项
anonymous_enable=YES
local_enable=YES
write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
chroot_local_user=YES
而后添加以下选项
guest_enable=YES
guest_username=testftp #映射用户
pam_service_name=vsftpd.mysql
启动服务:
[root@sherry home]# /etc/init.d/vsftpd restart
Shutting down vsftpd: [OK]
Starting vsftpd for vsftpd: [OK]
登入成功:
[root@martin ~]# lftp -u tom,tom 172.16.178.153
lftp tom@172.16.178.153:/> put a.bin.sql
2448 bytes transferred
[root@sherry tftp]# ll
total 644
-rw——- 1 testftp sherry 2448 May 26 04:50 a.bin.sql
权限配置:
[root@sherry ~]# vim /etc/vsftpd/vsftpd.conf
# 配置 vsftpd 为虚拟用户使用配置文件目录 vusers_config 名字随意
user_config_dir=/etc/vsftpd/vusers_config
创建所需要目录,并为虚拟用户提供配置文件
[root@sherry ~]# mkdir /etc/vsftpd/vusers_config/
[root@sherry ~]# cd /etc/vsftpd/vusers_config/
[root@sherry ~]# touch tom jerry
虚拟用户对 vsftpd 服务的访问权限是通过匿名用户的相关指令进行的。比如,如果需要让 tom 用户具有上传文件的权限,可以修改 /etc/vsftpd/vusers/tom 文件,在里面添加如下选项即可。
[root@sherry ~]# /etc/vsftpd/vusers/tom
anon_upload_enable={YES|NO}
anon_mkdir_write_enable={YES|NO}
anon_other_write_enable={YES|NO}
玩转 vsftpd 服务器的四大高级配置:http://www.linuxidc.com/Linux/2013-09/90565.htm
vsFTPd 配置教程:http://www.linuxidc.com/Linux/2013-09/90562.htm
Ubuntu 实用简单的 FTP 架设 http://www.linuxidc.com/Linux/2012-02/55346.htm
Ubuntu 上架设 FTP 服务器和 Apache 服务器 http://www.linuxidc.com/Linux/2011-04/35295.htm
Ubuntu 13.04 安装 LAMP\vsftpd\Webmin\phpMyAdmin 服务及设置 http://www.linuxidc.com/Linux/2013-06/86250.htm
RHEL6 平台下 SeLinux 和 vsftpd 的匿名上传的简单案例 http://www.linuxidc.com/Linux/2013-04/82300.htm
Linux 系统 vsftpd 源码安装 http://www.linuxidc.com/Linux/2013-03/81475.htm
openSUSE 13.2/13.1 下安装配置 FTP 服务器 vsftpd http://www.linuxidc.com/Linux/2014-12/110070.htm
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-06/131939.htm