文件服务器:
基于应用层:FTP
基于文件系统的文件服务器:
内核级的网络文件系统:NFS
POSIX API
跨OS的网络文件系统:CIFS
网络存储:
NAS:Network Attached Storage,网络附加存储;
文件系统级别的存储接口;
SAN:Storage Area Network,存储区域网络;
块[设备]级别的存储接口;
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:显示详细格式的输出信息;