FTP服务相关实现
FTP服務的相關實現
vsftpd介紹
1》vsftpd全名為very secure FTP daemon,為非常安全的FTP服務,是針對操作系統的權限來設計的,這個權限是發起者發起該服務進程的權限,通常vsftpd服務的啟動權限非常低。2》vsftpd可以使用chroot函數來將特定的目錄變成vsftpd活動的根目錄。3》vsftpd服務器是由vsftpd程序包提供,不再由xinetd管理。vsftpd服務包和配置文件
1》rpm -ql vsftpd/etc/logrotate.d/vsftpd/etc/pam.d/vsftpd/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/man/man5/vsftpd.conf.5.gz/usr/share/man/man8/vsftpd.8.gz/var/ftp/var/ftp/pub2》用戶認證配置文件:/etc/pam.d/vsftpd3》服務腳本: /usr/lib/systemd/system/vsftpd.service/etc/rc.d/init.d/vsftpd4》配置文件:/etc/vsftpd/vsftpd.confman 5 vsftpd.conf格式:option=value注意:= 前后不要有空格5》匿名用戶(映射為系統用戶ftp)共享文件位置:/var/ftp6》系統用戶共享文件位置:用戶自己的家目錄,家目錄不允許有寫權限7》虛擬用戶通過ftp訪問共享文件位置:給虛擬用戶指定的映射成為系統用戶的家目錄vsftpd服務的配置
/etc/vsftpd/vsftpd.conf1》命令端口listen=YES ##表示vsftpd以standalone(單機模式)啟動listen_port=212》主動模式端口connect_from_port_20=YES 主動模式端口為20ftp_data_port=20 指定主動模式的端口3》被動模式端口范圍linux 客戶端默認使用被動模式windows 客戶端默認使用主動模式pasv_min_port=6000 若設置0為隨機分配pasv_max_port=6010 4》使用當地時間use_localtime=YES 使用當地時間(默認為NO,使用GMT) 5》匿名用戶anonymous_enable=YES 支持匿名用戶no_anon_password=YES ( 默認NO)匿名用戶略過口令 檢查anon_world_readable_only ( 默認YES) 只能下載全部讀的文件anon_upload_enable=YES 匿名上傳,注意: 文件系統權限anon_mkdir_write_enable=YES 匿名用戶是否可以創建目錄anon_other_write_enable=YES 可刪除和修改上傳的文件anon_umask=077 指定匿名上傳umaskchown_uploads=YES (默認NO)上傳是否開啟chown_username=wang 指定上傳文件的默認的所有者chown_upload_mode=0644 指定上傳文件的默認的權限6》Linux 系統用戶guest_enable=YES 所有系統用戶都映射成guest 用戶guest_username=ftp 配合上面選項才生效,指定guest 用戶local_enable=YES 是否允許linux 用戶登錄write_enable-YES 允許linux 用戶上傳文件local_umask=022 指定系統用戶上傳文件的默認權限local_root=/ftproot 非匿名用戶登錄所在目錄7》禁錮所有系統用戶在家目錄中chroot_local_user=YES (默認NO,不禁錮)禁錮系統用戶8》禁錮或不禁錮特定的系統用戶在家目錄中,與上面設置功能相反chroot_list_enable=YESchroot_list_file=/etc/vsftpd/chroot_list當chroot_local_user=YES 時,則chroot_list中用戶不禁錮當chroot_local_user=NO 時,則chroot_list中用戶禁錮9》wu-ftp 日志:默認啟用xferlog_enable=YES (默認)啟用記錄上傳下載日志xferlog_std_format=YES (默認)使用wu-ftp日志格式xferlog_file=/var/log/xferlog (默認)可自動生成dual_log_enable=YES,vsftpd_log_file=/var/log/vsftpd.log 使用vsftpd自己的日志文件10》vsftpd 日志:默認不啟用dual_log_enable=YES 使用vsftpd 日志格式,默認不啟用vsftpd_log_file=/var/log/vsftpd.log ( 默認 )可自動生成11》登錄提示信息ftpd_banner=“welcome to mage ftp server"banner_file=/etc/vsftpd/ftpbanner.txt 優先上面項生效12》目錄訪問提示信息dirmessage_enable=YES (默認)message_file=.message (默認) 信息存放在指定目錄下.message13》使用pam(Pluggable Authentication Modules)完成用戶認證pam_service_name=vsftpdpam 配置文件:/etc/pam.d/vsftpd/etc/vsftpd/ftpusers 默認文件中用戶拒絕登錄14》是否啟用控制用戶登錄的列表文件userlist_enable=YES 默認有此設置userlist_deny=YES (默認值)黑名單,不提示口令,NO為白名單userlist_file=/etc/vsftpd/users_list 此為默認值15》連接限制max_clients=0 最大并發連接數max_per_ip=0 每個IP同時發起的最大連接數16》vsftpd 服務指定用戶身份運行nopriv_user=nobody17》傳輸速率:字節/秒 anon_max_rate=0 匿名用戶的最大傳輸速率local_max_rate=0 本 地用戶的最大傳輸速率18》連接時間:秒為單位connect_timeout=60 主動模式數據連接超時時長accept_timeout=60 被動模式數據連接超時時長data_connection_timeout=300 數據連接無數據輸超時時長idle_session_timeout=60 無命令操作超時時長19》優先以文本方式傳輸ascii_upload_enable=YESascii_download_enable=YES20》配置FTP 服務以非獨立服務方運行:listen=NO ,默認為獨立方式vim /etc/xinetd.d/vsftpdservice ftp{flags = REUSEsocket_type = streamwait = nouser = rootserver = /usr/sbin/vsftpdlog_on_failure += USERIDdisable = no}實現基于ssl的FTPS
1》查看是否支持SSLldd `which vsftpd` 查看到libssl.so2》創建自簽名證書cd /etc/pki/tls/certs/make vsftpd.pemopenssl x509 -in vsftpd.pem -noout –text3》配置vsftpd 服務支持SSL :vim /etc/vsftpd/vsftpd.confssl_enable=YES 啟用SSLallow_anon_ssl=NO 匿名不支持SSLforce_local_logins_ssl=YES 本地用戶登錄加密force_local_data_ssl=YES 本地用戶數據傳輸加密force_anon_logins_ssl=YES force_anon_data_ssl=YES 匿名用戶的可用在虛擬用戶上rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem 還可以根據自己的需求來修改或添加對應的參數信息,需注意的是,在修改配置文件后是需要重啟vsftpd服務才能生效的。4》用filezilla等工具測試ftpes:基于虛擬用戶的vsftpd
1》虛擬用戶就是系統當中不存在的實體用戶,它只能訪問服務器為其提供的ftp服務,但不能訪問其他的額外資源信息。2》我們可以通過使用虛擬用戶來提高系統的安全性。例如,可以讓一些用戶對ftp服務中的內容具有寫權限,但又不允許訪問系統其他資源。3》各虛擬用戶可被賦予不同的訪問權限,通過匿名用戶的權限控制參數進行指定。4》所有虛擬用戶會統一映射為一個指定的系統賬號,來訪問共享位置。5》虛擬用戶帳號的存儲方式:文件:編輯文本文件,此文件需要被編碼為hash格式,奇數行為用戶名,偶數行為密碼db_load -T -t hash -f vusers.txt vusers.db關系型數據庫中的表中:實時查詢數據庫完成用戶認證mysql庫:pam 要依賴于pam-mysql/lib64/security/pam_mysql.so/usr/share/doc/pam_mysql-0.7/README6》虛擬用戶的認證方式是單獨的口令庫文件(pam_userdb),有可插入式認證模塊來完成認證,使用這種方式配置更加靈活也更加的安全。7》實現基于文件驗證的vsftpd虛擬用戶1)創建虛擬用戶的賬號密碼的數據庫文件a。我們通過創建一個文本文件來記錄虛擬用戶的賬號密碼信息,格式為:奇數行為賬號,對應的偶數行為對應的密碼。vim /etc/vsftpd/vusers.txtshen1123456shen2213546shen3546213b。將該文本文件轉換成二進制的數據庫文件,這里需要借助db4工具來實現。yum install db4-utils -ycd /etc/vsftpd/db_load -T -t hash -f vusers.txt vusers.dbchmod 600 vusers.db(保證密碼文件的安全)2)創建FTP根目錄和虛擬用戶映射的系統用戶mkdir /var/ftproot(為ftp的根目錄)useradd -d /var/ftproot -s /sbin/nologin vuser(將虛擬用戶映射為vuser)chmod +rx /var/ftproot/centos7 還需要執行以下操作:chmod -w /var/ftproot/mkdir /var/ftproot/uploadsetfacl -m u:vuser:rwx /var/ftproot/upload3)創建支持虛擬用戶的PAM認證配置文件vim /etc/pam.d/vsftpd.db#%PAM-1.0# 32-bit#auth required /lib/security/pam_userdb.so db=/etc/vsftpd/login#account required /lib/security/pam_userdb.so db=/etc/vsftpd/login# 64-bitauth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/loginaccount sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/login創建配置文件存放的路徑vim /etc/vsftpd/vsftpd.confvirtual_use_local_privs=YES 開啟虛擬用戶user_config_dir=/etc/vsftpd/vusers.d/ 虛擬用戶的配置文件的目錄cd /etc/vsftpd/vusers.d/ 進入此目錄允許wang用戶可讀寫,其它用戶只讀vim wang 創建各用戶自已的配置文件anon_upload_enable=YESanon_mkdir_write_enable=YESanon_other_write_enable=YES......7)重啟vsftpd服務器systemctl vsftpd restart8)使用虛擬用戶進行測試驗證實現基于MYSQL 驗證的vsftpd
說明:本實驗在兩臺CentOS 主機上實現,一臺做為FTP 服務器,一臺做數據庫服務器一、安裝所需要包和包組:在數據庫服務器上安裝包:Centos7 :在數據庫服務器 上 安裝yum –y install mariadb-server mariadbsystemctl start mariadb.servicesystemctl enable mariadbCentos6 :在數據庫服務器上安裝yum –y install mysql-server在FTP 服務器上安裝vsftpd 和pam_mysql包centos6:pam_mysql由epel6 的源中提供yum install vsftpd pam_mysqlcentos7:無對應rpm 包,需手動 編譯 安裝yum -y groupinstall "Development Tools"yum -y install mariadb-devel pam-devel vsftpd下載pam_mysql-0.7RC1.tar.gzftp://172.16.0.1/pub/Sources/sources/pam/tar xvf pam_mysql-0.7RC1.tar.gzcd pam_mysql-0.7RC1/./configure --with-mysql=/usr --with-pam=/usr --with-pam-mods-dir=/lib64/securitymakemake install二、在數據庫服務器上創建虛擬用戶賬號1. 建立存儲虛擬用戶數據庫和連接的數據庫用戶mysql> CREATE DATABASE vsftpd;mysql> SHOW DATABASES;ftp 服務和mysql 不在同一主機:mysql> GRANT SELECT ON vsftpd.* TOvsftpd@'172.16.%.%' IDENTIFIED BY 'magedu';ftp 服務和mysql 在同一主機:mysql> GRANT SELECT ON vsftpd.* TO vsftpd@localhost IDENTIFIED BY 'magedu';mysql> GRANT SELECT ON vsftpd.* TO vsftpd@'127.0.0.1' IDENTIFIED BY 'magedu';mysql> FLUSH PRIVILEGES;2. 準備相關表mysql> USE vsftpd;Mysql> SHOW TABLES;mysql> CREATE TABLE users (id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,name CHAR(50) BINARY NOT NULL,password CHAR(48) BINARY NOT NULL);mysql>DESC users;測試連接mysql -uvsftpd -h 172.16.200.200 -pmagedumysql> SHOW DATABASES;3. 添加虛擬用戶根據需要添加所需要的用戶,為了安全應該使用PASSWORD函數加密其密碼后存儲mysql>DESC users;mysql> INSERT INTO users(name,password) values(‘wang',password('magedu'));mysql> INSERT INTO users(name,password) values(‘mage',password('magedu'));mysql> SELECT * FROM users;三、在FTP 服務器上配置vsftpd 服務1. 在FTP 服務器上建立pam 認證所需文件vi /etc/pam.d/vsftpd.mysql 添加如下兩行auth required pam_mysql.so user=vsftpdpasswd=magedu host=mysqlserver db=vsftpd table=usersusercolumn=name passwdcolumn=password crypt=2account required pam_mysql.so user=vsftpdpasswd=magedu host=mysqlserver db=vsftpd table=usersusercolumn=name passwdcolumn=password crypt=2注意:參考README 文檔,選擇正確的加密方式,crypt 是加密方式,0 表示不加密,1 表示crypt(3) 加密,2 表示使用mysql password() 函數加密,3 表示md5 加密,4 表示sha1配置字段說明auth 表示認證account 驗證賬號密碼正常使用required 表示認證要通過pam_mysql.so 模塊是默認的相對路徑,是相對/lib64/security/路徑而言,也可以寫絕對路徑;后面為給此模塊傳遞的參數user=vsftpd 為登錄mysql 的用戶passwd=magedu 登錄mysql 的的密碼host=mysqlserver mysql 服務器的主機名或ip 地址db=vsftpd 指定連接msyql 的數據庫名稱table=users 指定連接數據庫中的表名usercolumn=name 當做用戶名的字段passwdcolumn=password 當做用戶名字段的密碼crypt=2 密碼的加密方式為mysql password() 函數加密2. 建立相應用戶和修改vsftpd 配置文件,使其適應mysql認證,建立虛擬用戶映射的系統用戶及對應的目錄useradd -s /sbin/nologin -d /var/ftproot vuserchmod 555 /var/ftproot centos7 需除去ftp 根目錄的寫權限mkdir /var/ftproot/{upload,pub}setfacl –m u:vuser:rwx /var/ftproot/upload確保/etc/vsftpd.conf 中已經啟用了以下選項anonymous_enable=YES添加下面兩項guest_enable=YESguest_username=vuser修改下面一項,原系統用戶無法登錄pam_service_name=vsftpd.mysql四、啟動vsftpd 服務service vsftpd start;systemctl start vsftpdchkconfig vsftpd on;systemctl enable vsftpd查看端口開啟情況netstat -tnlp |grep :21五、Selinux 相關設置:在FTP 服務器上執行restorecon -R /lib64/securitysetsebool -P ftpd_connect_db 1setsebool -P ftp_home_dir 1chcon -R -t public_content_rw_t /var/ftproot/六 、測試:利用FTP 客戶端工具,以 以 虛擬用戶登錄驗證結果tail /var/log/secure七、在FTP 服務器上配置虛擬用戶具有不同的訪問權限vsftpd 可以在配置文件目錄中為每個用戶提供單獨的配置文件以定義其ftp 服務訪問權限,每個虛擬用戶的配置文件名同虛擬用戶的用戶名。配置文件目錄可以是任意未使用目錄,只需要在vsftpd.conf 指定其路徑及名稱即可1 、配置vsftpd 為虛擬用戶使用配置文件目錄vim /etc/vsftpd/vsftpd.conf添加如下選項user_config_dir=/etc/vsftpd/vusers_config2 、創建所需要目錄,并為虛擬用戶提供配置文件mkdir /etc/vsftpd/vusers_config/cd /etc/vsftpd/vusers_config/touch wang mage3 、配置虛擬用戶的訪問權限虛擬用戶對vsftpd 服務的訪問權限是通過匿名用戶的相關指令進行的。如果需要讓用戶wang 具有上傳文件的權限,可以修改/etc/vsftpd/vusers_config/wang 文件,在里面添加如下選項并設置為YES 即可, 只讀則設為NO注意:需確保 對應的映射用戶對于文件系統有寫 權限anon_upload_enable={YES|NO}anon_mkdir_write_enable={YES|NO}anon_other_write_enable={YES|NO}轉載于:https://www.cnblogs.com/shenxm/p/8577134.html
總結
- 上一篇: 战火勋章集团军战术熟练度怎么刷
- 下一篇: 谁有华夏英语周刊的英语测试报(2022-