I/O:网络、存储
存储:
DAS:Direct Attached Storage
接口类型:“block”
设备:SATA,SAS;IDE,SCSI;USB;
NAS:Network Attached Storage
接口类型:"file"
协议:CIFS(samba), NFS(Network File System)
RPC: Remote Procedure Call
SAN:Storage Area Network
接口类型:"block"
协议:iSCSI(IP-SAN), FCSAN, FCoE, ...
应用层:
ftp, ...
文件服务:ftp, cifs/nfs
ftp:
ftp:file transfer protocol,文件传输协议 ;
两类连接:
命令连接:传输命令
数据连接:传输数据
两种模式:
主动模式:PORT
Server: 20/tcp连接客户端的命令连接使用的端口向后的第一个可用端口;
被动模式:PASV
Server:打开一个随机端口,并等待客户端连接
PAM:Pluggable Authenticate Module
认证框架:库,高度模块化;
协议:C/S
Server:
Windows: Serv-U, IIS, Filezilla
开源:wuftpd, proftpd, pureftpd, vsftpd(Very Secure FTP daemon), ...
Client:
Windows:ftp, Filezilla, CuteFTP, FlashFXP, ...
开源:lftp, ftp, Filezilla, gftp, ...
vsftpd:
vsftpd is a Very Secure FTP daemon. It was written completely from scratch.
URL:
SCHEME://username:password@HOST:PORT/PATH/TO/FILE
路径映射:
用户家目录:每个用户的URL的/映射到当前用户的家目录 ;
vsftpd以ftp用户的身份运行进程,默认认用户即为ftp用户,匿名用户的默认路径即ftp用户的家目录/var/ftp
ftp, anonymous
注意:一个用户通过文件共享服务访问文件系统上的文件的生效权限为此二者的交集;
程序环境:
主程序:/usr/sbin/vsftpd
主配置文件:/etc/vsftpd/vsftpd.conf
数据根目录:/var/ftp
Systemd Unit File: /usr/lib/systemd/system/vsftpd.service
配置vsftpd:
用户类别:
匿名用户:anonymous --> ftp, /var/ftp
系统用户: 至少禁止系统用户访问ftp服务,/etc/vsftpd/ftpusers,PAM(/etc/pam.d/vsftpd);
虚拟用户:非系统用户,用户账号非为可登录操作系统的用户账号(非/etc/passwd);
用户通过vsftpd服务访问到的默认路径,是用户自己的家目录;默认可以自己有权限访问的所有路径间切换;
禁锢用户于其家目录中;
配置文件:/etc/vsftpd/vsftpd.conf
directive value
注意:directive之前不能有多余字符;
匿名用户:
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_umask=077
系统用户:
local_enable=YES
write_enable=YES
local_umask=022
辅助配置文件/etc/vsftpd/ftpusers;
列在此文件中的用户 均禁止使用ftp服务;
chroot_local_user=YES
禁锢所有本地用户 于其家目录;需要事先去除用户对家目录的写权限;
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
禁锢列表中文件存在的用户于其家目录中;需要事先去除用户对家目录的写权限;
传输日志:
xferlog_enable=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
守护进程的类型:
standalone:独立守护进程;由服务进程自行监听套按字,并接收用户访问请求;
transient:瞬时守护进程;由受托管方代为监听套按字,服务进程没有访问请求时不启动;当托管方收到访问请求时,才启动服务进程;
CentOS 6:xinetd独立守护进程, /etc/xinetd.d/,
CentOS 7:由systemd代为监听;
控制可登录vsftpd服务的用户列表:
userlist_enable=YES
启用/etc/vsftpd/user_list文件来控制可登录用户;
userlist_deny=
YES:意味着此为黑名单;
NO:白名单;
上传下载速率:
anon_max_rate=0
local_max_rate=0
并发连接数限制:
max_clients=2000
max_per_ip=50
虚拟用户:
用户账号存储于何处?
文件、MySQL、Redis、...
vsftpd:认证功能托管给pam;
基于何种存储服务来存储用户信息,以及对存储服务的驱动要靠pam实现;
pam_mysql:
# yum install mariadb-devel pam-devel
# ./configure --with-pam=/usr --with-mysql=/usr --with-pam-mods-dir=/usr/lib64/security
# make && make install
创建数据库、授权用户、创建账号和密码;
提供配置文件:/etc/pam.d/vsftpd.vusers
auth required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=mageedu host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=mageedu host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
配置vsftpd,添加或修改以下选项:
pam_service_name=vsftpd.vusers
guest_enable=YES
guest_username=vuser
虚拟用户的写权限,通过匿名一样的指令进行定义;
还能实现不同的用户有不同的权限;
user_config_dir=/etc/vsftpd/vusers_config/
nfs:
nfs: Network File System
nis:Network Information Service;
ldap:lightweight directory access protocol; ldap over ssl/tls;
NFSv1
NFSv2, NFSv3, NFSv4;
nfsd: 2049/tcp
辅助类的服务:rpc, portmapper
rpc.mountd:认证;
rpc.lockd:加锁;
rpc.statd:状态;
rpc: remote procedure call
NFS Server:
nfs-utils:
The nfs-utils package provides a daemon for the kernel NFS server and related tools, which provides a much higher level of performance than the traditional Linux NFS server used by most users.
/etc/exports或/etc/exports.d/*
/PATH/TO/SOME_DIR clients1(export_options, ...) clients2(export_options, ...)
clients:
single host:ipv4, ipv6, FQDN;
network:address/netmask, 支持长短格式的掩码;
wildcards:主机名通配,例如:*.magedu.com;
netgroups:NIS域内的主机组;@group_name;
anonymous:使用*通配所有主机;
General Options:
ro:只读
rw:读写;
sync:同步;
async:异步;
secure:客户端端口小于1024,否则就要使用insecure选项;
User ID Mapping:
root_squash:压缩root用户,一般指将其映射为nfsnobody;
no_root_squash:不压缩root用户;
all_squash:压缩所有用户;
anonuid and anongid:将压缩的用户映射为此处指定的用户;
NFS Client:
mount -t nfs servername:/path/to/share /path/to/mount_point [-rvVwfnsh ] [-o options]
# exportfs -ar
# exportfs -au
showmount - show mount information for an NFS server
showmount -e NFS_SERVER_IP: 查看指定的nfs server上导出的所有文件系统;
showmount -a:在nfs server上查看nfs服务的所有客户端列表;
exportfs:
exportfs
-r:重新导出;
-a:所有文件系统;
-v:详细信息;
-u:取消导出文件系统;
其它参考文档:
man nfs:获取nfs文件系统专用的挂载选项;
samba:
smb: Service message block
cifs: common internet filesystem
samba:Andrew Tridgell;
功能:
文件系统共享;
打印机共享;
NetBIOS协议;
peer/peer(workgroup model)
domain model
程序环境:
服务端程序包:samba,samba-common, samba-libs
Server and Client software to interoperate with Windows machines.
主配置文件:/etc/samba/smb.conf, 由samba-common包提供;
主程序:
nmbd:NetBIOS name server
smbd:SMB/CIFS services
Unit File:
smb.service
nmb.service
监听的端口:
137/udp, 138/udp
139/tcp, 445/tcp
主配置文件的配置段:
~ ]# grep -E -i "#(====| ---)" /etc/samba/smb.conf
#======================= Global Settings =====================================
# ----------------------- Network-Related Options -------------------------
# --------------------------- Logging Options -----------------------------
# ----------------------- Standalone Server Options ------------------------
# ----------------------- Domain Members Options ------------------------
# ----------------------- Domain Controller Options ------------------------
# ----------------------- Browser Control Options ----------------------------
# --------------------------- Printing Options -----------------------------
# --------------------------- File System Options ---------------------------
#============================ Share Definitions ==============================
d:\data\tools:共享,共享名(software)
servicename:
//172.18.0.70/software
客户端程序:
smbclient:交互式命令行客户端,类似于lftp;
mount.cifs:挂载cifs文件系统的专用命令;
samba的配置:
smb.conf
两类配置段:
全局配置
[global]
Network-Related Options
workgroup =
server string =
interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24
hosts allow = 127. 192.168.12. 192.168.13.
Logging Options
log file = /var/log/samba/log.%m
max log size = 50
Standalone Server Options
security = user
设定安全级别:取值有四个;
share:匿名共享;
user:使用samba服务自我管理的账号和密码进行用户认证;用户必须是系统用户,但密码非为/etc/shadow中的密码,而由samba自行管理的文件,其密码文件的格式由passdb backend进行定义;
server:由第三方服务进行统一认证;
domain:使用DC进行认证;基于kerberos协议进行;
passdb backend = tdbsam
Printing Options
load printers = yes
cups options = raw
共享文件系统配置
[SHARED_NAME]
有三类:
[homes]:为每个samba用户定义其是否能够通过samba服务访问自己的家目录;
[printers]:定义打印服务;
[shared_fs]:定义共享的文件系统;
常用指令:
comment:注释信息;
path:当前共享所映射的文件系统路径;
browseable:是否可浏览,指是否可被用户查看;
guest ok:是否允许来宾账号访问;
public:是否公开所有用户;
writable:是否可写;
read only:是否为只读;
write list:拥有写权限的用户列表;
用户名
@组名
+组名
samba用户管理:
smbpasswd
smbpasswd [options] USERNAME
-a:添加
-x:删除
-d:禁用
-e:启用
pdbedit
-L:列出samba服务中的所有用户;
-a, --create:添加用户为samba用户;
-u, --user=USER:要管理的用户;
-x, --delete:删除用户;
-t, --password-from-stdin:从标准输出接收字符串作为用户密码;
使用空提示符,而后将密码输入两次;
查看服务器端的共享:
smbclient -L SMB_SERVER [-U USERNAME]
交互式文件访问:
smbclient //SMB_SERVER/SHARE_NAME [-U USERNAME]
挂载访问:
mount -t cifs //SMB_SERVER/SAHRE_NAME -o username=USERNAME,password=PASSWORD
注意:挂载操作的用户,与-o选项中指定用户直接产生映射关系;
此时,访问挂载点,是以-o选项中的username指定的用户身份进行;本地用户对指定的路径访问,首先得拥有对应的本地文件系统权限;
smbstatus命令:
显示samba服务的相关共享的访问状态信息;
-b:显示简要格式信息;
-v:显示详细格式信息;