文件服务
文件服务:
应用层:ftp
内核级网络文件系统:nfs
会话层的协议
跨平台的网络文件系统:cifs(samba)
网络存储:
NAS:网络附加存储,文件系统级别的接口,共享存储的解决方案
SAN:存储取余网络,磁盘级别的块设备(要先分区)iscsi基于Internet的scsi
在专业级别的存储设备上提供远程服务
rpc远程过程调用
ftp:文件传输协议,基于tcp协议,21端口
奇葩
c/s架构协议 c <--> s 通过socket 三次握手四次挥手
命令连接
数据连接:客户端的命令通过一个tcp连接传输过去,服务端收到命令,将结果,打开另一个连接回话发送回去
数据连接不止一个
数据连接与命令连接有状态关系
有关联关系:related,一个连接与另一个连接有说不清道不明的关系
数据传输模式:
文本格式: ssh
二进制格式: https
xml扩展语言,重量级语言 多30%的网络和存储开销
数据连接:
主动模式:服务端主动连接客户端,通过20号端口连接客户端命令用的端口号+1,如果被占用,继续往下搜索知道知道一个
问题:有防火墙,防火墙在客户端可以让请求出去,相应的响应进来,但是外来的请求是被拒绝的
于是出来了被动模式
被动模式:客户端使用随机端口连接服务端某随机端口,客户端发送请求后,服务端通过命令连接发送一个响应报文给客户端,包括了两个号112,123 意思是前边的数值112*256+123=端口号 前边的号要小于256(应为端口号1-65535,256*256)
又有问题,服务器的防火墙呢,服务器的防火墙,开放自己的服务,把一直的提供服务的端口开放,别的全都封闭,类似白名单
协议安全:明文;认证时传输的账号密码是明文
ftps:ftp over ssl
sftp:ftp over ssh
端起碗来吃肉,放下筷子骂娘
世事洞明皆学问人情练达即文章
S:serv-U(Windows)
C:
CLI:ftp lftp curl
GUI:filezilla flashfxp cute gftp
S:开源解决方案
vsftpd:
主程序:vsftpd
配置文件:/etc/vsftp.conf
/usr/lib/systemd/system/vsftp.service
.target
路径映射:默认的根目录/var/ftp
配置文件vsftpd:
用户三类:
匿名用户:ftp 家目录:/var/ftp
系统用户:
虚拟用户:类似httpd basic的用户
用户通过ftp协议服务访问到的根路径时用户自己的家目录,默认可以在自己有权限的地方切换,禁锢用户于其家目录中
配置文件:/etc/vsftpd/vsftpd.conf
directory value
注意:directory一定一定要顶格,前面不能有任何字符,包括空格
匿名用户
匿名用户上传,想改配置文件upload,在改目标目录的权限,访问控制列表也行,但是记得千万不要改/var/ftp的权限,还有布尔值,开放上传后,不能删除,应为不是同一个权限,也不能创建目录,想开放的话要去配置文件把注释掉的mkdir更改,想删除要在下边加一个,把mkdir改成other
系统用户
系统用户:local_enable本地用户,默认允许上传,创建,删除
不能让root连接ftp,因为是明文的,需要额外的法则协同实现配置文件ftpusers,所有添加进这个文件的都不能访问ftp
限制全部用户
chroot-local-users =yes 将本地用户禁锢在家目录中;需要事先取出用户对家目录的写权限
禁锢列表里的用户,同样要去写权限
chroot-list-file=yes
chroot-file-list=/etc/vsftpd/chroot_list
在里边加上用户名
传输日志
xferlog_enable=yes 默认启用,但是没有文件的话还是不行
xferlog_file=/path/to/file 指明日志文件是哪个
最好还是不要启用传输日志,会非常大,除非做了日志滚动
更改匿名用户上传文件的默认属组属主
chown_uploads=yse
chown_username=whoever
超时时长
idle_connection_timeout=#
data_..................=#
listen=NO,启用后将作为独立守护进程监听在ipv4的端口上
pam_service_name=vsftpd 文件名/etc/pam.d目录下
是不是启用用户列表:pam实现的
userlist_enable=yes 启用user—list文件控制登录
userlist_deny=no|yes 控制userlist是白名单还是黑名单,默认是黑名单
tcp_wrapper=yes iptables时候说
虚拟用户:除了系统用户之外的字符串,作为用户登录登录时候用户名和密码
虚拟用户要映射一个系统用户
首先启用来宾账号
guest_enable=yes
制定映射用户
guest_username=vusers
用户账号存储
文件,mysql等能存数据的地方都可以
认证功能托管给pam,要想让vsftp使用虚拟用户,要看pam支不支持虚拟用户
基于何种服务存储用户信息,对存储服务的适配靠pam实现
pam_mysql:pam-mysql c7要编译安装
mariadb-server,mariadb-devel,pam-devel
pam模块地址/usr/lib64/security下
make && make install
创建数据库授权用户,创建账号和文秘
首先是创建数据库,然后创建授权用户,创建相关的表
在pam.d下创建文件 vsftpd.vhost(一个账户有两行,上下都一样,只是开头的auth和account不一样,有几个用户就写几*2行)
auth required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=mageedu host=127.0.1 db==vsftp table=users usercolumn=name passwdcolumn=passwd crypt=0
account required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=mageedu host=127.0.1 db==vsftp table=users usercolumn=name passwdcolumn=passwd crypt=0
日志文件/var/log/secure
配置vsftpd,添加或修改以下选项pam_server,guest的两个
pam_service_name=vsftpd.vhost
guest_enable=YES
guest_username=mgmg
虚拟用户的写权限要要通过匿名用户一样的指令来定义,要是想要不同的权限怎么办,编辑配置文件vsftpd.conf,加一行
user_config_fir=目录
然后到里边编辑两个文件,anon_upload_enable
anon_mkdir_write_enable=yes
anon_other_write_enable
=yes
7月19号上午最后30分钟
nfs
监听在tcp 2049端口
只能基于来源主机的IP地址做验证
用于监听端口的服务来实现验证
nis
网络信息服务,主要提供认证功能,但是传输是不加密的,不安全
ldap
轻量级目录访问服务,协议,功能与nis相似,读性能高很多,但是写性能差,仍然是明文
ldaps
ldap over ssl/tls 取代nis的原因,可以加密
异步模型:一件事做着,突然调用别的数据,调用后不管调用结不结束对方在不在,自己该干什么接着干什么干什么
辅助类:rpc,portmapper
rpc.mounted 认证
rpc.locked 加锁
rpc.stated 状态追踪
如何构建一台nfs-server y以c7为例
yum -y install nfs-utils
systemctl start nfs 启动
编辑配置文件/etc/exports 或者编辑/etc/exports.d/* 定义共享
是个路径 /PATH/TO/SOMADIR client客户端地址clients1_export_options [cilients(export_options)。。]多个空格隔开
建议导出的是本地的文件系统,独立的某个分区,但是,是目录也无所谓
知名客户端地址的方式
单主机 single host ipv4 ipv6 FQDN
网络地址 address/netmask
知己名统配 *.magedu.com
域内的主机组 @groupname
匿名 anonymous 使用*匹配所有组
通用选项
ro:只读
rw:读写权限访问允许
sync/async:同步/异步
no subtree check :不检查子树
用户id映射
root_squash:压缩root用户,一般只讲root映射为nfsbody,默认的
no_root_squash:不压缩
all_squash:全部压缩
anonuid and anongid:将压缩的用户映射为此处指定的用户,将uid和gid改成想要的
exportfs -ar 将所有目录重新导出
-au 将所有的导出目录关闭
-v 详细信息
-o 重新定义导出选项
事例:
mkdir /data/shared
vim /etc/exports
/data/shared 172.16.7.7
exportfs -ar
mount -t nfs/mount.nfs servername:/path/to/share /path/to/mount_point
mount.nfs 172.16.100.67:/data/shared /mydata
showmount 显示nfs怪哉信息
-e IP地址 查看制定主机上游那些文件系统可以挂载可以被多个客户端挂载使用
7月19下午 第一节课最后
博客作业
实践作业:
1.使用nfs server 导出/data/application在目录中提供wordpress
2.nfs client 挂载此导出的文件系统至/var/www/html
3.客户端(lamp)部署wordpress,并让其正常访问,确保能正常发文件上传照片
4.客户端2(lamp),挂载nfs server 导出的问价系统只/var/www/html;验证其wordpress是否可被访问,要确保能正常发文章
实践作业:
1.nfs server 导出/data/目录
2.nfs client 挂载/data/至本地的mysqld或mariadb服务的数据设置为/mydata,要求服务能正常启动
samba:跨平台共享文件系统 linux--Windows
功能:文件系统共享
打印机共享
netBIOS协议:网络基本输出系统
点到点 peer/peer (workgroup model)
domain model
安装使用samba
服务端
yum -y install samba(服务端)
与Windows samba-dc
客户端 samba-client
主程序 smbd
nmbd :netBIOS
主配置文件 /etc/samba/smb.conf samba-common提供
Unit file smb.service
nmb.service
监听端口:137/udp 138/udp
139/tcp 445/tcp
启动服务的时候连个都要启动
客户端
smbclient:类似于lftp,交互模式下put,get文件
mount.cifs:挂载cifs文件系统的专用命令
samba配置
smb.conf ini风格
两类配置端
全局配置
1.网络相关:
workgroup:加入的网络组
netBIOS name:定义本地的netBIOS名字
interfaces=lo eht0|ip/netmask监听的地址,eth0上所有地址
hosts allow=:白名单
2.日志相关
log file :日志文件
max log size :日志回滚大小
3.独立运行服务器standalone
security = user :安全级别,控制安全的严格程度
user:任何人来了必须提供账号密码,samba的用户必须是系统用户,密码不是shadow的密码samba自我独立管理的密码
share:匿名共享
server:让第三方服务器认证
domain:使用DC认证;基于kerberos协议进行
passdb backend=tdbsam :定义上边的密码文件的格式
4.printing options 打印相关 了解
load printers:是不是加载打印机
cups options:一般使用raw格式,一般不用修改
共享文件系统配置 三类
homes:为每个samba用户(本地用户)定义其是否能够访问通过samba服务访问自己的家目录
printers:定义打印服务
shared file system:共享服务定义
指令:
comment:共享的注释信息
browseable:是不是可以浏览,是否可被用户查看(ls可见)
path:定义当前共享所映射的文件路径
guest ok:是否允许来宾匿名账号访问
public:是不是公开给所有的用户
wirtable:是不是可写
write list:拥有写权限的列表
wirte list= user1 user2
用户名
@组名
+组名 组内成员都有写权限
自己如何定义一个共享,以及定义的的共享是不是可以使用
[developers]--------------要用[]括起来
comment=develop tools
path=/data/tools
browseable=yes
guest ok=yes
writable=yes
samba自带的测试工具
显示目标有哪些共享
smbclient -L 172.16.100.68 -U name(省略即匿名)
samba用户的管理
smbpasswd [options] username
-a:添加
-x:删除
-e:启用
-d:禁用
-h:帮助
pdbedit
-h:帮助
-L:列出samba中的所有用户和id号
-a:添加
-u username 一起用 -a -u username
-x:删除
-u username
-t:--passwd-from-stdin,从标准输入接受密码,类似passwd --stdin
smbclient //samba_server/share_name -U username
权限即要有共享权限也要有文件权限
smbstatus smb信息 用户啊之类的
-b:简要格式信息
-v:更加详细的信息
mount.cifs //172.16.100.68/developers /tools -o username=centos,passwd=magedu
将远程共享文件挂载到本机
但是要注意用户权限的问题,root什么都干不了,同名的也是,但是同id的什么都能干
注意:挂载访问的时候,你的当前用户无论是什么,都会被samba识别成你所挂载的用户,比如我拿root挂载developers的时候,-o的选项的用户是centos,所以即便我是拿root挂载,但是samba识别的我的身份呢还是centos