网络共享服务:ftp,nfs,samba比较
从跨平台角度说,
samba, ftp差不多, 而nfs不支持windows平台
从挂载角度说,
samba, nfs可以把远程目录挂载到本地目录上, 对用户是透明的. 而ftp则不行
从使用范围上说,
samba, nfs最好是限定在局域网内, 不要暴露在公网上. 而ftp则不同, 既可以面向内网, 也可以是公网.
从面向对像来说,
三者都支持文件, 但samba还支持打印机, 以及作windows域管理器
FTP(File Transfer Protocol,文件传输协议)是INTERNET上仍常用的最老的网络协议之一,他为系统提供了通过网络与远程服务器进行传输的简单方法,在REDHAT ENTREPRISE LINUX7中,FTP服务器包的名称为VSFTPD,他代表Very Secure File Transfer Protocol Damon,服务器名称也叫做vsftpd
vsftp提供三种远程的登录方式:
(1)匿名登录方式:不需要用户名和密码,就可以登录到服务器上
(2)本地用户方式:需要账户名和密码才能登录,而且,这些用户都必须是系统已经存在的用户
(3)虚拟用户:同样需要用户名和密码才能登录,但是,这些用户是系统里面没有的。
默认配置文件让ANONYMOUS用户只能下载位于CHROOT目录中的内容
/var/ftp/这意味着远程FTP客户端能以用户ANONUMOUS或ftp身份连接到服务器(无需密码),并从ftp服务器上的/var/ftp/目录中下载文件(其本地ftp用户可以读取这些文件)
FTP的两个连接:
命令连接: 文件管理类命令,始终在线的连接
数据连接: 数据传输,按需创建及关闭的连接
主动: 由服务器创建连接
命令:
Client:50000 --> Server: 21
数据:
Client: 50000+1 <-- Server: 20/tcp
被动: 由客户端创建连接
命令:
Client:50000 --> Server: 21
数据:
Client: 50000+1 --> Server: 随机端口
服务器端程序有:
wu-ftpd:
vsftpd: Very Secure ftp Daemon
proftp:
pureftpd
FileZilla
Serv-U
客户端程序有:
CLI:
ftp
lftp, lftpget
GUI:
gftp
Flashftp
cuteftp
filezilla
gftp(Linux GUI)
安装服务器端vsftpd程序:
yum install vsftpd -y //这里是192.168.1.102作为vsfptd服务器
安装客户端ftp程序:
yum install ftp -y //这里是192.168.1.104作为客户端进行测试
客户端访问:
# ftp 192.168.1.7
服务器端程序vsftpd程序相关文件组成
用户认证配置文件: /etc/pam.d/vsftpd
服务脚本: /etc/rc.d/init.d/vsftpd
配置文件目录: /etc/vsftpd
主配置文件: /vsftpd.conf
匿名用户(映射为ftp用户)共享资源位置: /var/ftp
系统用户通过ftp访问的资源的位置: 用户自己的家目录
虚拟用户通过ftp访问的资源的位置: 给虚拟用户指定的映射成为的系统用户的家目录
主程序: /usr/sbin/vsftpd
vsftpd配置文件及相关配置: /etc/vsftpd/vsftpd.conf
匿名用户的配置:
anonymous_enable=YES //允许匿名用户登录 anon_upload_enable=YES //允许匿名用户上传文件 anon_mkdir_write_enable=YES //允许匿名用户创建目录 anon_other_write_enable=YES //允许匿名用户执行delete,rmdir等这些操作
示例:服务器端:# mkdir upload
# setfacl -m u:ftp:rwx upload //让ftp这个用户对upload目录拥有读写执行权限,当然也可以直接对pub目录修改权限
客户端:以ftp用户登录,密码置空
# cd upload
# lcd /etc
# put fstab //可以上传文件到upload目录中,anon_upload_enable=YES
# mkdir test //也可以创建目录了,anon_mkdir_write_enable=YES
# delete fstab // 删除文件, anon_other_write_enable=YES
# rmdir upload //删除目录
系统用户的配置:
local_enable=YES //允许系统用户登录 write_enable=YES //允许系统用户上传删除操作 local_umask=022 禁锢所有的ftp本地用户于其家目录: chroot_local_user=YES 禁锢文件中指定的ftp本地用户与家目录 chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list //让本地用户登录后执行pwd命令后看到的都是”/“,而不是自己的家目录
示例:
服务器端创建一个用户:# useradd user1
客户端登录: 以user1用户登录
# mkdir upload // write_enable=YES
# lcd /etc
# put fstab
日志:
xferlog_enable=YES
xferlog_std_format=YES
xferlog_file=/var/log/xferlog
改变上传文件的属主
chown_uplodads=YES
chown_username=whoever
vsftpd使用pam完成用户认证,其用到的pam配置文件:
pam_service_name=vsftpd
是否启用控制用户登录的列表文件:
userlist_enable=YES //是否开启控制用户登录的功能,下面选项读取的是/etc/vsftpd/user_list文件
userlist_deny=YES|NO //如果为YES,user_list中的用户就不能登录,为黑名单; 如果为NO,user_list中的用户就可以登录,为白名单
连接限制:
max_clients: 最大并发连接数;
max_per_ip: 每个IP可同时发起的并发请求数
传输速率:
anno_max_rate: 匿名用户的最大传输速率,单位是“字节/秒”
local_max_rate: 本地用户的最大传输速率
虚拟用户:所有的虚拟用户会被统一映射为一个指定的系统账号,访问的共享位置即为此系统账号的家目录
各虚拟用户可被赋予不同的访问权限
通过匿名用户的权限控制参数进行指定
虚拟用户账号的存储方式:
1.文件: 编辑文件
奇数行为用户
偶数行为密码
但是此文件需要被编码为hash格式,所以修改不是很方便
2.关系型数据库中的表中:
即时查询数据库完成用户认证
vsftpd是基于pam认证用户的,所以pam要依赖于pam-mysql模块,没有这个模块所以要安装第三方程序:EPEL源中的pam_mysql
vsftpd基于mysql进行用户认证
1. 安装pam_mysql及mysql客户端
这里以192.168.1.102作为vsftpd服务器:
安装mysql客户端: yum install mysql -y
安装pam_mysql依赖包: yum install pam_mysql
2. 创建虚拟用户账号
1. 准备数据库及相关表 这里准备的是192.168.1.105上安装的mariadb数据库,并且已经正常启动,建立存储虚拟用户的数据库,比如这里将其创建为vsftpd数据库
mysql> CREATE DATABASE vsftpd;
mysql> GRANT SELECT ON vsftpd.* TO vsftpd@'192.168.1.%' IDENTIFIED BY 'www.alen.com';
mysql> GRANT SELECT ON vsftpd.* TO vsftpd@127.0.0.1 IDENTIFIED BY 'www.alen.com';
mysql> FLUSH PRIVILEGES;
mysql> USE vsftpd;
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)
-> );
在vsftpd服务器上测试连接mysql服务器:# mysql -uvsftpd -h 192.168.1.105 -pwww.alen.com
2. 添加测试的虚拟用户 根据需要添加所需要的用户,这里将其密码为了安全应该使用PASSWORD函数加密后存储 mysql> INSERT INTO users(name,password) VALUES('tom',PASSWORD('alen'));
mysql> INSERT INTO users(name,password) VALUES('jerry',PASSWORD('alen'));
3. 配置vsftpd
1. 建立pam认证所需文件 # vi /etc/pam.d/vsftpd.mysql 添加如下两行:crypt的值参照rpm -q pam_mysql命令结果中的readme文档中的crypt条目0:明文 2: 数据库password加密的方式 auth required /lib/security/pam_mysql.so user=vsftpd passwd=www.alen.com host=192.168.1.105 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required /lib/security/pam_mysql.so user=vsftpd passwd=www.alen.com host=192.168.1.105 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
注意: 由于mysql的安装方式不同,pam_mysql.so基于unix sock连接mysql服务器时可能会出问题,此时,建议授权一个可远程连接的mysql并访问vsftpd数据库的用户。
2. 修改vsftpd的配置文件,使其适应mysql认证
建立虚拟用户映射的系统用户及相应目录
# useradd -s /sbin/nologin -d /var/ftproot vuser //-d ftpserver/pub 可以是一个单独的文件系统
# chmod go+rx /var/ftproot
确保/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=vuser
并确保pam_service_name选项的值如下所示
pam_service_name=vsftpd.mysql
4. 启动vsftpd服务
# service vsftpd start
# chkconfig vsftpd on
查看端口开启情况
# netstat -tnlp | grep :21
使用虚拟用户登录,验证配置结果,以下为在192.168.1.104上的命令方式测试,你也可以在其他Win Box上用IE或者FTP客户端工具登录验证
# ftp 192.168.1.102
5. 配置虚拟用户具有不同的访问权限
vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名,配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可 1. 配置vsftpd为虚拟用户使用配置文件目录 # vim vsftpd.conf 添加如下选项 user_config_dir=/etc/vsftpd/vusers_config 2.创建所需要目录,并为虚拟用户提供配置文件 # mkdir /etc/vsftpd/vusers_config # cd /etc/vsftpd/vusers_config # touch tom jerry 3. 配置虚拟用户的访问权限 虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的,比如,如果需要让tom用户具有上传文件权限,可以改/etc/vsftpd/vusers_config/
anon_world_readable_only=NO anon_upload_enable={YES|NO} anon_mkdir_write_enable={YES|NO} ano_other_write_enable={YES|NO}
6. 常见权限配置
local_root=/var/www/html/web1 //虚拟用户登录后的新的根目录
virtual_use_local_privs=NO //虚拟用户和本地用户有相同的权限,默认是NO
anon_umask=022 //设置上传或创建目录的权限
write_enable=YES //开放本地用户写权限
anon_world_readable_only=NO //开放下载权限,写成YES,将不能列出文件和目录
anon_upload_enable=YES //开放上传权限
anon_mkdir_write_enable=YES //开放创建目录权限
anon_other_write_enable=YES ////开放删除、重命名权限
补充:
其他下载工具 :axel, lftpget, wget, curl