部署思路
- 單純上傳下載ftp
- 系統集成間的共享 samba
- 網絡存儲服務器 NFS
網絡文件服務器:通過網絡共享文件或文件夾,實現數據共享
NAS ( network append storage):共享的是文件夾
- FTP:文件服務器
- samba:不同系統間的文件夾或設備共享
- NFS:網絡文件系統
FTP介紹
- FTP (File transfer protocol)是TCP/IP 協議組中的協議之一 ,是一個TCP協議。
- 功能:在服務器與客戶端之間進行文件的傳輸。FTP就是實現兩臺計算機之間的拷貝。從遠程計算機拷貝文件至自己的計算機上,稱之為“下載 (download)”文件將文件從自己計算機中拷貝至遠程計算機上,則稱之為“上傳(upload)”文件
- 這個古老的協議使用的是明碼傳輸方式,且過去有相當多的安全危機歷史
- 為了更安全的使用 FTP 協議 ,我們主要介紹較為安全但功能較少的 vsftpd(very secure File transfer protocol )這個軟件。
- FTP是一個C/S類型的軟件,FTP監聽TCP端口號為21,數據端口為20
應用場景?
- 文件服務器
- 下載服務器
- 上傳服務器
FTP應用模式
- FTP支持兩種模式,一種方式叫做Standard(也就是 PORT方式,主動方式),一種是 Passive (也就是PASV ,被動方式)。 Standard模式 FTP的客戶端發送 PORT 命令到FTP服務器。 Passive模式FTP的客戶端發送 PASV命令到 FTP Server。
- 主動模式:Port模式FTP客戶端首先和FTP服務器的TCP21端口建立連接,通過這個通道發送命令,客戶端需要接收數據的時候在這個通道上發送PORT命令。PORT命令包含了客戶端用什么端口接收數據。在傳送數據的時候,服務器端通過自己的TCP20端口連接至客戶端的指定端口發送數據。FTP server必須和客戶端建立一個新的連接用來傳送數據,vsftp默認模式。
- 被動模式:Passive模式在建立控制通道的時候和Standard模式類似,但建立連接后發送的不是Port命令而是PaSv命令。FTP服務器收到PaSv命令后,隨機打開一個高端端口(端口號大于1024)并且通知客戶端在這個端口上傳送數據的請求,客戶端連接FTP服務器此端口,然后FTP服務器將通過這個端口進行數據的傳送,這個時候FTP server不再需要建立一個新的和客戶端之間的連接。
FTP訪問方式?
- FTP服務器在默認的情況下,依據使用者登錄的情況而分為三種不同的身份,分別是
- 實體賬號:本地賬戶
- 來賓賬戶: guest
- 匿名登錄者 :anonymous ftp
?
FTP服務器部署
// a、 vsftp安裝
yum -y install vsftpd// b、 vsftp開機啟動
systemctl enable vsftpd
// Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to/usr/lib/systemd/system/vsftpd.service.// c、啟動vsftp服務
systemctl start vsftpd//d、 驗證啟動
Isof -i :21
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
vsftpd 1951 root 4u IPv6 32837 0t0 TCP *:ftp (LISTEN)
相關配置文件?
- 主配文件:/etc/vsftpd/vsftpd.conf
- 下載目錄:/var/ftp/
- FTP日志:/var/log/xferlog
FTP客戶端
FTP相關命令
虛擬用戶登陸
案例
為了解決公司員工文件存儲和下載的需求。要求部署內部FTP服務器,員工可以通過自己的賬
號的權限對FTP進行操作。
- 公司公共文件可以通過圈名下載
- 公司財務部、商務部、行政部、技術部分別擁有自己的部門文件夾,彼此之間相互隔離
- 部門之間只有主管才能擁有上傳權限,普通員工只能下載
- 禁止用戶查看家目錄以外的數據
- 確保ftp賬號安全
?案例拆解
- FTP需要開啟匿名下載 默認FTP支持匿名下載
- 分析針對不同部分實現目錄隔離 有兩種方法1.同部門共用本地賬號2.虛擬賬號
- 部門內部員工權限不同 實現方法 虛擬賬號
- 禁止用戶切出 chroot
- 防止本地賬號泄露 虛擬賬號
?部署步驟
- 創建虛擬用戶映射的本地賬號
創建虛擬用戶映射的本地賬號
useradd -s /sbin/nologin -d /var/tmp/vuser_ftp yudan
新版vsftpd不允許用戶主目錄有w權限,因此在主目錄下新建一個子目錄,賦予700權限。所有上傳、下載、刪除、重命名等操作只能在子目錄中進行
chmod 500 /var/tmp/vuser_ftp設置不同部門之間的根文件夾,給予700權限
mkdir /var/tmp/vuser _ftp/shichang
mkdir /var/tmp/vuser _ftp/caiwu
mkdir /var/tmp/vuser _ftp/xingzheng
mkdir /var/tmp/vuser _ftp/jishu
chmod 700 /var/tmp/vuser_ftp/*修改部門共享文件夾的所有者和屬組為yudan
chown yudan.yudan /var/tmp/vuser_ftp -R
- 配置文件開啟虛擬用戶驗證
anonymous_enable=YES
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect _from_port_20=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
idle_session_timeout=600
data_connection_timeout=120
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
Is_recurse_enable=YES
listen=YES
listen_ipv6=NO
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES
guest_usemame=ayitula
virtual_use_local_privs=NO
user_config_dir=/etc/vsftpd/vconf.d/
- 建立虛擬用戶驗證數據庫
建立虛擬用戶賬號密碼文件
cat /etc/vsftpd/vuser
sc_01
123
xZ_01
123
js_01
123
cw_01
123
SC_02
222
xz_02
222
js_02
222
cw_02
222生成賬號密碼數據庫文件
db _load -T -t hash -f /etc/vsftpd/vuser /etc/vsftpd/vuser.db
chmod 600 /etc/vsftpd/vuser.db
- 開啟pam認證
cat /etc/pam.d/vsftpd
#注意要添加到開頭
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser
#% PAM-1.0
session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth required pam_shells.so
auth include password-auth
account include password-auth
session required pam_loginuid.so
session include password-auth
- 設置不同部門員工的權限
建立部門員工子配置文件,用于定義權限
mkdir /etc/vsftpd/vconf.d/定義虛擬用戶權限
部門主管有管理權限
主管模板文件
cat /etc/vsftpd/vconf.d/01_temp
#指定家目錄
local_root=/var/tmp/vuser_ftp/xxx
#允許新建文件或目錄權限
anon_umask=077
#開放下載權限
anon_world_readable_only=NO
#開放上傳權限
anon_upload_enable=YES
#開放創建目錄的權限
anon_mkdir_write_enable=YES
#開放刪除和重命名目錄的權限
anon other write enable=YES部門員工只有下載權限
部門員工模板文件
cat /etc/vsftpd/vconf.d/02_temp
local_root=/var/tmp/vuser_ftp/xxx
anon_ world_readable_only=NO