文件服務器: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:顯示詳細格式的輸出信息;