vsftpd用戶分爲:匿名用戶、本地用戶、虛擬用戶
虛擬用戶和本地用戶沒有關係,但是所有虛擬用戶會被映射爲一個指定的系統帳號,訪問共享位置就是這系統帳號的家目錄。
各虛擬用戶可以被賦予不同的訪問權限:
通過匿名用戶權限控制參數進行指定;
虛擬用戶帳號的存儲方式
文件,編輯文本文件來存儲
奇數行爲用戶名,奇數行+1爲其對應密碼。
此文件需要被編碼爲hash格式,這個方式非常費勁,添加一
次就需要重新hash加密一次
關係型數據庫的表中:
即時查詢數據庫完成用戶認證:
mysql庫,pam要依賴於pam-mysql模塊
1 安裝軟件
安裝mysql,vsftpd,pam_mysql
pam_mysql屬於epel的,得安裝epel:yum install epel-release
打開它的readme
裏面示例:
認證方式 可選的 模塊認證 帳號密碼
紅色字體是遠程主機上執行的,黑色字體是在本地執行的:
2 配置數據庫
在遠程主機上安裝mariadb:
遠程主機上執行
create database vsftpd;
use vsftpd;
grant select on vsftpd.* TO vsftpd@'192.168.%.%' identified by 'vsftpd';
flush privileges;
遠程連接mariadb的主機
mysql -uvsftpd -h192.168.1.108 -p
但是centos7裏面不是iptables了,所以需要關閉的是firewalld
systemctl stop firewalld
或者
service firewalld stop
本地查看下數據庫。
遠程主機建立表
create table user( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50) BINARY NOT NULL, password CHAR(48) BINARY NOT NULL);
在本地端可以查到
desc user;
數據庫內建函數password(‘xxx’)可以將任意數據變成48位的
select password(‘abc’);
insert into user (name,password) values('tom',password('magedu')),('gh',password('magedu'));
向遠程主機的vsftpd表中插入數據
在本地查詢
3 配置pam
隨便在/etc/pam.d裏建立個文件
在裏面輸入內容如下
auth,認證
account,驗證用戶有效與否
required ,可選方式
pam_mysql.so ,模塊認證,相對路徑,/lib64
user=vsftpd,mysql連接用戶
passwd=vsftpd ,mysql連接密碼
host=192.168.1.108 ,mysql連接地址
db=vsftpd ,數據庫名字
table=user ,表名字
usercolumn=name ,用戶列名
passwdcolumn=password ,密碼列名
crypt=0,加密方式
4 建立賬號
需要在本地主機上建立一個帳號用來登錄
useradd –s /sbin/nologin –d /var/ftproot vuser
chmod go+rx /var/ftproot
請確保/etc/vsftpd.conf中已經啓用了以下選項
anonymous_enable=YES //匿名用戶
local_enable=YES //本地用戶
write_enable=YES //本地用戶寫入
anon_upload_enable=NO //匿名上傳
anon_mkdir_write_enable=NO //匿名建立文件夾
chroot_local_user=YES //是否將用戶限制在主目錄,yes是
然後添加以下項
guest_enable=YES
guest_username=vuser並確保pam_service_name選項的值如下所示
pam_service_name=vsftpd.mysql
用tail /var/log/secure裏顯示最近登錄系統的日誌
現在幾個用戶都是相同權限的,下面要賦予不同的權限。
5 配置不同用戶的訪問權限
在/etc/vsftpd/vsftpd.conf
添加user_config_dir=/etc/vsftpd/vuser_config
然後在指定位置建立文件夾vuser,並針對每個用戶建立一個文件
裏面的內容如下
anon_upload_enable=YES
anon_mkdir_write_enable=yes
anon_other_write_enable=yes測試連接一下,成功
-------------------------------------------------------------------------
除了ftp,下列也可以使用
axel,lftpget,wget,curl
ftp協議是明文
ftps:SSL,認證過程是安全的
sftp:SSH,