文件服務:
安裝開啟服務前先關閉selinux,清空iptables策略。避免不必要的麻煩,服務開啟后,配置一切正常有需要再根據情況開啟。
ftp:應用層,C/S,跨主機的文件共享服務;file transfer protocol nfs,cifs:文件系統接口,網絡文件系統;
nfs:network file system sun公司研發 cifs:common internet file system ,windows上的文件共享協議 linux使用samba實現cifs協議,是跨平臺使用。 注意:nfs和cifs客戶端可以使用mount命令將其掛載到本地系統之上。跟操作本地磁盤效果是一樣的。
網絡存儲:
NAS:Network Attached Storage,文件服務器,nfs或cifs,文件級別; SAN:Storage Area Network,塊級別共享服務,分區-->格式化-->創建文件系統;IPSAN, FCSAN;遠程主機要使用就要先分區,格式化(創建文件系統),才能掛載。
vsftpd
ftp協議
file transfer protocol,21/tcp C/S: Client --> ftp-->Server Client:Connect Server:Listen 連接: 命令連接:命令傳輸,連接一直存在; 數據連接:數據傳輸,按需創建; 數據連接的建立模式: 主動模式:ftp服務器開啟21和20兩個端口,21命令端口,20為數據傳輸端口。連接建立時,會協商使用主動還是被動模式。如果時主動模式,則客戶端會將自己的一個隨機端口發送給服務端。 被動模式:協商為被動模式需要客戶端將自己選定的隨機端口發送給服務端,服務端使用一個隨機端口發送數據給客戶端端口。 注意:主動或被動傳輸模式,在實際網絡環境,還是有區別的,用戶端一般都是通過nat網絡訪問,服務器端也有防火墻。 數據傳輸模式: 文本格式:ASCII 二進制格式:BINARY 協議安全: 明文:數據、認證時傳輸賬號和密碼均是明文 ; 安全增強: ftp over ssl/tls:ftps ftp over ssh:sftp 使用虛擬用戶賬號;盡量不使用系統賬號。 vsftpd默認開通系統賬號。
應用實現
c/s: Server: Windows:Serv-U, IIS, ... 開源解決方案: wuftpd:Washington University ftp daemon vsftpd:Very Secure ftp daemon proftpd, pureftpd, ... 注意:vsftpd是紅帽默認提供的ftp服務軟件。 Client: GUI:flashfxp, cute, filezilla, gftp, ... CLI:ftp, lftp, ...
vsftpd
vsftpd: 程序環境: 主程序:/usr/sbin/vsftpd Unit File:/usr/lib/systemd/system/vsftpd.service 配置文件:/etc/vsftpd/vsftpd.conf /etc/vsftpd/ftpusers 這個文件默認是黑名單,名單中的系統用戶都不能登錄ftp
文檔路徑映射:
默認匿名用戶的路徑映射為ftp用戶的家目錄 系統用戶的家目錄為,系統用戶自己的家目錄 虛擬用戶的家目錄需要根據配置定義,映射到那個系統用戶上,就使用那個為家目錄 如果使用用戶禁錮 chroot功能,則用戶的根目錄就時其家目錄。
fedora, /home/fedora/pub/a.txt --> ftp://HOST:PORT/pub/a.txt 用戶的家目錄映射:訪問vsftpd服務必須以某個系統用戶的身份進行;此用戶的家目錄即為文檔映射的根目錄; 匿名用戶:anonymous,映射為一個系統用戶,此用戶ftp; [root@centos7 ~]# ls /var/ftp/ pub [root@centos7 ~]# getent passwd ftp ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin 匿名用戶:不能上傳文件,要上傳也可以,但是不給其家目錄授權寫權限,可以給其下子目錄授權寫權限。
注意:文件共享類的權限,有兩類權限,文件系統權限,服務權限。兩者的交集,才可以使用戶有權限。
setfacl -m u:ftp:rwx /var/ftp/upload/ 服務權限授權,修改vsftpd的主配置文件。 注意:vsftpd默認開啟系統上的用戶登錄,可以在系統上不受約束。 selinux開啟也有影響。 lftp yang@192.168.18.133:~> put /etc/fstab put: Access failed: 553 Could not create file. (fstab)####開啟selinux不能上傳文件。 lftp yang@192.168.18.133:~> put /etc/fstab ###服務器端關閉setenforce 0 1130 bytes transferred ####可以上傳文件
實驗:
安裝vsftpd 在客戶端系統上安裝lftp和ftp lftp -u username,password 1.1.1.1 使用用戶名和密碼登錄1.1.1.1的ftp服務器 使用ftp命令登錄 交互式提示用戶輸入用戶名和密碼
配置:vsftpd.conf
directive VALUE,... directive:指令之前不能存在任何字符,包括空白; 匿名用戶配置: anonymous_enable=YES ###是否開啟匿名用戶登錄 anon_upload_enable=YES ###是否允許匿名用戶上傳文件,但是該目錄需要先給ftp用戶授權寫權限,ftp服務僅僅是授權用戶上傳權限,沒有刪除權限,刪除權限需要單獨授權。 anon_mkdir_write_enable=YES ###是否允許匿名用戶創建目錄 anon_other_write_enable=YES ###是否開啟用戶的其他寫權限。是否允許用戶刪除文件。 本地用戶配置: local_enable=YES 是否開啟系統用戶 write_enable=YES 是否允許系統用戶向自己的家目錄寫入文件。 默認開啟了系統用戶登錄,用戶可以在家目錄和系統各目錄之間切換。 認證服務: pam_service_name=vsftpd /etc/pam.d/vsftpd pam: pluggable authencate module 切換目錄時的提示信息: dirmessage_enable=YES ##進入某個目錄后的提示信息 目錄下放置.messages文件 修改上傳文件的屬主: chown_uploads=YES chown_username=USERNAME
禁錮用戶于自己的家目錄:
會引入別的風險,因此,要求用戶對自己的家目錄不能有寫權限; 系統用戶控制: (1) 禁錮所有用戶 chroot_local_user=YES (2) 禁錮部分用戶 (a) 白名單:名單中的用戶不被禁錮; chroot_local_user=YES chroot_list_enable=YES ##起用名單列表 chroot_list_file=/etc/vsftpd/chroot_list ##名單列表位置 (b) 黑名單:名單中的用戶被禁錮 chroot_local_user=NO chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list # You may specify an explicit list of local users to chroot() to their home # directory. If chroot_local_user is YES, then this list becomes a list of # users to NOT chroot(). # (Warning! chroot'ing can be very dangerous. If using chroot, make sure that # the user does not have write access to the top level directory within the # chroot) #chroot_local_user=YES #chroot_list_enable=YES # (default follows) #chroot_list_file=/etc/vsftpd/chroot_list 不允許用戶對根目錄有寫權限(這里的根指的時用戶的家目錄),會帶來安全風險,所以需要將禁止用戶對家目錄的文件系統的寫權限。 但是還要用戶能夠上傳文件等操作,就要在家目錄下創建一個用戶有寫權限的目錄。 注意:如果開啟此選項,而用戶還對自己的家目錄有寫權限,ftp服務將拒絕用戶登錄。除非將用戶對家目錄的寫權限去掉。 一般使用系統用戶登錄ftp的用戶,這類用戶一般不讓其使用ssh等,登錄系統,僅作ftp認證使用。所以去掉用戶家目錄的寫權限,對用戶沒什么影響。 [root@centos6 ~]# lftp -u yang,123qwe 192.168.18.133 lftp yang@192.168.18.133:~> ls ls: Login failed: 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
默認開啟了系統用戶登錄,用戶可以在家目錄和系統各目錄之間切換。 默認匿名用戶被禁錮在/var/ftp目錄下,此為其根目錄。
用戶控制列表(黑白名單)-定義那些用戶能訪問,那些用戶不能訪問ftp
默認使用黑名單控制
/etc/vsftpd/ftpusers ###這各是PAM中定義的不能訪問ftp服務的用戶列表 /etc/vsftpd/user_list ###這個是ftp服務自己定義的列表,可實現黑白名單的作用。 user_list控制用戶訪問vsftpd:默認使用黑名單控制。 (1) 白名單 userlist_enable=YES userlist_deny=NO ###不拒絕,則名單為白名單 要作為白名單使用,就要把/etc/vsftpd/user_list這個文件中的用戶刪掉 填入要加入白名單的用戶 (2) 黑名單,默認 userlist_enable=YES userlist_deny=YES ###拒絕,則名單為黑名單 [root@centos7 ~]# cat /etc/vsftpd/user_list # vsftpd userlist # If userlist_deny=NO, only allow users in this file # If userlist_deny=YES (default), never allow users in this file, and # do not even prompt for a password. # Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers # for users that are denied.
具體配置文件配置參數。參看man vsftpd.conf
例如控制用戶上傳下載的速率 服務最大并發連接數 max_clients 2000 允許同時連接客戶端數 允許每個ip(客戶端)的最大連接數 …
vsftp認證機制:
使用系統自帶的pam模塊認證。
配置文件中定義了pam認證。 /etc/vsftpd/vsftpd.conf pam_service_name=vsftpd 這里使用的是相對路徑,/etc/pam.d的相對路徑。 /etc/pam.d/vsftpd [root@centos7 ~]# cat /etc/pam.d/vsftpd #%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
虛擬用戶賬號:
vsftpd登錄方式:三種 匿名用戶,系統賬號(可以登錄系統的用戶),虛擬賬號(與系統無關的自建的賬號和密碼) vsftpd依賴pam完成認證,pam存儲支持的認證方式,vsftpd都可調用; 賬號密碼存儲于何處? 文件、MySQL、ldap、redis、... pam_mysql模塊 CentOS 6:epel CentOS 7:編譯安裝 編譯: (1) 編譯環境; (2) 依賴關系:mariadb-devel, pam-devel 服務于兩個不同的服務,需要這個兩個服務的開發包支持。才能編譯安裝。 下載pam源碼解壓 # ./configure --with-pam=/usr --with-mysql=/usr --with-pam-mods-dir=/usr/lib64/security/ # make install
vsftpd使用mysql認證配置步驟
一、MySQL設置:
mysql> CREATE DATABASE vsftpd; mysql> GRANT ALL ON vsftpd.* TO 'vsftpd'@'127.0.0.1' IDENTIFIED BY 'mageedu'; MariaDB [(none)]> flush privileges mysql> CREATE TABLE vsftpd.users (uid SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE KEY,name VARCHAR(100) NOT NULL PRIMARY KEY,password CHAR(48) NOT NULL); mysql> use vsftpd mysql> INSERT INTO users (name,password) VALUES ('tom',PASSWORD('mageedu')),('jerry',PASSWORD('mageedu')),('lucy',PASSWORD('mageedu')); MariaDB [vsftpd]> DESC user -> ; ERROR 1146 (42S02): Table 'vsftpd.user' doesn't exist MariaDB [vsftpd]> DESC users; +----------+----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+----------------------+------+-----+---------+----------------+ | uid | smallint(5) unsigned | NO | UNI | NULL | auto_increment | | name | varchar(100) | NO | PRI | NULL | | | password | char(48) | NO | | NULL | | +----------+----------------------+------+-----+---------+----------------+ 3 rows in set (0.00 sec) MariaDB [vsftpd]> select * from users; -> ; +-----+-------+-------------------------------------------+ | uid | name | password | +-----+-------+-------------------------------------------+ | 2 | jerry | *9A94EE7D14C10908118B62D2DA88E6932E11E438 | | 3 | lucy | *9A94EE7D14C10908118B62D2DA88E6932E11E438 | | 1 | tom | *9A94EE7D14C10908118B62D2DA88E6932E11E438 | +-----+-------+-------------------------------------------+ 3 rows in set (0.00 sec)
二、啟用虛擬賬號,映射為vuser
準備要映射成為的系統賬號: # mkdir -pv /ftproot/{pub,upload} ###為虛擬賬號創建家目錄。登錄ftp后的家目錄。 # useradd -d /ftproot vuser ###但是家目錄要給為剛創建的目錄。隨便創建一個用戶 這樣創建的用戶對自己的家目錄沒有寫權限。 # setfacl -m u:vuser:rwx /ftproot/upload ###給upload目錄寫權限。 配置vsftpd啟用虛擬用戶,并使用指定的pam service:修改/etc/vsftpd/vsftpd.conf配置文件 pam_service_name=vsftpd.mysql guest_enable=YES ###啟用虛擬賬號 guest_username=vuser ###將虛擬賬號映射為vuser,剛創建的系統用戶。 man vsftpd.conf guest_enable If enabled, all non-anonymous logins are classed as "guest" logins. A guest login is remapped to the user specified in the guest_username setting. Default: NO ##默認不開啟使用虛擬用戶,開啟則將虛擬用戶映射為系統用戶,映射 為的系統用戶由guest_username的值決定。 guest_username See the boolean setting guest_enable for a description of what ▽ constitutes a guest login. This setting is the real username which guest users are mapped to. Default: ftp ##默認將虛擬用戶映射為ftp這個系統用戶
三、重新定義一個pam文件,不再使用系統賬號認證,而是使用mysql認證
準備基于mysql認證的pam配置文件:/etc/pam.d/vsftpd.mysql auth required pam_mysql.so host=127.0.0.1 user=vsftpd passwd=mageedu db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 account required pam_mysql.so host=127.0.0.1 user=vsftpd passwd=mageedu db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 注意:auth required 對登錄的用戶要做認證,使用mysql認證,使用剛才建好的mysql賬號登錄 ,訪問的數據庫vsftpd 表為users 用戶名使用的字段為name 密碼使用的字段為password 加密方式使用加密方式為2 (源碼文件中自帶README文件中介紹了pam支持的加密方式) account required做賬號審計的,賬號是否在有效期內等。 兩個條件必須同時滿足 0 (or "plain") = No encryption. Passwords stored in plaintext. HIGHLY DISCOURAGED. 1 (or "Y") = Use crypt(3) function. 2 (or "mysql") = Use MySQL PASSWORD() function. It is possible that the encryption function used by PAM-MySQL is different from that of the MySQL server, as PAM-MySQL uses the function defined in MySQL's C-client API instead of using PASSWORD() SQL function in the query. 3 (or "md5") = Use plain hex MD5. 4 (or "sha1") = Use plain hex SHA1.
四、配置每虛擬用戶擁有不同的權限:vsftpd.conf
user_config_dir=/etc/vsftpd/vusers_conf chroot_local_user=YES 修改配置文件,禁錮用戶 # mkdir /etc/vsftpd/vusers_conf # touch USERNAME 該配置文件功能強大,控制用戶行為等。很多參數與/etc/vsftpd/vsftpd.conf的參數相同, 但是不是所有的參數都有效,有些設置是優先于用戶配置的。 man vsftpd.conf user_config_dir This powerful option allows the override of any config option specified in the manual page, on a per-user basis. Usage is sim‐ ple, and is best illustrated with an example. If you set user_config_dir to be /etc/vsftpd/user_conf and then log on as the user "chris", then vsftpd will apply the settings in the file /etc/vsftpd/user_conf/chris for the duration of the session. The format of this file is as detailed in this manual page! PLEASE NOTE that not all settings are effective on a per-user basis. For example, many settings only prior to the user's session being started. Examples of settings which will not affect any behviour on a per-user basis include listen_address, banner_file, max_per_ip, max_clients, xferlog_file, etc. Default: (none) 為每個用戶創建一個權限配置文件 配置用戶權限--配置指令: anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES
練習:完成vsftpd的配置,要求;
(1) 基于mysql認證; (2) 設定tom用戶,密碼為mageedu,有上傳文件權限; (3) 上傳路徑為/upload/
總結: vsftpd 任何用戶登錄都要由家目錄。 匿名用戶的家目錄默認為/var/ftp 系統用戶的家目錄為自己系統上家目錄 啟用虛擬用戶,虛擬用戶的家目錄由配置文中配置的系統用戶決定。 虛擬用戶公用一個家目錄。 支持為每個虛擬用戶設立一個配置文件,配置用戶賬號行為等功能。
用戶訪問方式(認證方式) 默認是支持匿名用戶,和系統用戶登錄 需要使用其他認證方式需要單獨配置。要pam支持的方式,或有其支持pam模塊軟件。 允許將用戶鎖定在家目錄 匿名用戶鎖定在/var/ftp/目錄下 系統用戶沒做限制,可以任意切換目錄。 用戶禁錮,由黑白名單之分。可以控制那些用戶禁錮那些用戶不禁錮 用戶訪問授權(userlist)兩種控制方式 pam定義和ftp服務定義的授權方式 /etc/vsftpd/ftpusers ###這各是PAM中定義的不能訪問ftp服務的用戶列表 /etc/vsftpd/user_list ###這個是ftp服務自己定義的列表,可實現黑白名單的作用。
配置服務前先關閉selinux和iptalbes以免引起不必要的錯誤。如需開啟等服務調試完畢再開啟。開啟后進行測試,設置selinux或iptables
配置vsftpd服務過程中,配置文件錯誤可能導致服務不能啟動,注意配置文件修改 /etc/vsftpd/vsftpd.conf
配置服務不能啟動,注意查看 [root@centos7 ~]# systemctl status vsftpd.service 服務不能啟動會有簡要的提示。
配置mysql認證,用戶不能登錄問題 查看系統安全日志/var/log/security日志,有關于認證錯誤的日志。 查看是那個方面出了問題。是vsftpd本身的問題還是pam_mysql模塊除了問題。 還是pam提示連接不上數據庫。 連接不上數據庫,可使用為vsftpd建的mysql賬號本地登錄(服務端主機上)測試。是否為賬號問題。
原創文章,作者:yyw,如若轉載,請注明出處:http://www.www58058.com/56560