File Transfer Protocol 早期的三个应用级协议之一 mysql
两种模式:(从服务器角度 )linux
服务器被动模式数据端口示例: 227 Entering Passive Mode (192,168,175,138,224,59) 服务器数据端口为:224*256+59 sql
FTP服务器: Wu-ftpd,Proftpd,Pureftpd,ServU,IIS,vsftpd:Very Secure FTP Daemon数据库
vsftpd是CentOS默认FTP服务器 高速,稳定,下载速度是WU-FTP的两倍,单机最多可支持15000个并发,vsftpd程序包vim
客户端软件: ftp,lftp,lftpg et,wget,curl windows
状态码: centos
用户认证: 浏览器
用户认证配置文件:/etc/pam.d/vsftpd 服务器
配置文件:/etc/vsftpd/vsftpd.conf (man 5 vsftpd.conf )格式:option=value 注意:=先后不要有空格网络
命令端口 listen_port=21
主动模式端口 connect_from_port_20=YES 主动模式端口为20 ftp_data_port=20 指定主动模式的端口
linux客户端默认使用被动模式 ,windows 客户端默认使用主动模式
pasv_min_port=6000 0为随机分配 pasv_max_port=6010
使用当地时间 use_localtime=YES 使用当地时间(默认为NO,使用GMT)
anonymous_enable=YES 支持匿名用户
no_anon_password=YES(默认NO) 匿名用户略过口令检查
anon_world_readable_only (默认YES)只能下载所有读的文件
anon_upload_enable=YES 匿名上传,注意:文件系统权限
anon_mkdir_write_enable=YES
anon_other_write_enable=YES 可删除和修改上传的文件
anon_umask=077 指定匿名上传umask 指定上传文件的默认的全部者和权限
chown_uploads=YES(默认NO)
chown_username=wang chown_upload_mode=0644
guest_enable=YES 全部系统用户都映射成guest用户
guest_username=ftp 配合上面选项才生效,指定guest用户 local_enable=YES 是否容许linux用户登陆
write_enable-YES 容许linux用户上传文件
local_umask=022 指定系统用户上传文件的默认权限
local_root=/ftproot 非匿名用户登陆所在目录
禁锢全部系统用户在家目录中 chroot_local_user=YES(默认NO,不由锢)禁锢系统用户
禁锢或不由锢特定的系统用户在家目录中,与上面设置功能相反
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
当chroot_local_user=YES时,则chroot_list中用户不由锢 当chroot_local_user=NO时,则chroot_list中用户禁锢
登陆提示信息:
ftpd_banner=“welcome to heiye ftp server"
banner_file=/etc/vsftpd/ftpbanner.txt 优先上面项生效
目录访问提示信息:
dirmessage_enable=YES (默认)
message_file=.message(默认)信息存放在指定目录下.message
使用pam(Pluggable Authentication Modules)完成用户认证:
传输参数调整:
View Code
配置FTP服务以非独立服务方运行:listen=NO,默认为独立方式 cat /etc/xinetd.d/vsftpd
service ftp {
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/vsftpd
log_on_failure += USERID
disable = no }
实现基于SSL的FTPS :
查看是否支持SSL ldd `which vsftpd` 支持可查看到libssl.so
建立自签名证书 cd /etc/pki/tls/certs/ && make vsftpd.pem openssl x509 -in vsftpd.pem -noout –text
配置vsftpd服务支持SSL:
/etc/vsftpd/vsftpd.conf ssl_enable=YES 启用
SSL allow_anon_ssl=NO 匿名不支持
SSL force_local_logins_ssl=YES 本地用户登陆加密
force_local_data_ssl=YES 本地用户数据传输加密
rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem
vsftpd虚拟用户 : 全部虚拟用户会统一映射为一个指定的系统账号:访问共享位 置,即为此系统账号的家目录 ,各虚拟用户可被赋予不一样的访问权限,经过匿名用户的权限控 制参数进行指定
虚拟用户账号的存储方式: 文件:编辑文本文件,此文件须要被编码为hash格式 (奇数行为用户名,偶数行为密码 )
实现基于文件验证的vsftpd虚拟用户
1、建立用户数据库文件
1 2 3 4 |
vim /etc/vsftpd/vusers.txt (heiye wangpass \n xiaoyao xiaoyaopass) cd /etc/vsftpd/ db_load -T -t hash -f vusers.txt vusers.db chmod 600 vusers.db |
2、建立用户和访问FTP目录 •
1 2 3 4 5 6 |
useradd -d /var/ftproot -s /sbin/nologin vuser chmod +rx /var/ftproot/ centos7 还须要执行如下操做: chmod -w /var/ftproot/ mkdir /var/ftproot/upload setfacl -m u:vuser:rwx /var/ftproot/upload |
3、建立pam配置文件
vim /etc/pam.d/vsftpd.db
4、指定pam配置文件
vim /etc/vsftpd/vsftpd.conf
5、SELinux设置: 禁用SELinux 或者 setsebool -P ftpd_full_access 1
6、虚拟用户创建独立的配置文件
mdkir /etc/vsftpd/vusers.d/ 建立配置文件存放的路径
vim /etc/vsftpd/vsftpd.conf user_config_dir=/etc/vsftpd/vusers.d/
cd /etc/vsftpd/vusers.d/ 进入此目录
容许heiye用户可读写,其它用户只读
vim heiye 建立各用户自已的配置文件
vim xiaoyao 建立各用户自已的配置文件local_root=/ftproot 登陆目录改变至指定的目录
实现基于MYSQL验证的vsftpd虚拟用户:
1、安装所须要包和包组: 在数据库服务器上安装包,在FTP服务器上安装vsftpd和pam_mysql包,需手动编译安装的 :
yum -y groupinstall "Development Tools"
yum -y install mariadb-devel pam-devel vsftpd
下载pam_mysql-0.7RC1.tar.gz
./configure --with-mysql=/usr --with-pam=/usr --with-pam-mods-dir=/lib64/security && make && make install
2、在数据库服务器上建立虚拟用户帐号
1.创建存储虚拟用户数据库和链接的数据库用户 mysql> CREATE DATABASE vsftpd; mysql> SHOW DATABASES;
2.准备相关表
mysql> USE vsftpd;
mysql> CREATE TABLE users ( id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, name CHAR(50) BINARY NOT NULL, password CHAR(48) BINARY NOT NULL );
3.添加虚拟用户
mysql>DESC users; mysql> INSERT INTO users(name,password) values(‘heiye',password('magedu'));
mysql> INSERT INTO users(name,password) values(‘heiye',password('centos'));
mysql> SELECT * FROM users;
3、在FTP服务器上配置vsftpd服务
1.在FTP服务器上创建pam认证所需文件 vi /etc/pam.d/vsftpd.mysql 添加以下两行
auth required pam_mysql.so user=vsftpd passwd=centos host=mysqlserver db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=centos host=mysqlserver db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
注意:crypt是加密方式,0表示不加密,1表示crypt(3)加密,2表示 使用mysql password()函数加密,3表示md5加密,4表示 sha1加密
配置字段说明
View Code
2.创建相应用户和修改vsftpd配置文件,使其适应mysql认证 创建虚拟用户映射的系统用户及对应的目录
1 2 3 4 5 6 7 8 9 10 |
useradd -s /sbin/nologin -d /var/ftproot vuser chmod 555 /var/ftproot(centos7 需除去ftp根目录的写权限 ) mkdir /var/ftproot/{upload,pub} setfacl –m u:vuser:rwx /var/ftproot/upload 确保/etc/vsftpd.conf中已经启用了如下选项 anonymous_enable=YES 添加下面两项 guest_enable=YES guest_username=vuser 修改下面一项,原系统用户没法登陆 pam_service_name=vsftpd.mysql |
4、启动vsftpd服务
1 2 3 4 |
service vsftpd start systemctl start vsftpd chkconfig vsftpd on systemctl enable vsftpd |
查看端口开启状况 netstat -tnlp |grep :21
5、Selinux相关设置:在FTP服务器上执行
1 2 3 4 |
restorecon -R /lib64/security setsebool -P ftpd_connect_db 1 setsebool -P ftp_home_dir 1 chcon -R -t public_content_rw_t /var/ftproot/ |
6、测试:利用FTP客户端工具,以虚拟用户登陆验证结果
tail /var/log/secure
7、在FTP服务器上配置虚拟用户具备不一样的访问权限
vsftpd能够在配置文件目录中为每一个用户提供单独的配置文件以 定义其ftp服务访问权限,每一个虚拟用户的配置文件名同虚拟用 户的用户名。配置文件目录能够是任意未使用目录,只须要在 vsftpd.conf指定其路径及名称便可
一、配置vsftpd为虚拟用户使用配置文件目录 vim /etc/vsftpd/vsftpd.conf 添加以下选项
user_config_dir=/etc/vsftpd/vusers_config
二、建立所须要目录,并为虚拟用户提供配置文件
1 2 3 |
mkdir /etc/vsftpd/vusers_config/ cd /etc/vsftpd/vusers_config/ touch xiaoyao heiye |
三、配置虚拟用户的访问权限
虚拟用户对vsftpd服务的访问权限是经过匿名用户的相关指令进行的。若是须要让用户heiye具备上传文件的权限,能够修改/etc/vsftpd/vusers_config/wang文件,在里面添加以下选项并设置为YES便可,只读则设为NO 注意:需确保对应的映射用户对于文件系统有写权限
NFS:Network File System 网络文件系统,基于内核的文件系统。经过使用NFS,用户和程序能够像访问本地文件同样访问远端系统上的文件,基于RPC(Remote Procedure Call Protocol远程过程调用)实现
RPC采用C/S模式。客户机请求程序调用进程发送一个有进程 参数的调用信息到服务进程,而后等待应答信息。在服务器端 ,进程保持睡眠状态直到调用信息到达为止。当一个调用信息 到达,服务器得到进程参数,计算结果,发送答复信息,而后等待下一个调用信息,最后,客户端调用进程接收答复信息, 得到进程结果,而后调用执行继续进行。
NFS优点:节省本地存储空间,将经常使用的数据如:home目录, 存放在一台NFS服务器上且能够经过网络访问,那么本地终端 将能够减小自身存储空间的使用
软件包:nfs-utils ,Kernel支持:nfs.ko,端口:2049(nfsd), 其它端口由portmap(111)分配
配置文件:/etc/exports , /etc/exports.d/*.exports (CentOS7不支持同一目录同时用nfs和samba共享,由于使用锁机制不一样)
相关软件包:rpcbind(必须),tcp_wrappers (CentOS6开始portmap进程由rpcbind代替 )
NFS服务主要进程:
日志:/var/lib/nfs/
配置NFS使用固定端口 vim /etc/sysconfig/nfs
防火墙除开放上述端口,还需开放TCP和UDP的111和2049 共4个端口
NFS配置文件 导出的文件系统的格式: /dir 主机1(opt1,opt2) 主机2(opt1,opt2) ...
每一个条目指定目录导出到的哪些主机,及相关的权限和选项
•默认选项:(ro,sync,root_squash,no_all_squash)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
• ro,rw 只读和读写 • async 异步,数据变化后不当即写磁盘,性能高 • sync(1.0.0后为默认)同步,数据在请求时当即写入共享 • no_all_squash (默认)保留共享文件的UID和GID • all_squash 全部远程用户(包括root)都变成nfsnobody • root_squash (默认)远程root映射为nfsnobody,UID为 65534,早期版本是4294967294 (nfsnobody) • no_root_squash 远程root映射成root用户 • anonuid和anongid 指明匿名用户映射为特定用户UID和组 GID,而非nfsnobody,可配合all_squash使用 NFS配置文件 在/etc/exports文件中定义导出目录 • /myshare server.example.com • /myshare *.example.com • /myshare server?.example.com • /myshare server[0-20].example.com • /myshare 172.25.11.10 • /myshare 172.25.0.0/16 • /myshare 2000:472:18:b51:c32:a21 • /myshare 2000:472:18:b51::/64 • /myshare *.example.com 172.18.0.0/16 • /myshare desktop.example.com(ro) • /myshare desktop.example.com(ro) server[0- 20].example.com(rw) • /myshare diskless.example.com(rw,no_root_squash) |
NFS工具
rpcinfo :
exportfs:
showmount -e hostname
mount.nfs 挂载工具
NFSv4支持经过挂载NFS服务器的共享“根”,从而浏览 NFS服务器上的共享目录列表 mount nfsserver:/ /mnt/nfs
NFS相关的挂载选项:
1 2 3 4 5 |
fg(默认)前台挂载 bg后台挂载 hard(默认)持续请求 soft 非持续请求 intr 和hard配合请求可中断 rsize和wsize 一次读和写数据最大字节数,rsize=32768 _netdev 无网络不挂载 |
示例: mount -o rw,nosuid,fg,hard,intr 172.18.64.107:/testdir /mnt/nfs/
开机挂载:/etc/fstab 172.18.64.107:/public /mnt/nfs nfs defaults 0 0
自动挂载 :可以使用autofs按须要挂载NFS共享,在空闲时自动卸载
系统管理器指定由/etc/auto.master自动挂载器守护进程控 制的挂载点 ,自动挂载监视器访问这些目录并按要求挂载文件系统 , 文件系统在失活的指定间隔5分钟后会自动卸载 ,为全部导出到网络中的NFS启用特殊匹配 -host 至 “browse”
示例:
/etc/auto.master: /- /etc/auto.direct
/etc/auto.direct:
/foo server1:/export/foo
/user/local/ server1:/usr/local
实现NFS服务
systemctl start nfs-server
systemctl enable nfs-server
mkdir /nfsshare
chown nfsnobody /nfsshare
vi /etc/exports
/nfsshare desktopX(rw)
exporfs –r
mkdir /mnt/nfsshare
mount serverX:/nfsshare /mnt/nfsshare
vim /etc/fstab
nfsserver:/nfsshare /mnt/nfsshare nfs defaults 0 0
mount -a
实现NFS伪根
配置NFS服务器
vi /etc/fstab
/data/read /exports/read none bind 0 0
/data2/write /exports/write none bind 0 0
vi /etc/exports
/exports *(fsid=o,rw,crossmnt)
/exports/read 172.18.64.0/24(ro)
/exports/write 172.18.0.0/24(rw)
配置NFS客户端
mount nfsserver:/ /mnt/nfs
vi /etc/fstab nfsserver:/
/mnt/ nfs4 ro 0 0
SMB:Server Message Block服务器消息块,IBM发布,最先是DOS网络文件共享协议
Cifs:common internet file system,微软基于SMB发布
SAMBA:1991年Andrew Tridgell,实现windows和UNIX相通
SAMBA的功能:
• 共享文件和打印,实如今线编辑
• 实现登陆SAMBA用户的身份认证
• 能够进行NetBIOS名称解析
• 外围设备共享
相关包: Samba 提供smb服务 Samba-client 客户端软件 samba-common 通用软件 cifs-utils smb客户端工具 samba-winbind 和AD相关
相关服务进程:
主配置文件:/etc/samba/smb.conf (帮助参看:man smb.conf)
smb.conf继承了.ini文件的格式,用[ ] 分红不一样的部分
全局设置: [global] 服务器通用或全局设置的部分
特定共享设置:
[homes] 用户的家目录共享
[printers] 定义打印机资源和服务
[sharename] 自定义的共享目录配置
其中:#和;开头的语句为注释,大小写不敏感
Security三种认证方式:
passdb backend = tdbsam 密码数据库格式
samba用户须是Linux用户,建议使用/sbin/nologin
SAMBA服务器全局配置
管理SAMBA用户
添加samba用户
修改用户密码:smbpasswd user
删除用户和密码:
查看samba用户列表:
查看samba服务器状态: smbstatus
配置目录共享 :每一个共享目录应该有独立的[ ]部分
1 2 3 4 5 6 7 8 9 |
[共享名称] 远程网络看到的共享名称 comment 注释信息 path 所共享的目录路径 public 可否被guest访问的共享,默认no,和guest ok 相似 browsable 是否容许全部用户浏览此共享,默认为yes,no为隐藏 writable=yes 能够被全部用户读写,默认为no read only=no 和writable=yes等价,如与以上设置冲突,放在 后面的设置生效,默认只读 write list 三种形式:用户,@组名,+组名,用,分隔 如writable=no,列表中用户或组可读写,不在列表中用户只读 valid users 特定用户才能访问该共享,如为空,将容许全部用 户,用户名之间用空格分隔 |
基于特定用户和组的共享 , 编辑/etc/samba/smb.conf
1 2 3 4 5 |
[share] path = /app/dir valid users=heiye,@admins writeable = no browseable = no |
SMB客户端访问 ,通用命名规范 格式:\\sambaserver\sharename
终端下使用smbclient登陆服务器 :
> cd directory
> get file1
> put file2 smbclient //instructor.example.com/shared -U heiye
可使用-U选项来指定用户%密码,或经过设置和导出USER和 PASSWD环境变量来指定
实现SMB共享
1、在samba服务器上安装samba包 yum -y install samba
2、建立samba用户和组
1 2 3 4 5 |
groupadd -r admins useradd -s /sbin/nologin -G admins heiye smbpasswd -a heiye useradd -s /sbin/nologin xiaoyao smbpasswd -a heiye |
3、建立samba共享目录,并设置SElinux
1 2 3 4 5 |
mkdir /testdir/smbshare chgrp admins /testdir/smbshare chmod 2775 /testdir/smbshare semanage fcontext -a -t samba_share_t '/testdir/smbshare(/.*)?' restorecon -vvFR /testdir/smbshare |
3、samba服务器配置
1 2 3 4 5 6 7 8 9 10 |
vim /etc/samba/smb.conf security = user passdb backend = tdbsam [share] path = /testdir/smbshare write list = @admins systemctl start smb nmb systemctl enable smb nmb firewall-cmd --permanent --add-service=samba firewall-cmd --reload |
4、samba客户端访问
安装包 yum -y install cifs-utils
用heiye用户挂载smb共享并访问
用xiaoyao用户挂载smb共享并访问
SAMBA共享默认只支持同时用一个用户挂载SMB共享 ,CentOS7中可启用多用户挂载功能 客户端挂载samba共享目录后,在客户端登陆的不一样用户 访问同一个samba的挂载点,可得到不一样权限 多用户SMB挂载
多用户SMB挂载
1、samba服务器配置
• yum install samba
• mkdir /multiuser
• vim /etc/samba/smb.conf
1 2 3 4 |
[smbshare] path=/multiuser writable=no write list= @admins 63 |
2、samba服务器建立samba用户
1 2 3 4 5 6 |
useradd –s /sbin/nologin smbuser smbpasswd –s smbuser useradd –s /sbin/nologin –G admins heiye smbpasswd –a heiye useradd –s /sbin/nologin xiaoyao smbpasswd –a xiaoyao |
3、samba服务器设置目录权限和SELinux
对heiye,admins组分配目录读写权限
设置SELinux标签:
4、samba客户端启用多用户挂载
1 2 3 4 5 6 7 8 9 |
• yum -y install cifs-utils • mkdir /mnt/smb • echo 'username=smbuser' >/etc/multiuser • echo 'password=centos' >>/etc/multiuser • chmod 600 /etc/multiuser •vim /etc/fstab //smbserver/smbshare /mnt/smb cifs credentials=/etc/multiuser,multiuser,sec=ntlmssp 0 0 • mount -a |
5、在samba客户端用实现多用户访问
useradd heiye;useradd xiaoyao
用root访问 ls /mnt/smb ; touch /mnt/smb/root.txt
用heiye访问
用xiaoyao访问
实现图形化管理
1、在CentOS6(第二张光盘)上安装包 yum install samba-swat
2、配置swat服务
vim /etc/xinetd.d/swat
disable = no port = 901
only_from = 127.0.0.1 此行改为172.18.0.0/16
service xinetd restart
3、浏览器访问管理 http://127.0.0.1:901 以root用户登陆 (注意:commit changes后会自动从新加载配置,且自动 将/etc/samba/smb.conf中原有的注释全删除 )