1 存储方式
DAS: Direct Attach Storage 直接附件存储
SAN: Storage Area Network 存储区域网络
NAS: Network Attach Storage 网络附件存储
2 文件共享服务
应用层 ftp 可以实现跨平台
内核级 nfs 不能实现跨平台
window linux 共享服务 samba
在linux实现CIFS(SMB)协议 通用网络文件系统
3 FTP
File Transfer Protocol 早期的三个应用程序之一
ftp是C/S架构的文件共享服务
连接的方式:
命令连接 文件管理类命令 持久性的连接
数据连接 ftp数据传输 按照需求创建及关闭连接
数据传输的格式
文本: 在传输的过程可能进行格式转换
二进制传输: 不进行格式转换(尽量使用此方法)
主动 有服务器发起数据连接
命令
client: port --> server:21
数据连接
server 20/tcp --> client port
被动 由客户端创建连接
命令
client: port --> server:21
服务器传过来两个数字 n,m 让客户端连接服务器n*256+m的端口,进行数据连接
数据连接
client port --> server n*256+m
- FTP用户认证
虚拟用户: 仅用于特定服务的资源,也是转化为系统用户
nsswitch: network server switch 名称解析框架
配置文件 /etc/nsswitch.conf
模块: /lib64/libnss*,/usr/lib64/libnss*
pam pluggable authentication module 可插拔认证模块 /lib64/security
配置文件 /etc/pam.conf /etc/pam.d/*
系统用户: 默认使用系统账号进行认证,不可以修改,以虚拟用户进行认证,需要开启
guest_enable=yes
guest_username=username #系统账号
匿名用户: 也是映射为系统用户ftp
- 实现将虚拟用户存于MySQL数据库中
1 因为在centos7中不直接提供pam_mysql的rpm包,所以需要编译安装pam_mysql的包,如果是在centos6,可以直接安装 pam_mysql
yum install mysql_server mysql_devel pam_devel
yum groupinstall "Development tools"
编译安装pam_mysql
a tar xf pam_mysql-0.7RC1.tar.gz
b cd pam_mysql-0.7RC1
c ./configure --with-mysql=/usr --with-pam=/usr --with-openssl --with-pam-mods-dir=/lib64/security
d make && make install
2 创建数据库,授权,创建表,插入用户
a: create database vsftpd;
b: grant select on vsftpd.* to vsftpd@'172.18.%.%' identified by 'vsftpd'
c: create table users(id int unsigned not null auto_increment primary key,
name varchar(50) binary not null,password char(48) binary not null);
d: insert into users values ('tom',password('tom')),('jerry',password('jerry'));
3 创建编辑pam的配置 /etc/pam.d/vsftpd.mysql
auth required /lib64/security/pam_mysql.so user=vsftpd passwd=vsftpd host=IP db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required /lib64/security/pam_mysql.so user=vsftpd passwd=vsftpd host=IP db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
4 创建虚拟用户对应的系统账户
useradd -r -s /sbin/nologin -d /ftpserver/pub vuser 可以设置vuser的家目录
5 编辑vsftp的配置文件/etc/vsftpd/vsftpd.conf
anonymous_enable =yes 虚拟用户是通过匿名用户登陆的
local_enable=yes # 即便开启系统用户也不能登录
write_enable=yes 本地用户可以上传,删除目录或文件
anon_upload_enable=no 全局设置匿名用户是否可以上传文件
anon_mkdir_write_enable=no 全局设置匿名用户不能创建目录
guest_enable=yes
guest_username=vuser
pam_service_name=vsftpd.mysql
6 可以设置不同的用户有不同的权限
1 在/etc/vsftpd/vsftpd.conf 文件添加
user_config_dir=/etc/vsftpd/vuser_config/
2 创建vuser_config 文件夹
mkdir /etc/vsftpd/vuser_config/
touch tom jerry
3 在每个文件中自己定义权限访问控制
anon_upload_enable=yes|not允许匿名用户上传文件
anon_mkdir_write_enable=yes|no 具有创建文件夹的权限
anon_other_write_enable=yes|no 具有删除权限
2 NFS
NFS: Network File System,在linux的内核实现
RPC: Remote Process Call 远程过程调用,函数调用
一部分功能由本地完成,一部分功能由远程主机完成,返回给本机
CentOS 6 NFS的配置
NFS的进程:
nfsd nfs的守护进程,监听在2049/tcp,2049/dup
mount 验证远程的有效性 随机端口
idmapd 用户的请求 文件 属主 属组的映射关系 也监听在随机端口上
portmapper 需要启动 不是nfs自带的,系统所有,报告rpc的信息 111/tcp,111/udp,可以使用此服务,进行端口的访问
quota 磁盘配额的相关进程
注意可以在nfs的配置文件设置nfs的一些工作特性/etc/sysconfig/nfs
CentOS6和CentOS7
CentOS6 的安装
a yum install nfs-utils
b 编辑/etc/exports 文件
c 启动服务,需要先启动rpcbind,然后再启动nfs
注意,在/etc/sysconfig/network中需要有NETWORKING=yes的配置,否则nfs不能启动
CentOS7 的安装
a yum install nfs-server
b 编辑/etc/exports 文件
c 直接可以启动nfs,因为systemd的特性,会将依赖到的服务启动
/etc/exports 的格式:
directory client1(option...) client2(option)
client: IP FQDN Domain Network
options
secure 安全
rw 读写
async 异步
root_squash 挤压管理员权限
no_root_squash 不挤压管理员的权限
all_squash 全部挤压
no_all_squash 全部不压榨
anonuid=id_num 将用户压榨成某个用户
anongid=id_num 将组压榨成某个组
anonuid和anongid 这两个匿名uid和gid修改特定用户和组账号
fsid: 定义根
crossmnt: 允许跨主机挂载
showmount 查看nfs文件共享的工具
-e host 查看对应主机的所有共享的nfs文件系统 本机或非本机都可以使用
-a host 查看哪个文件系统被别人挂载
-d host 查看哪个文件系统被共享
exports
-a 所有
-r 重新读取配置文件
-u 关闭所有的共享
3 samba
smb Service Message Blocl 基于CIFS(common internet file system)协议
监听端口 137/udp 138/udp 139/tcp 445/tcp
1 安装 yum install samba
2 启动脚本/etc/init.d/nmb(名称解析),/etc/init.d/smb(smaba的主服务)
3 编辑配置文件/etc/samba/smb.conf
4 添加系统账号到samba的账号 smbpasswd -a username
smbclient的客户端工具:
smbclient -L IP
smbclient -L IP -U username%password
基于挂载的方式访问
mount -t cifs //server/share_name /mount_point -o username=USERNAME,password=PASSWORD