溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何把FTP用戶帳號存放進MariaDB數(shù)據(jù)庫中

發(fā)布時間:2020-07-28 19:27:03 來源:網(wǎng)絡(luò) 閱讀:961 作者:183530300 欄目:數(shù)據(jù)庫

FTP服務(wù)歷史是比較悠久的,但由于其出現(xiàn)的比較早,所以設(shè)計之初也沒考慮到安全問題,發(fā)展至今,F(xiàn)TP服務(wù)仍然采用明文傳輸協(xié)議,但由于其搭建及使用比較便捷,使其保留至今。今天就給大家分享一下如何搭建服務(wù)器,并讓之滿足實際生產(chǎn)環(huán)境中的相應(yīng)需求。為了演示方便,我們這里把防火墻和SELinux提前關(guān)閉掉,如果忘記關(guān)閉后續(xù)過程會出現(xiàn)一些另人費解的報錯信息。


第一步:YUM安裝ftp服務(wù)器端vs-ftpd

yum install -y vsftpd


第二步:配置vs-ftpd

vim /etc/vsftpd/vsftpd.conf


xferlog_enable=YES

xferlog_file=/var/log/xferlog

pam_service_name=vsftpd.mysql

guest_enable=YES

guest_username=vsftpd


第三步:編譯安裝pam-mysql(編譯環(huán)境肯定是要有的)

[root@centos730g ~]#yum install -y mariadb-devel pam-devel openssl-deve

[root@centos730g ~]# ls

anaconda-ks.cfg  pam_mysql-0.7RC1.tar.gz

[root@centos730g ~]# tar xf pam_mysql-0.7RC1.tar.gz 

[root@centos730g ~]# cd pam_mysql-0.7RC1/

[root@centos730g pam_mysql-0.7RC1]# ./configure --with-pam=/usr --with-mysql=/usr --with-pam-mods-dir=/usr/lib64/security

[root@centos730g pam_mysql-0.7RC1]# make

/bin/sh ./libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/security -I/usr/include  -g -O2  -g -O2 -I/usr/include/mysql    -c pam_mysql.c

mkdir .libs

gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/security -I/usr/include -g -O2 -g -O2 -I/usr/include/mysql -c pam_mysql.c  -fPIC -DPIC -o .libs/pam_mysql.o

pam_mysql.c: In function 'pam_mysql_converse':

