簡單來講就是文件域存儲塊設備能夠共享給他人使用。html
FTP是File Transfer Protocol文件傳輸協議的縮寫,基於網絡來傳輸文件的應用層協議。mysql
FTP可以經過網絡來傳輸文件,主要是由於工做再應用層因此不會受到平臺的限制。linux
客戶端經過TCP三次握手與服務端創建鏈接,鏈接創建成功以後才能夠進行文件傳輸。sql
因爲如今的網絡架構中都會有防火牆來阻止端口與高位端口被主動鏈接,特別20端口是被禁止主動鏈接的,由於20端口是FTP的數據端口,因此爲了解決客戶端或者服務端的防火牆問題,FTP就有了主動和被動兩種工做模式,經過防火牆內的一端來主動鏈接防火牆外端的一方,這樣子就不會被防火牆阻攔。shell
通常用於服務端存在防火牆的狀況,客戶端沒法主動鏈接到服務端的20數據端口,須要由服務端主動鏈接到客戶端的兩個端口。數據庫
通常用於客戶端存在防火牆的狀況,服務端在收到鏈接請求後由於客戶端存在防火牆而沒法達到客戶端高位端口,須要客戶端主動鏈接至服務端的數據傳輸端口。vim
匿名用戶centos
anonymous或ftp安全
本地用戶服務器
帳號名稱、密碼等信息保存在passwd、shadow文件中
虛擬用戶
使用獨立的帳號/密碼數據文件
user_list ftp_user1 123456 /var/pub
官方網站:http://vsftpd.beasts.org
# 1.關閉防火牆 systemctl stop firewalld.service systemctl disabled firewalled.service # 2.關閉SELINUX ## 2.1 永久關閉,須要重啓服務器 sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux reboot ## 2.2 臨時關閉 setenforce 0
yum install -y vsftpd
[root@ftp ~]# rpm -qa|grep vsftpd vsftpd-3.0.2-25.el7.x86_64 [root@ftp ~]# rpm -ql vsftpd /etc/logrotate.d/vsftpd /etc/pam.d/vsftpd # pam認證文件 /etc/vsftpd /etc/vsftpd/ftpusers # 限制登陸文件 /etc/vsftpd/user_list /etc/vsftpd/vsftpd.conf # 主配置文件 /etc/vsftpd/vsftpd_conf_migrate.sh /usr/lib/systemd/system-generators/vsftpd-generator /usr/lib/systemd/system/vsftpd.service /usr/lib/systemd/system/vsftpd.target /usr/lib/systemd/system/vsftpd@.service /usr/sbin/vsftpd # 程序文件 /usr/share/doc/vsftpd-3.0.2 /usr/share/doc/vsftpd-3.0.2/AUDIT /usr/share/doc/vsftpd-3.0.2/BENCHMARKS /usr/share/doc/vsftpd-3.0.2/BUGS /usr/share/doc/vsftpd-3.0.2/COPYING /usr/share/doc/vsftpd-3.0.2/Changelog /usr/share/doc/vsftpd-3.0.2/EXAMPLE /usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE /usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/README /usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/README.configuration /usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/vsftpd.conf /usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/vsftpd.xinetd /usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE_NOINETD /usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE_NOINETD/README /usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE_NOINETD/README.configuration /usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE_NOINETD/vsftpd.conf /usr/share/doc/vsftpd-3.0.2/EXAMPLE/PER_IP_CONFIG /usr/share/doc/vsftpd-3.0.2/EXAMPLE/PER_IP_CONFIG/README /usr/share/doc/vsftpd-3.0.2/EXAMPLE/PER_IP_CONFIG/README.configuration /usr/share/doc/vsftpd-3.0.2/EXAMPLE/PER_IP_CONFIG/hosts.allow /usr/share/doc/vsftpd-3.0.2/EXAMPLE/README /usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_HOSTS /usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_HOSTS/README /usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS /usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/README /usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/README.configuration /usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/logins.txt /usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/vsftpd.conf /usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS/vsftpd.pam /usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS_2 /usr/share/doc/vsftpd-3.0.2/EXAMPLE/VIRTUAL_USERS_2/README /usr/share/doc/vsftpd-3.0.2/FAQ /usr/share/doc/vsftpd-3.0.2/INSTALL /usr/share/doc/vsftpd-3.0.2/LICENSE /usr/share/doc/vsftpd-3.0.2/README /usr/share/doc/vsftpd-3.0.2/README.security /usr/share/doc/vsftpd-3.0.2/REWARD /usr/share/doc/vsftpd-3.0.2/SECURITY /usr/share/doc/vsftpd-3.0.2/SECURITY/DESIGN /usr/share/doc/vsftpd-3.0.2/SECURITY/IMPLEMENTATION /usr/share/doc/vsftpd-3.0.2/SECURITY/OVERVIEW /usr/share/doc/vsftpd-3.0.2/SECURITY/TRUST /usr/share/doc/vsftpd-3.0.2/SIZE /usr/share/doc/vsftpd-3.0.2/SPEED /usr/share/doc/vsftpd-3.0.2/TODO /usr/share/doc/vsftpd-3.0.2/TUNING /usr/share/doc/vsftpd-3.0.2/vsftpd.xinetd /usr/share/man/man5/vsftpd.conf.5.gz /usr/share/man/man8/vsftpd.8.gz /var/ftp # FTP家目錄 /var/ftp/pub [root@ftp ~]#
要配置基於匿名用戶的訪問控制,須要修改vsftpd的主配置文件/etc/vsftpd/vsftpd.conf
,主要有下面幾個參數:
不修改配置文件直接啓動後,直接經過FTP軟件鏈接便可,用戶名默認是ftp,沒有密碼。
systemctl start vsftpd.service
可是此時匿名用戶是不能上傳文件和建立目錄的:
開啓容許匿名用戶上傳文件和建立文件夾的權限:
cd /etc/vsftpd/ vim vsftpd.conf # 開啓下面三個權限 anonymous_enable=YES anon_upload_enable=YES anon_mkdir_write_enable=YES # 進入ftp家目錄,建立一個文件夾並受權 [root@ftp ~]# cd /var/ftp/ [root@ftp ftp]# mkdir -p ./testdir [root@ftp ftp]# setfacl -m u:ftp:rwx ./testdir/ [root@ftp ftp]# getfacl ./testdir/ # file: testdir/ # owner: root # group: root user::rwx user:ftp:rwx group::r-x mask::rwx other::r-x [root@ftp ftp]#
從新登陸ftp,在testdir目錄中能夠建立目錄和上傳文件,可是卻沒有刪除文件和重命名文件的權限。
vim /etc/vsftpd/vsftpd.conf # 增長下面的內容,重啓vsftpd服務 anon_other_write_enable=YES systemctl restart vsftpd.service
測試刪除文件和重命名:
默認狀況下,操做系統的帳戶是能夠直接使用用戶名和密碼登錄的。而且登錄以後,默認進入本身的家目錄。
基於本地用戶的訪問控制也經過修改vsftpd的配置文件來實現,主要有一下幾個參數:
vim /etc/vsftpd/vsftpd.conf # 默認如下三個參數都是開啓的 local_enable=YES write_enable=YES local_umask=022 # 添加一個系統用戶並設置密碼 useradd centos echo "123456"|passwd --stdin centos
系統用戶默認具備上傳文件、建立目錄、刪除和重命名的權限。
系統用戶默認也能夠進入其餘目錄,因此並不安全,因此若是要啓用系統用戶登錄FTP那麼就要修改配置文件,禁止系統用戶訪問除了家目錄之外的其餘目錄。
修改vsftpd.conf配置文件
vim /etc/vsftpd/vsftpd.conf # 開啓下面的參數 chroot_local_user=YES # 這個參數是全局的,開啓後全部的本地用戶都不能訪問除了家目錄之外的目錄
可是開啓這個參數以後,因爲vsftpd更新到2.3.5以後,vsftpd加強了安全檢查,若是用戶被限定在了其主目錄下,則該用戶的主目錄不能再具備寫權限了!若是檢查發現還有寫權限,就會報該錯誤。
要解決這個錯誤有兩種方式:
# 1.方式一:將對應家目錄的寫權限去除 chmod a-w /home/centos # 2.方式二:在配置文件在加入下面的參數 allow_writeable_chroot=YES
配置指定用戶只能訪問家目錄,其餘用戶能夠訪問其餘目錄,須要在配置文件中關閉全局設置的參數allow_writeable_chroot=YES
,開啓下面兩個參數:
chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list
而後須要建立指定的文件chroot_list
並在文件中指定對應的用戶:
vim /etc/vsftpd/chroot_list # 限制只能在家目錄 centos # 重啓vsftpd服務 systemctl restart vsftpd.service # 新建一個用戶並設置密碼 useradd redhat echo "123456"|passwd --stdin redhat
用centos用戶訪問,只能在本身的家目錄中:
用redhat用戶訪問,能夠訪問除了家目錄之外的其餘目錄:
在默認配置中,本地用戶能夠切換到本身家目錄之外的其餘目錄進行瀏覽,並在權限許可的範圍內進行下載和上傳。這樣的設置對於一個FTP服務器來講是不安全的。
若是但願本地用戶登陸以後不能訪問除了家目錄之外的目錄,則須要設置chroot選項,具體設置下面三個選項:
chroot_local_user chroot_list_enable chroot_list_file
只須要將chroot_local_user
選項設置爲YES
,全部的本地用戶都只能訪問本身的家目錄。
chroot_local_user=YES
須要註釋全局的設置或者設爲NO,而後開啓另外兩個選項:
chroot_local_user=NO chroot_list_enable=YES chroot_list_file=/etc/vaftpd/chroot_list
這樣,文件/etc/vaftpd/chroot_list
中的用戶就只能訪問本身的家目錄,其餘本地用戶能夠訪問除了家目錄的其餘目錄。
配置基於本地用戶的訪問限制,須要修改配置文件,主要有如下兩種方式:
限制指定的本地用戶不能訪問,而其餘本地用戶能夠訪問
userlist_enable=YES userlist_deny=YES userlist_file=/etc/vsftpd/user_list
使文件/etc/vsftpd/user_list中指定的本地用戶不能訪問FTP服務器,而其餘的本地用戶能夠訪問FTP服務器。
userlist_enable=YES userlist_deny=NO userlist_file=/etc/vsftpd/user_list
登錄提示信息圖形界面(FTP軟件)是看不到的,只適用於ftp做爲客戶端的時候。可使用下面的方式進行配置。可是優先級卻不同。
# 若是限制用戶只能訪問家目錄,下面這個配置優先生效 ftpd_banner="Welcome to Mage Ftp Server!" # 下面這個優先級較上一個配置低 banner_file=/etc/vsftpd/ftpbanner.txt # 其餘狀況當兩個配置都在的時候,默認banner_file的優先生效
當用戶進入某一目錄後,能夠給用戶一個提示消息。用來提示這個目錄的做用。在相應的目錄下新建一個隱藏文件.message
,該文件中進行提示信息描述。須要添加以下配置:
dirmessage_enable=YES message_file=.message # 在/var/ftp/pub下新建.message vim /var/ftp/pub/.message This is the public floder.
local_max_rate=50000 anon_max_rate=30000
上面的設置是將本地用戶的最大傳輸速率限制爲50kbytes/s,匿名用戶最大傳輸速率限制爲30kbytes/s。
pasv_min_port=50000 pasv_max_port=60000
上面的設置將客戶端鏈接時的端口範圍限制在50000-60000之間,提升系統安全性。
# 1.設置空閒用戶會話中斷時間(單位:秒) idle_session_timeout=6000 # 2.設置空閒的數據鏈接的終端時間(單位:秒) date_connection_timeout=120 # 3.設置客戶端空閒時的自動中斷和激活鏈接時間(單位:秒) accept_timeout=60 connect_timeout=60 # 上面的配置將是客戶端1分鐘後自動中斷,在中斷一分鐘後自動激活鏈接
編輯文本文件,該文件須要被編碼爲hash格式。奇數行爲用戶名、偶數行爲密碼。
db_load -T -t hash -f vusers.txt vusers.db
基於文件驗證的vsftpd虛擬用戶
# 1.建立用戶數據庫文件 vim /etc/vsftpd/vusers.txt zhangsan 123456 lisi 123456 # 2. 生成數據庫文件 cd /etc/vsftpd/ db_load -T -t hash -f vusers.txt vusers.db # 3.修改數據庫文件權限 chmod 600 ./vusers.db # 4.建立系統用戶和訪問FTP目錄 # 建立系統用戶並指定家目錄 useradd -d /var/ftproot -s /sbin/nologin vuser # 修改家目錄權限 chmod +rwx /var/ftproot # 5.建立pam配置文件 # 修改pam配置文件,讓vsftpd支持pam模塊進行身份驗證 vim /etc/pam.d/vsftpd.db auth required pam_userdb.so db=/etc/vsftpd/vusers account required pam_userdb.so db=/etc/vsftpd/vusers # 6.修改vsftpd主配置文件指定pam配置文件 vim /etc/vsftpd/vsftpd.conf guest_enable=YES guest_username=vuser pam_service_name=vsftpd.db # 7.修改虛擬用戶權限配置 vim /etc/vsftpd/vsftpd.conf user_config_dir=/etc/vsftpd/vusers.d/ # 建立配置目錄並給用戶設置權限(權限配置文件與用戶名同樣) mkdir -p /etc/vsftpd/vusers.d/ cd /etc/vsftpd/vusers.d/ # 給zhangsan設置權限 vim zhangsan # 虛擬用戶上傳權限 anon_upload_enable=YES # 虛擬用戶建立文件夾 anon_mkdir_write_enable=NO # 虛擬的其餘用戶對指定用戶目錄的寫權限 anon_other_write_enable=NO # 修改登陸目錄至其餘目錄 # local_root=/ftproot
重啓vsftpd服務,用zhangsan用戶登陸,只能上傳文件,不能建立文件夾和刪除文件:
# 給lisi配置權限 cd /etc/vsftpd/vusers.d/ vim lisi # 虛擬用戶上傳權限 anon_upload_enable=YES # 虛擬用戶建立文件夾 anon_mkdir_write_enable=YES # 虛擬的其餘用戶對指定用戶目錄的寫權限 anon_other_write_enable=YES # 修改登陸目錄至其餘目錄 #local_root=/ftproot
重啓vsftpd服務,用lisi帳號登錄,能夠上傳、新建、刪除:
實時查詢數據庫完成用戶認證。
MySQL
https://www.cnblogs.com/zhenhui/p/5916116.html
pam須要依賴於pam_mysql
yum install -y mariadb-server pam-devel mariadb-devel vsftpd ftp # 下載pam_mysql源碼包 wget http://www.huzs.net/soft/vsftpd/pam_mysql-0.7RC1.tar.gz # 編譯安裝pam_mysql tar xf pam_mysql-0.7RC1.tar.gz && cd pam_mysql-0.7RC1 ./configure --with-openssl --with-pam-mods-dir=/lib/security/ make && make install
# 啓動數據庫 systemctl enable mariadb.service systemctl start mariadb.service # 初始化數據庫 /usr/bin/mysql_secure_installation
CREATE DATABASE vsftpd; use vsftpd; CREATE TABLE users ( id int AUTO_INCREMENT NOT NULL, name char(20) binary NOT NULL, password char(48) binary NOT NULL, primary key(id) );
INSERT INTO users(name,password) values('jack',PASSWORD('123456')),('tom',PASSWORD('123456'));
GRANT ALL ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY 'vsftpdpass'; GRANT ALL ON vsftpd.* TO 'vsftpd'@'127.0.0.1' IDENTIFIED BY 'vsftpdpass'; FLUSH PRIVILEGES;
# 1.創建pam認證所需文件 vim /etc/pam.d/vsftpd.mysql # 2.添加下面兩行 auth required /lib/security/pam_mysql.so user=vsftpd passwd=vsftpdpass host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 account required /lib/security/pam_mysql.so user=vsftpd passwd=vsftpdpass host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
useradd -s /sbin/nologin -d /var/ftproot vuser setfacl -m u:vuser:rwx /var/ftproot
vim /etc/vsftpd/vsftpd.conf pam_service_name=vsftpd.mysql guest_enable=YES guest_username=vuser
# 1.配置虛擬用戶有單獨的權限設定 vim /etc/vsftpd/vsftpd.conf user_config_dir=/etc/vsftpd/vusers_conf # 2.建立所需目錄,併爲虛擬用戶提供配置文件 mkdir /etc/vsftpd/vusers_conf cd /etc/vsftpd/vusers_conf # 配置虛擬用戶具備不一樣的訪問權限 vim jack # 寫入如下內容 anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES vim tom # 寫入如下內容 anon_upload_enable=YES anon_mkdir_write_enable=NO anon_other_write_enable=NO
systemctl restart vsftpd.service
登錄jack帳戶,有上傳、新建、刪除、重命名的權限:
登錄tom帳戶,只有上傳的權限: