centos6配置mysql远程访问_Linux服务器配置-VSFTP服务配置(六)
上文:Linux服務器配置-VSFTP服務配置(五)
上文中已經介紹了使用數據庫文件方式配置虛擬用戶認證登錄FTP服務器,這篇文件將介紹通過數據庫方式(vsftpd服務+pam_mysql+MySQL)配置虛擬用戶認證登錄FTP服務器。
一、安裝配置MySQL數據庫
這里以在CentOS6中安裝MySQL5.7.25社區版和在RHEL7中安裝MySQL8.0.15社區版為例,下文中的示例圖片無特殊說明,均已在CentOS6中安裝MySQL5.7.25數據庫為主。另外,本人發布文章中的實例都是親自測試成功后發布的。
1、查看系統中是否安裝其他版本的MySQL數據庫。
rpm -qa | grep mysql
如果已安裝了其他版本的mysql-server,需先停止mysqld服務,再刪除安裝的mysql軟件包。
停止mysql服務
- CentOS6系統
service mysqld stop
- RHEL7或CentOS7系統
systemctl stop mysqld
根據所安裝的mysql軟件包,用 yum remove 或 rpm -e 命令刪除。
2、下載mysql的repo源。
在MySQL官網https://dev.mysql.com/downloads/repo/yum/,選擇適合的Linux平臺發行包,下載repo源。
或用wget命令在Linux系統中直接下載repo源rpm包。(以下為適合RHEL Linux/ Oracle Linux的發行版的rpm包)
- CentOS6系統
wget https://dev.mysql.com/get/mysql80-community-release-el6-2.noarch.rpm
- RHEL7或CentOS7系統
wget https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm
3、安裝下載的軟件包。
安裝軟件包后,會獲得兩個mysql的repo源:/etc/yum.repos.d/mysql-community.repo 和 /etc/yum.repos.d/mysql-community-source.repo。
- CentOS6系統
rpm -ivh /root/mysql80-community-release-el6-2.noarch.rpm
- RHEL7或CentOS7系統
rpm -ivh /root/mysql80-community-release-el7-2.noarch.rpm
yum clean all
yum makecache
4、查看repo源當前啟用的是哪個MySQL版本的存儲庫。(即當前repo源支持的MySQL版本)
MySQL的不同發行版托管在不同的子存儲庫中。默認情況下啟用最新(當前為MySQL 8.0.15)的子存儲庫,并禁用所有其他版本的子存儲庫。使用以下命令查看MySQL Yum存儲庫中的所有子存儲庫及子存儲庫啟用或禁用狀態。
yum repolist all | grep mysql
在這里可以看出當前repo源支持的子存儲庫及已啟用了mysql插件、工具及8.0版本的子存儲庫。
5、設置repo源啟用哪個版本的子存儲庫。(即更換repo源當前支持的MySQL版本)
yum-config-manager --disable mysql80-community#關閉mysql8.0版本
yum-config-manager --enable mysql57-community #啟用mysql5.7版本
yum repolist all | grep mysql #查看mysql5.7版本子存儲庫是否開啟
除了使用以上命令之外,還可以通過手動編輯/etc/yum.repos.d/mysql-community.repo 文件來設置 ,將文件中相應MySQL版本的“enabled=”設置為1或0。(1表示啟用,0表示關閉)
注:如果需要安裝最新版本的MySQL數據庫,此步可省略。
6、安裝mysql-community(社區版)數據庫
yum install -y mysql-community-server
7、查看mysql的安裝版本。
mysqladmin -V
CentOS6系統
RHEL7系統
8、修改MySQL的配置文件(/etc/my.cnf)
備份配置文件
cp /etc/my.cnf /etc/my.cnf.bak
修改配置文件
vim /etc/my.cnf
#設置mysql數據字符集
character-set-server=utf8#MySQL-5.7版本
character-set-server=utf8mb4#MySQL-8.0版本
#設置mysql的端口號,默認為3306。
port=3306
設置mysql表名是否區分大小寫:0表示區分大小寫;1表示不區分大小寫
lower_case_table_names=1
9、啟動MySQL數據庫。
- CentOS6系統
service mysqld start
- RHEL7或CentOS7系統
systemctl start mysqld.service
10、查詢mysqld服務的運行狀態并設置為開機自啟。
- CentOS6系統
service mysqld status#查詢mysqld服務運行狀態
chkconfig mysqld on#設置mysqld服務開機自啟
chkconfig --list | grep mysqld #查詢mysql服務開機自啟狀態
- RHEL7或CentOS7系統
systemctl status mysqld #查詢mysqld服務運行狀態
systemctl enable mysqld#設置mysqld服務開機自啟
systemctl list-unit-files | grep mysqld#查詢mysql服務開機自啟狀態
11、查看MySQL數據庫root用戶的初始密碼。
cat /var/log/mysqld.log | grep 'A temporary password'
12、登錄MySQL數據庫并設置root用戶密碼。
a、配置MySQL用戶密碼復雜度說明
validate_password.policy=0
設置密碼強度檢查等級。
密碼強度檢查等級為:0 or LOW、1 or MEDIUM、2 or STRONG。有以下取值:
0 or LOW :測試項目為Length(密碼長度) 。
1 or MEDIUM:測試項目為Length; numeric, lowercase/uppercase, and special characters(密碼的長度、數字、大小寫和特殊字符) ,此項為默認值。
2 or STRONG:測試項目為Length; numeric, lowercase/uppercase, and special characters; dictionary file(密碼的長度、數字、大小寫、特殊字符和密碼字典文件。)
validate_password.dictionary_file
設置用于驗證密碼強度的字典文件路徑。
validate_password.mixed_case_count=0
設置密碼大小寫字符的長度
validate_password.number_count=0
設置密碼數字的長度
validate_password.special_char_count=0
設置密碼特殊字符的長度
validate_password.length=0
設置密碼的最小長度,默認為8。
注:validate_password.length 的長度要大于 validate_password.mixed_case_count + validate_password.number_count + validate_password.special_char_count 的和。
b、FLUSH PRIVILEGES—SQL語句使用說明
此SQL語句的作用是從內置的mysql庫中,將當前user和privilige表中的用戶信息與權限信息提取到內存中。MySQL用戶數據和權限被修改后,在“不重啟mysqld服務"的情況下直接生效。
c、首次登錄MySQL數據庫
首次登錄MySQL數據庫,需使用上步查詢到的初始密碼。登錄MySQL數據庫的命令為:mysql -u username -h host -P port -p password。
在MySQL-5.7版本以后,首次登錄MySQL數據庫,必須先修改root用戶密碼后才能進行其他數據庫操作,密碼要求至少8位,需要包含大小寫字母、數字和特殊字符。
注:下文中“mysql>”為數據庫中的命令提示符,其后為要執行的SQL語句。
#使用root用戶本地登錄MySQL數據庫。
mysql -u root -p
#修改root用戶密碼。(單引號內的password為新密碼)
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';
mysql> FLUSH PRIVILEGES;#刷新緩存
若想設置為簡單密碼如123456,則要通過以下SQL語句來設置。
- MySQL-5.7版本
mysql> SET GLOBAL validate_password_policy=0; #設置用戶密碼的檢查強度
mysql> SET GLOBAL validate_password_length=6; #設置用戶密碼最小位數
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';#修改root用戶密碼
mysql> FLUSH PRIVILEGES;#刷新緩存
mysql> SELECT @@validate_password_policy;#查看用戶密碼的檢查強度設置
mysql> SHOW VARIABLES LIKE 'validate_password%'; #查看用戶密碼選項的設置
- MySQL-8.0版本
mysql> SET GLOBAL validate_password.policy=0; #設置用戶密碼的檢查強度
mysql> SET GLOBAL validate_password.length=6;#設置用戶密碼最小位數
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';#修改root用戶密碼
mysql> FLUSH PRIVILEGES;#刷新緩存
mysql> SELECT @@validate_password.policy;#查看用戶密碼的檢查強度設置
mysql> SHOW VARIABLES LIKE 'validate_password%'; #查看用戶密碼選項的設置
以上只是臨時配置,若要永久生效可在MySQL配置文件(/etc/my.cnf)中,加入如下配置項,并重啟mysqld服務。
- CentOS6系統
validate_password_policy=0
validate_password_length=6
- RHEL7或CentOS7系統
validate_password.policy=0
validate_password.length=6
可通過quit命令退出MySQL數據庫。
13、安全設置MySQL數據庫
通過安全設置向導,對MySQL數據庫進行安全設置操作。
安全設置分為以下幾個選項:
- 修改root用戶的密碼
- 是否移除匿名用戶
- 是否禁用root賬戶遠程登錄
- 是否移除測試數據庫(test)
- 是否重新加載授權表
在Linux系統中執行以下命令,運行安全設置向導。
mysql_secure_installation
14、遠程鏈接MySQL數據庫配置
建議在測試或開發環境下開啟root用戶遠程訪問MySQL數據庫的權限;在生產環境下,通過建立數據庫管理員DBA,并授予相應的權限來遠程管理數據庫。
a、改表法
通過修改mysql內置數據庫中user表host字段的值,可使root或其他用戶遠程訪問MySQL數據庫。
使用root用戶登錄MySQL數據庫。
mysql -u root -p #登錄MySQL數據庫
mysql> USE mysql; #轉到名為mysql的內置數據庫
mysql> SELECT user,host FROM user;#查詢user表的記錄(僅顯示出user列和host列)。
mysql> UPDATE user SET host = '%' WHERE user = 'root';#修改user表,user字段=root的host字段值為%。(也就是設置root用戶可使用任何地址遠程訪問數據庫,%表示任何地址。)
mysql> FLUSH PRIVILEGES;#刷新緩存
mysql> SELECT user,host FROM user;#查詢user表的記錄(僅顯示出user列和host列)。
b、授權法
mysql -u root -p #登錄MySQL數據庫
mysql> USE mysql; #轉到名為mysql的內置數據庫
- 在MySQL-8.0版本中
mysql> CREATE USER 'admin'@'192.168.1.%' IDENTIFIED BY '123456'; #創建新用戶、設置密碼并設置允許遠程訪問的IP地址段(用戶名admin、密碼123456、可遠程訪問的IP地址段為192.168.1.0)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'admin'@'192.168.1.%' WITH GRANT OPTION; #設置新建用戶對所有數據庫對象具有全部的操作權限。(MySQL 賦予用戶權限的SQL語句的簡單格式為:GRANT 權限 ON 數據庫對象 TO 用戶,如果要使該用戶可以將自己擁有的權限授權給別人,可加上WITH GRANT OPTION選項。)
mysql> FLUSH PRIVILEGES;#刷新緩存
mysql> SHOW GRANTS FOR 'admin'@'192.168.1.%';#查看新建用戶的權限
- 在MySQL-5.7版本中
mysql> GRANT ALL PRIVILEGES ON *.* TO 'admin'@'192.168.1.%' IDENTIFIED BY '123456' WITH GRANT OPTION; #MySQL8.0以下的版本,創建用戶和設置用戶權限,可以使用一條SQL語句完成。
mysql> FLUSH PRIVILEGES;#刷新緩存
mysql> SHOW GRANTS FOR 'admin'@'192.168.1.%';#查看新建用戶的權限
15、防火墻配置
- CentOS6系統
iptables -t filter -I INPUT -p tcp -m tcp --dport 3306 -m state --state NEW -j ACCEPT #添加防火墻規則
service iptables save#保存防火墻規則
service iptables restart #重啟防火墻
iptables -t filter --line-number -nL INPUT#查看現有防火墻規則
- RHEL7或CentOS7系統
firewall-cmd --permanent --zone=public --add-port=3306/tcp#添加防火墻規則
firewall-cmd --reload#重載防火墻
firewall-cmd --list-all #查看現有防火墻規則
16、遠程鏈接MySQL數據庫驗證
在Linux系統中使用MySQL客戶端驗證遠程鏈接
mysql -u admin -h 192.168.1.90 -p
在Windows系統中使用Navicat Premium 12工具遠程鏈接
二、安裝pam-mysql
1、CentOS6系統yum方式安裝
a、安裝EPEL repo源
yum install -y epel-release 或 rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum clean all
yum makecache
b、安裝pam-mysql
yum install -y pam_mysql
2、RHEL7或CentOS7系統安裝
a、下載pam_mysql-0.8.1-0.22.el7.lux.x86_64.rpm包
wget http://repo.iotti.biz/CentOS/7/x86_64/pam_mysql-0.8.1-0.22.el7.lux.x86_64.rpm
b、安裝下載的軟件包
rpm -ivh pam_mysql-0.8.1-0.22.el7.lux.x86_64.rpm
3、查詢pam_mysql.so是否存在
find / -name pam_mysql.so
三、實例說明通過數據庫方式(vsftpd服務+pam_mysql+MySQL)配置虛擬用戶認證登錄FTP服務器。
1、配置軟件環境說明。
CentOS6系統
- CentOS release 6.10 (Final)
- vsftpd-2.2.2-24.el6.x86_64
- MySQL-5.7.25
- pam_mysql-0.7-0.12
RHEL7系統
- Red Hat Enterprise Linux Server release 7.6 (Maipo)
- vsftpd-3.0.2-25.el7.x86_64
- MySQL-8.0.15
- pam_mysql-0.8.1-0.22
服務器配置要求:
- FTP服務采用被動模式運行,只允許虛擬用戶登錄,并將被動端口鎖定在59800-59900之間。
- 虛擬用戶信息保存在MySQL數據庫中。
- 虛擬用戶snowfox為FTP管理員,其FTP根目錄設定在/var/vftproot目錄中,該用戶具有可下載、上傳、新建目錄(文件)、更名、及刪除文件的權限。
- 虛擬用戶wendy為一般用戶,其FTP根目錄設定在/var/vftproot/wendy目錄中(即只能訪問自己的FTP目錄),該用戶具有可下載、上傳、新建目錄(文件)、更名、及刪除文件的權限。
- 虛擬用戶itcat為一般用戶,其FTP根目錄設定在/var/vftproot目錄中(即可訪問其他用戶FTP目錄),該用戶只有查看和下載文件的權限。
2、創建本地映射用戶,并設置FTP目錄的權限。
adduser -d /var/vftproot -s /sbin/nologin virftp
chmod -R 755 /var/vftproot
3、配置MySQL數據庫,用于vsftp虛擬用戶數據庫認證登錄。
a、創建vsftp虛擬用戶數據庫認證登錄所需要的庫文件。
登錄MySQL,創建vsftpdb數據庫。
mysql -u root -p
mysql> CREATE DATABASE vsftpdb;
b、在vsftpdb數據庫中創建用戶表vsftp_users。
mysql> USE vsftpdb; #使用vsftpdb數據庫
mysql> select database(); #查看當前用戶所使用的數據庫
mysql> CREATE TABLE vsftp_users( #建立vsftp用戶表vsftp_users
user_id SMALLINT AUTO_INCREMENT NOT NULL, #設置表的用戶id字段
user_name CHAR(20) NOT NULL, #設置表的用戶名字段
user_password CHAR(48) BINARY NOT NULL, #設置表的用戶密碼字段
PRIMARY key(user_id)); #設置表的主鍵為user_id字段
mysql> DESC vsftp_users; #查看vsftp_users表結構的詳細信息
c、在vsftp_users表中批量添加vsftp虛擬用戶信息
mysql> INSERT INTO vsftp_users (user_name,user_password) VALUE
('snowfox',MD5('666666')),
('wendy',MD5('666666')),
('itcat',MD5('666666'));
mysql> SELECT * FROM vsftp_users; #查詢vsftp_users表的所有記錄
d、添加FTP數據庫用戶vsftp,并設置此用戶只有查詢vsftpdb數據庫中的所有表的權限。
mysql> USE mysql;
mysql> CREATE USER 'vsftp'@'localhost' IDENTIFIED BY 'vsftpd';#創建新用戶并設置密碼
mysql> GRANT SELECT ON vsftpdb.* TO 'vsftp'@'localhost'; #設置新建用戶并對其設置相關權限
mysql> FLUSH PRIVILEGES; #刷新緩存
mysql> SHOW GRANTS FOR 'vsftp'@'localhost'; #查看新建用戶的權限
MySQL-8.0數據庫
由于MySQL-8.0之前版本的加密規則是mysql_native_password,而MySQL-8.0的加密規則是caching_sha2_password,所以數據庫用戶在使用pam_mysql.so與MySQL-8.0版本的數據庫鏈接時,需要修改相應數據庫用戶的加密規則為mysql_native_password。
mysql> ALTER USER 'vsftp'@'localhost' IDENTIFIED WITH mysql_native_password BY 'vsftpd';
mysql> FLUSH PRIVILEGES;
4、建立PAM認證文件
在/etc/pam.d/目錄中創建用于vsftp的PAM認證文件。
vim /etc/pam.d/vsftpd.mysql
加入以下語句
auth required /lib64/security/pam_mysql.so user=vsftp passwd=vsftpd host=localhost db=vsftpdb table=vsftp_users usercolumn=user_name passwdcolumn=user_password crypt=3
account required /lib64/security/pam_mysql.so user=vsftp passwd=vsftpd host=localhost db=vsftpdb table=vsftp_users usercolumn=user_name passwdcolumn=user_password crypt=3
注意pam_mysql.so文件的路徑。
說明:
pam_mysql.so模塊選項
-- verbose 設置為1則顯示詳細的調試信息,默認0
-- debug 開啟調試模式
-- user mysql數據庫認證的用戶名
-- passwd mysql數據庫認證的密碼
-- host mysql數據庫的主機名稱或IP
-- db 包含驗證信息的數據庫名稱
-- table 包含驗證信息的數據庫表名稱
-- usercolumn 包含驗證的用戶名列
-- passwdcolumn 包含驗證的密碼列
-- crypt 密碼加密方式,
0 無加密,默認為此值;
1 使用crypt(3)函數加密;
2 使用MySQL的PASSWORD函數加密;(在mysql8.0中已經取消此函數)
3 使用普通十六進制md5加密;
4 使用普通十六機制SHA1加密;
-- sqllog 設置為“true”或“yes”,則啟用SQL日志記錄,默認false
-- logtable 存儲日志的表名稱
-- logmsgcoumn 該列存儲日志的消息
-- logusercolumn 該列存儲產生日志的用戶名
-- logpidcolumn 該列存儲產生日志的進程PID
5、修改vsftpd配置文件。
備份原配置文件
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
修改配置文件
vim /etc/vsftpd/vsftpd.conf
具體修改請參閱上篇文章—Linux服務器配置-VSFTP服務配置(五),這里就不再說明。
請注意修改以下配置項:
pam_service_name=/etc/pam.d/vsftpd.mysql
6、為虛擬用戶單獨創建配置文件及相應目錄,已調整各個虛擬用戶的不同訪問權限。
具體修改請參閱上篇文章—Linux服務器配置-VSFTP服務配置(五),這里就不再說明。
7、防火墻配置
vsftpd服務的防火墻配置已在—Linux服務器配置-VSFTP服務配置(三)中加以說明,這里不再重復。
8、SELinux設置
- CentOS6系統
更改vsftp的SELinux布爾變量
setsebool -P ftp_home_dir on
setsebool -P allow_ftpd_full_access on
- RHEL7系統
setsebool -P ftpd_full_access on
9、重啟vsftpd服務
- CentOS6系統
service vsftpd restart
- RHEL7系統
systemctl restart vsftpd
10、驗證配置結果
11、VSFTP與MySQL部署在不同的服務器上
以上實例是VSFTP與MySQL安裝在一臺服務器上的配置,如果將這兩個服務安裝在不同的服務器上,例如vsftpd服務安裝在地址為192.168.1.100的服務器上,MySQL數據庫安裝在地址為192.168.1.200的服務器上,配置與上面基本相同,不同之處說明如下。
① 添加FTP數據庫用戶時,添加的是遠程鏈接用戶,遠程地址是vsftp服務器的地址。
CREATE USER 'vsftp'@'192.168.1.100' IDENTIFIED BY 'vsftpd';
② 創建用于vsftp的PAM認證文件時,host選項為MySQL服務器的地址。
auth required /lib64/security/pam_mysql.so user=vsftp passwd=vsftpd host=192.168.1.200 db=vsftpdb table=vsftp_users usercolumn=user_name passwdcolumn=user_password crypt=3
account required /lib64/security/pam_mysql.so user=vsftp passwd=vsftpd host=192.168.1.200 db=vsftpdb table=vsftp_users usercolumn=user_name passwdcolumn=user_password crypt=3
以上是我在學習Linux系統中整理的一些學習要點,肯定會有不對的地方,希望各位大俠給與指正,我們共同學習!謝謝!
總結
以上是生活随笔為你收集整理的centos6配置mysql远程访问_Linux服务器配置-VSFTP服务配置(六)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js写随机输出7位数代码教程
- 下一篇: php连接mysql数据没反应_PHP