pam_mysql.c:3192:4: warning: passing argument 2 of 'conv->conv' from incompatible pointer type [enabled by default]

   conv->appdata_ptr))) {   //這里出現(xiàn)了一個報錯信息,不影響最終結(jié)果,無需理會

   ^

pam_mysql.c:3192:4: note: expected 'const struct pam_message **' but argument is of type 'struct pam_message **'

/bin/sh ./libtool --mode=link gcc  -g -O2 -I/usr/include/mysql     -o pam_mysql.la -rpath /usr/lib64/security -module -avoid-version pam_mysql.lo  -L/usr/lib64/mysql -lmysqlclient -lpthread -lz -lm -lssl -lcrypto -ldl    -lcrypt

gcc -shared  .libs/pam_mysql.o  -L/usr/lib64/mysql -lmysqlclient -lpthread -lz -lm -lssl -lcrypto -ldl -lcrypt  -Wl,-soname -Wl,pam_mysql.so -o .libs/pam_mysql.so

creating pam_mysql.la

(cd .libs && rm -f pam_mysql.la && ln -s ../pam_mysql.la pam_mysql.la)

[root@centos730g pam_mysql-0.7RC1]# 

[root@centos730g pam_mysql-0.7RC1]# make install


第四步:安裝、配置mariadb-server并啟動之

[root@centos730g ~]# yum install -y mariadb-server

[root@centos730g ~]# systemctl start mariadb

[root@centos730g ~]# mysql_secure_installation  //運行安全配置腳本(設(shè)置管理員密碼、刪除匿名帳戶、開啟管理員遠程登錄、刪除測試數(shù)據(jù)庫)


第五步:進入數(shù)據(jù)庫創(chuàng)建FTP用戶帳戶數(shù)據(jù)庫

MariaDB [(none)]> create database vsftpd;

MariaDB [(none)]> create table vsftpd.users (id int not null auto_increment primary key,name char(30) not null unique key,password char(48));

MariaDB [(none)]> insert into vsftpd.users (name,password) values ('admin',password('adminpass')),('guest',password('guestpass'));

MariaDB [(none)]> grant all on vsftpd.* to 'vsftpd'@'127.0.0.1' identified by 'vsftpdpass;

MariaDB [(none)]> flush privileges;

MariaDB [(none)]> exit


第六步:手動編寫ftp連接mysql的配置文件

[root@centos730g ~]# vim /etc/pam.d/vsftpd.mysql


auth required /usr/lib64/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 /usr/lib64/security/pam_mysql.so user=vsftpd passwd=vsftpdpass host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2


第七步:創(chuàng)建FTP根目錄,創(chuàng)建數(shù)據(jù)庫中FTP帳戶映射到本地的帳戶,并指定其家目錄為FTP根目錄,設(shè)置FTP根目錄的相應(yīng)權(quán)限

mkdir -pv /ftproot/{pub,upload}  //為了方便后面驗證效果,創(chuàng)建兩個目錄(pub用于下載,upload用于用戶上傳)

chmod -w /ftproot  //ftp根目錄不能有寫入權(quán)限

useradd -r -d /ftproot vsftpd



第八步:啟動vsftpd服務(wù),安裝ftp客戶端工具lftp,并檢驗登錄效果

[root@centos730g ~]# yum install -y lftp

[root@centos730g ~]# lftp -u admin 192.168.1.71

Password: 

lftp admin@192.168.1.71:~> ls        

ls: Login failed: 530 Login incorrect.

lftp admin@192.168.1.71:~> 

確保密碼沒有輸入錯誤的情況下出現(xiàn)此報錯信息,原因就是SELinux沒有關(guān)閉。于此同時,安全模塊的日志文件里面也有相應(yīng)的錯誤記錄。

[root@centos730g ~]# cat /var/log/secure


Oct 18 20:00:50 centos730g vsftpd[13492]: pam_mysql - MySQL error (Can't connect to MySQL server on '127.0.0.1' (13))

Oct 18 20:02:30 centos730g vsftpd[13514]: pam_mysql - MySQL error (Can't connect to MySQL server on '127.0.0.1' (13))


關(guān)閉SELinux再嘗試登錄,一切正常

[root@centos730g ~]# getenforce

Enforcing

[root@centos730g ~]# setenforce 0

[root@centos730g ~]# getenforce

Permissive

[root@centos730g ~]# !lftp

lftp -u admin 192.168.1.71

Password: 

lftp admin@192.168.1.71:~> ls        

drwxr-xr-x    2 0        0            4096 Oct 18 12:05 pub

drwxr-xr-x    2 0        0            4096 Oct 18 12:05 upload

lftp admin@192.168.1.71:/> 

lftp admin@192.168.1.71:/> cd upload/

lftp admin@192.168.1.71:/upload> put /etc/fstab

put: Access failed: 550 Permission denied. (fstab)

lftp admin@192.168.1.71:/upload> 

lftp admin@192.168.1.71:/upload> exit

[root@centos730g ~]# lftp -u guest 192.168.1.71

Password: 

lftp guest@192.168.1.71:~> ls        

drwxr-xr-x    2 0        0            4096 Oct 18 12:05 pub

drwxr-xr-x    2 0        0            4096 Oct 18 12:05 upload

lftp guest@192.168.1.71:/> cd upload/

lftp guest@192.168.1.71:/upload> put /etc/issue

put: Access failed: 550 Permission denied. (issue)

lftp guest@192.168.1.71:/upload> 

至此為到,admin,guest兩個虛擬用戶都可以順利通過mysql的驗證后登錄到ftp服務(wù)器,并下載文件了,但如果要想擁有上傳權(quán)限,必需對單個虛擬帳戶單獨配置權(quán)限


第九步:為管理員帳戶admin配置上傳及修改權(quán)限

編輯vsftpd配置文件,添加一行

vim /etc/vsftpd/vsftpd.conf

user_config_dir=/etc/vsftpd/users_conf

創(chuàng)建用于存放單個用戶權(quán)限配置文件的目錄

mkdir /etc/vsftpd/users_conf


手動編寫權(quán)限配置文件內(nèi)容

vim /etc/vsftpd/users_conf/admin

anon_upload_enable=YES    //允許上傳

anon_other_write_enable=YES   //允許刪除

anon_mkdir_write_enable=YES   //允許創(chuàng)建目錄


給本地映射帳戶vsftpd用戶授予/ftproot/upload目錄擁有寫入權(quán)限

[root@centos730g ~]# setfacl -m u:vsftpd:rwx /ftproot/upload/

[root@centos730g ~]# getfacl /ftproot/upload/

getfacl: Removing leading '/' from absolute path names

# file: ftproot/upload/

# owner: root

# group: root

user::rwx

user:vsftpd:rwx

group::r-x

mask::rwx

other::r-x


[root@centos730g ~]# 

注意,雖然此時vsftp擁有寫入權(quán)限,但只有在單獨授權(quán)文件里面開放相應(yīng)權(quán)限后,寫入權(quán)限才會對該用戶正式生效。


配置完成后,重啟vsftpd服務(wù),讓剛才所做的配置正式生效

[root@centos730g ~]# systemctl restart vsftpd


再次使用admin帳戶登錄,驗證上傳及修改權(quán)限

[root@centos730g ~]# lftp -u admin 192.168.1.71

Password: 

lftp admin@192.168.1.71:~> cd upload/

lftp admin@192.168.1.71:/upload> put /etc/fstab

574 bytes transferred                                          

lftp admin@192.168.1.71:/upload> ls

-rw-------    1 996      994           574 Oct 18 12:47 fstab

lftp admin@192.168.1.71:/upload> mkdir admin

mkdir ok, `admin' created                

lftp admin@192.168.1.71:/upload> ls

drwx------    2 996      994          4096 Oct 18 12:47 admin

-rw-------    1 996      994           574 Oct 18 12:47 fstab

lftp admin@192.168.1.71:/upload> rm fstab

rm ok, `fstab' removed

lftp admin@192.168.1.71:/upload> ls

drwx------    2 996      994          4096 Oct 18 12:47 admin

lftp admin@192.168.1.71:/upload> rm -rf admin

rm ok, `admin' removed                     

lftp admin@192.168.1.71:/upload> ls

lftp admin@192.168.1.71:/upload>  

lftp admin@192.168.1.71:/upload> exit

[root@centos730g ~]# lftp -u guest 192.168.1.71

Password: 

lftp guest@192.168.1.71:~> cd upload/

lftp guest@192.168.1.71:/upload> put /etc/issue

put: Access failed: 550 Permission denied. (issue)

lftp guest@192.168.1.71:/upload> 

admin是單獨做了上傳修改授權(quán)的配置的,所以upload的寫入權(quán)限對它是生效的,而guest沒有單獨授權(quán),寫入權(quán)限對其是無效的。


至此,對ftp服務(wù)的需求,在實際生產(chǎn)環(huán)境中基本滿足,當(dāng)然ftp服務(wù)的用戶帳戶一般不會多到使用數(shù)據(jù)庫來存儲,所以這就需要根據(jù)實際需求來決定采用何種方式來存儲ftp的用戶帳戶了。但這里一定要提醒大家的是,ftp服務(wù)對目錄的權(quán)限要求是非常嚴(yán)格的,稍有不慎,便會出各式各樣的報錯信息,所以大家在配置過程中,一定要細心對待。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI