文件服务器:mysql
基于应用层:FTPios
基于文件系统的文件服务器:sql
内核级的网络文件系统:NFS数据库
POSIX APIcentos
跨OS的网络文件系统:CIFS安全
网络存储:服务器
NAS:Network Attached Storage,网络附加存储;网络
文件系统级别的存储接口;架构
SAN:Storage Area Network,存储区域网络;app
块[设备]级别的存储接口;
iSCSI
FTP:
File Transfer Protocol,文件传输协议;
C/S架构:
两组套接字:
控制链接套接字:21/TCP
数据链接套接字:20/TCP,随机套接字;
TCP链接:
控制链接(命令链接)
数据链接
数据传输的模式:
文本格式(ASCII):
二进制格式:
数据链接的创建方式:
主动模式:服务器主动向客户端发送创建数据链接的请求;
被动模式:从客户端向服务器已经协商好的端口发起数据链接创建的请求;
端口的格式:112,123
FTP自己的安全性:
默认明文传输数据;认证时的用户名和密码均为明文;
安全加强:
ftps:ftp over SSL/TLS;
sftp:ftp over SSH
FTP协议的实现;
S:
Windows系统:IIS,Serv-U
Linux系统:wuftpd,proftpd,pureftp,vsftpd
C:
CLI:ftp,lftp,wget,lftpget,...
GUI:FlashFXP,FileZila,CuteFTP,GFTP,...
vsftpd:
开源解决方案;
安装:vsftpd-VERSION.release.rpm
程序环境:
主配置文件:/etc/vsftpd/vsftpd.conf
辅助配置文件:/etc/vsftpd/other_file
主程序:/usr/sbin/vsftpd
默认的匿名用户访问的数据根目录:/var/ftp
Systemd Unit File:/usr/lib/systemd/system/vsftpd.service
配置vsftpd:
用户类别:
匿名用户:ftp,anonymous;
系统用户:存在于/etc/passwd中的用户;
系统用户若是经过验证访问FTP站点,其默认访问的目录为其家目录;还能够切换至真正的根目录;
针对于这一问题,能够将其直接禁锢于其家目录中;
虚拟用户:只能访问FTP服务器但不能完成系统登录操做的用户;
数据文件:
RDBMS:
主配置文件:/etc/vsftpd/vsftpd.conf
其中的主要配置指令格式:
Directive=Value
注意:
1.全部Directive字符串前面不容许添加任何字符,即全部的指令必须位于本行的绝对行首;
2."="两侧绝对不容许出现空白字符;
3.Value部分,若是是布尔值,则必须都为大写字母,如YES,NO;
经常使用的指令:
全局的指令:
write_enable=YES
匿名用户受权:
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_umask=022
系统用户:
local_enable=YES
local_umask=022
禁锢系统用户于其家目录中:
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
注意:
若是chroot_local_user=YES,那么除了/etc/vsftpd/chroot_list中的用户以外,全部用户都被禁锢于家目录;
若是chroot_local_user=NO,那么除了/etc/vsftpd/chroot_list中的用户以外,全部用户都不被禁锢于家目录;
定义传输日志:
xferlog_enable=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
用户访问控制:
userlist_enable=YES
userlist_deny=YES
userlist_file=/etc/vsftpd/user_list
注意:
若是userlist_deny=YES,那么/etc/vsftpd/user_list就是黑名单,并且无需密码认证;
若是userlist_deny=NO,那么/etc/vsftpd/user_list就是白名单,存在于此文件中而且不存在于/etc/vsftpd/ftpusers文件的用户,能够访问FTP服务器;
认证机制:
PAM认证:
pam_service_name=vsftpd
主要认证用户帐户的身份;
TCP_WRRAPERS认证:
tcp_wrappers=YES
应用/etc/hosts.allow和/etc/hosts.deny完成基于IP地址认证;
被动模式:
pasv_enable=YES
pasv_max_port=61000
pasv_min_port=60000
限速:
local_max_rate=128000
anon_max_rate=50000
注意:单位是Byte/S
回顾:
FTP
21/TCP
20/TCP, 某随机端口/TCP
ASCII
BINARY
匿名用户:ftp, anonymous
本地用户:存储于/etc/passwd中的用户
虚拟用户:仅能访问FTP服务但不能登陆系统
vsftpd,
/etc/vsftpd/vsftpd.conf
vsftpd(2)
1.vsftpd的虚拟主机
2.vsftpd的虚拟用户
利用文件系统的数据库文件存放用户帐户和密码
利用MySQL存放用户帐户和密码
3.分别设定不一样虚拟用户的访问权限
vsftpd的虚拟主机:
区分不一样的虚拟主机,仅依靠套接字的不一样而已;
listen_port=21
listen_address=172.16.69.1
基本ftp服务器虚拟主机:/etc/vsftpd/vsftpd.conf
listen_port=21
listen_address=172.16.69.1
存储虚拟用户于文件的虚拟主机:/etc/vsftpd/vuser_file.conf
listen_port=21
listen_address=172.16.69.101
存储虚拟用户于MySQL的虚拟主机:/etc/vsftpd/vuser_mysql.conf
listen_port=21
listen_address=172.16.69.201
虚拟用户:
虚拟用户帐户存储于何处?
文件,MySQL,Oracle,Redis,LDAP...
vsftpd自己不具有用户帐户身份验证功能,认证功能托管给pam;
pam:Plugin Athentication Module,插入使认证模块
以文件存放虚拟用户的配置步骤:
1.建立用于保存虚拟用户文件,其中奇数行为用户名,偶数行为密码;
# touch VUSER_FILE
tom
123456
jerry
123123
2.将保存虚拟用户帐户的文本文件转换为数据库文件:
db_load -T -t hash -f /PATH/TO/VUSER_FILE /PATH/TO/USERDB.db
3.设定PAM的认证文件
/etc/pam.d/vusers.file
auth required /lib64/security/pam_userdb.so db=/PATH/TO/USERDB
account required /lib64/security/pam_userdb.so db=/PATH/TO/USERDB
4.建立一个用于映射虚拟用户身份的本地用户
useradd LOCAL_USER
5.修改此虚拟主机的配置文件:
anonymous_enable=NO 匿名用户
guest_enable=YES 来宾用户
guest_username=LOCAL_USER 来宾用户名
pam_service_name=vusers.file pam认证文件
local_root=/myftp/ftpdata 单独设置权限目录
anon_upload_enable=YES 容许上传文件
anon_mkdir_write_enable=YES 容许建立目录
anon_other_write_enable=YES 容许修改和删除
若是想要对于全部的虚拟用户分别设定权限,可使用:
在虚拟主机的主配置文件中添加指令:
user_config_dir=/PATH/TO/CONFIG_DIR
建立出这个目录,而且在目录下建立出与虚拟用户名相同的文件;
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/myftp/ftpdata/alice
anon_umask=022
基于MySQL存放虚拟用户
'centos',PASSWORD('qhdlink')
'suse',PASSWORD('link19')
1.编译安装pam的mysql驱动
下载地址:http://pam-mysql.sourceforge.net/
须要预先安装编译环境,即: Development Tools,Server Platform Development, pam-devel, mysql_devel
# tar xf pam_mysql-0.7RC1.tar.gz
# cd pam_mysql-0.7RC1
# ./configure --with-pam=/usr --with-mysql=/usr --with-pam-mods-dir=/lib64/secutiry
# make -j 4 && make install
2.建立数据库,数据表,及受权用户;
mysql> create database vsftpd;
mysql> use vsftpd;
mysql> create table users (username char(20),password char(48));
mysql> insert into users values ('centos',PASSWORD('qhdlink')),('gentoo',PASSWORD('qhdlink'))
mysql> grant all on vsftpd.* to 'vsftpd'@'localhost' identified by 'vsftppass';
mysql> grant all on vsftpd.* to 'vsftpd'@'127.0.0.1' identified by 'vsftppass';
mysql> grant all on vsftpd.* to 'vsftpd'@'172.16.%.%' identified by 'vsftppass';
3.建立pam的认证文件:
/etc/pam.d/vusers.mysql
auth required /lib64/security/pam_mysql.so user=vsftpd passwd=vsftppass host=127.0.0.1 db=vsftpd table=users usercolumn=username passwdcolumn=password crypt=2
account required /lib64/security/pam_mysql.so user=vsftpd passwd=vsftppass host=127.0.0.1 db=vsftpd table=users usercolumn=username passwdcolumn=password crypt=2
4.建立映射用户:
useradd mysqluser
5.修改此虚拟主机的配置文件:
anonymous_enable=NO
guest_enable=YES
guest_username=LOCAL_USER
pam_service_name=vusers.mysql
user_config_dir=/PATH/TO/MYSQL_USER_CONFIG
文件服务——NFS
NFS——Network File System
NIS
LDAP
NFS: SUN
NFSv1
NFSv2, NFSv3, NFSv4
nfs: 2049/TCP
辅助类的服务:
rpc.portmapper:端口映射表
rpc.mountd:认证
rpc.lockd:加锁
rpc.statd:状态
安装nfs:
nfs-utils
nfs服务器配置文件:
/etc/exports
/etc/exports.d/*
主配置文件主要包括两部分:
Shared_path Machine_Name1(Security_options) Machine_Name2(Security_options) ...
Shared_path:建议写绝对路径,要共享的目录;
Machine_Name:
single host:单独主机,IP地址或主机名
wildcards:使用*或?来作通配,若是只写一个*则表示全部主机;
IP networks:IP网段,NETWORK/NETMASK, NETWOEK/PREFIX_LEN
192.168.100.0/255.255.255.0
172.16.0.0/16
exportfs -ar命令重读配置文件
exports 查看配置文件的设置
showmount 显示nfs服务器的信息
showmount -e 172.131.132.1.
Security_options:
General Options:
ro:只读
rw:读写
sync:同步存储
async:异步存储
nohide:不把共享目录中子目录挂载的内容隐藏;
User ID Mapping:
root_squash:压缩root用户权限,通常映射为nfsnobody;
all_squash:压缩全部的本地用户权限,映射为nfsnobody;
注意:默认状况下,root用户被压缩权限,而全部的普通用户都没有被压缩权限;若是想要取消root用户的权限压缩,则须要使用no_root_squash选项;
anonuid and anongid:为受到权限压缩的用户指定一个额外的UID和GID作映射,而再也不使用nfsnobody;
注意:uid和gid是能够任意指定的,而无需关注是否有对应于此uid的用户或gid的组;
NAS: 网络附加存储,文件系统级别的存储网络;
回顾:
vsftpd
listen-port=
listen-address=
虚拟用户:
pam_userdb.so
pam_mysql.so
user_config_dir=
NFS
NAS
文件服务器(4)
Samba
smb协议:Service Message Block,服务消息块;
139/tcp,445/tcp
NetBios协议:
137/udp,138/udp
cifs文件系统
Andrew Tridgwell
Samba的功能:
文件系统共享:
打印机共享:
NetBios协议:
Workgroup model:
Domain Model:
程序环境:
samba
samba-client
samba-common
samba-commom-tools
samba-*libs
主配置文件:/etc/samba/smb.conf
主程序:
smbd:实现SMB协议/CIFS文件系统 Service的程序;
nmbd:NetBIOS name server;名称解析服务器
UNIT文件:
smb.service
nmb.service
客户端程序:
smbclient:交互式命令行客户端工具,相似于ftp工具;
mount.cifs:挂载cifs文件系统的专用命令;
也可使用mount -t cifs
samba的主配置文件:/etc/samba/smb.conf
两类配置段:
Global Settings:全局配置;
[global]
Network-Related Options 网络配置
workgroup = MYGROUP 工做组
server string = Samba Server Version %v 描述信息
netbios name = MYSERVER 名称
interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24 哪个网络接口接受远程主机的samba请求
hosts allow = 127. 192.168.12. 192.168.13.
Logging Options
log file = /var/log/samba/log.%m 日志文件 %m:客户主机的IP地址
max log size = 50 日志多大
Standalone Server Options 独立进程守护
security = user samba的运行模式
samba服务的安全级别,取值有四个:
share:匿名共享,容许全部人以来宾用户身份匿名访问全部共享目录;
user:使用samba服务自我管理的帐户和密码进行用户认证;用户帐户必须首先是系统用户,但密码并不是为/etc/shadow中存放的密码,而是由samba自行管理的密码数据库文件中存放的密码;存放密码的文件的格式由passdb backend指令进行定义; 主流的
server:由第三方服务器进行统一用户身份认证;
domain:使用域控制器进行用户身份验证;基于kerberos协议进行;
passdb backend = tdbsam
即用户后台。有三种用户后台:smbpasswd,tdbsam,dapsam
Share Definitions:共享定义
有三类:
[homes]:为每一个samba用户定义其是否能够经过samba访问本身的家目录; 默认就好
[priters]:定义共享打印机; 默认就好
[share_fs]:定义共享目录或文件系统;
经常使用的共享指令:
comment:注释信息;
path:定义当前共享的目录的路径,建议使用绝对路径;
browseable:是否能够被浏览,其实指的是是否可以在访问的页面里直接被看到;
public:是否将共享的目录公开给全部用户访问,通常与"share"安全级别同时使用;
guest ok:是否容许来宾帐户访问;
注:public = yes 至关于 guest ok = yes
writable:对共享目录是否有"写"共享权限;针对于全部的合法用户;
read only:对共享目录是否有"只读"共享权限;针对于全部的合法用户;
注意:writable = yes 至关于 read only = no
write list = username @groupname +groupname:容许哪些用户或组对此共享目录有"写"共享权限;
valid users = username @groupname +groupname:定义哪些用户或组为此共享目录的有效访问用户;
注意:
writable = yes + valid users = username @groupname +groupname 至关于 write list = username @groupname +groupname
create mode = 0644:经过共享方式建立的文件的默认权限;
dir mode = 0755
directory mode = 0755
上述两个指令意思是:经过共享方式建立的目录的默认权限;
samba的配置文件中可用的宏列表:
%v:samba程序的版本号;
%m:客户端主机的NetBIOS名称;
%H:当前用户的家目录的路径;
%U:当前用户的用户名;
%g:当前用户的属组的组名;
%h:当前samba主机的HOSTNAME;
%I:客户端主机的IP地址;
%T:当前的系统日期和时间;
samba用户管理:
smbpasswd:当passdb backend为smbpasswd的时候,其添加的用户有效;
-a:添加samba用户;
-x:删除samba用户;
-d:禁用samba用户;
-e:启用被禁用的samba用户;
pdbedit:当passdb backend为tdbsam的时候,其添加的用户有效;
-L:列出全部被成功添加的samba用户;
-a,--create:添加samba用户;
-u username:指明要管理的用户;
-x,--delete:删除samba用户;
-t,--password-from-stdin:从标准输入接收字符串做为samba用户的密码;
建立一个共享目录:
# mkdir /myshare
# chmod 1777 /myshare
[myshare]
comment = my shared directory for LAN
hosts allow = 172.16.
path = /myshare
public = no
browsable = yes
write list = @smbusers centos
create mask = 0644
dir mask = 0755
使用testparm命令测试配置文件的语法是否正确;
启动或重载配置文件便可使新配置的共享生效;
# systemctl {start|reload} smb.service
共享目录的访问方式:
客户端工具交互是访问:
smbclient客户端工具:
-L SERVER_IP:查看指定服务器上的samba共享目录列表;
-U USERNAME:指定以特定用户的身份来访问或查看;
-N:在使用匿名用户或来宾用户的时候无需输入密码;
使用smbclient命令访问共享目录:
smbclient -U USERNAME //SERVER_IP/DIR_SHARED_NAME
挂载访问:
mount -t cifs -o username=USERNAME[,password=PASSWORD] //SERVER_IP/DIR_SHARED_NAME MOUNT_POINT
建立用于保存samba用户的文件,如:/root/smbuser.txt, 权限600;
此文件中的用户名和密码的书写格式:
username=USERNAME
password=PASSWORD
mount.cifs -o credentials=/root/smbuser.txt //SERVER_IP/DIR_SHARED_NAME MOUNT_POINT
查看服务器上的共享目录的访问状态:
smbstatus命令:
-b:显示简要格式的输出信息;
-v:显示详细格式的输出信息;