如果僅是提供不同user上傳、下載資料,通常不會允許使用機器上的local user,
可以避免建立帳號時的麻煩還有帳號流出的可能。
此時會使用 virtual user,提供一個帳號認證系統,與 local user 分開。
vsftpd是使用 pam (Linux可插可拔的認証模組)來提供帳號認證,因此更換 pam的設定,
就可以達到使用virtual user的功能。
1. 編輯使用帳號密碼:
編輯 /etc/vsftpd/vuser.txt,一行帳號,一行密碼,sample如下:
user1
123456
user2
abcdef
轉換成 DB:
db_load -T -t hash -f ./vuser.txt ./vuser.db
PS:轉換後,可以透過 file來檢查檔案型態是否正確。(檔案型態,應該為 Berkeley DB )
file vuser.db
2. 編輯 pam 檔
pam檔通常都會集中在 /etc/pam.d 下面,
此處編輯一個專用的的pam檔,/etc/pam.d/vsftpd_vuser,內容如下:
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser
指定認證及帳號的部分使用剛剛建立的 /etc/vuser.db
3. 修改 vsftpd.conf 設定
pam_service_name=vsftpd_vuser
virtual_use_local_privs=YES
guest_enable=YES
guest_username=vuser
user_sub_token=$USER
local_root=/home/vuser/$USER
設定了對應的 pam 到 /etc/pam.d/vsftpd_vuser,並啟用 virtual user的功能。
virtual user 會以 guest 的身分登入,其中:guest_username=vuser
,會把對應的 guest 帳號轉換成 local user 的帳號 vuser 來使用,
後端需要先用 linux adduser 來建立 vuser 帳號,
並可透過 vuser這個帳號從後端調整設定相關的檔案權限。
user_sub_token=$USER,指定了登入的識別使用db中的帳號,
local_root=/home/vuser/$USER,指定登入後的預設目錄(根目錄)。
如果是 user1 登入,預設目錄會在 /home/vuser/user1,
請記得針對每個人的預設目錄路徑,建立好相對的目錄,否則登入會找不到目錄失敗。
2019年5月5日 星期日
centos7 架設 vsftpd (ftps 與 pasv mode)
ftp登入時,會傳送帳密,即使資料沒有加密的必要,但帳密仍然需要安全。
因此建議使用 ftps (ftp 擴充 SSL 或 TLS) 的方式。
但因為使用不同的port傳輸,因此必須使用 pasv mode來開啟資料傳輸線,
因此也需要同時起用pasv mode。
1. 建立ssl的憑證:
假設將憑證存放在 /etc/vsftpd/certs/vsftpd.pem,
mkdir /etc/vsftpd/certs
cd /etc/vsftpd/certs
openssl req -new -x509 -nodes -out vsftpd.pem -keyout vsftpd.pem
chmod 400 vsftpd.pem
此處設定成只有root可以讀取憑證內容,避免憑證資訊外漏。
2. 調整設定檔:
ssl_enable=YES
require_ssl_reuse=NO
rsa_cert_file=/etc/vsftpd/certs/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/certs/vsftpd.pem
pasv_min_port=40100
pasv_max_port=40200
其裝 pasv_min_port 與 pasv_max_port 的設定,是在pasv mode的設定。
傳輸資料時,server會在 pasv_min_port ~ pasv_max_port 之間開啟一個port來接收連線。
PS: require_ssl_reuse 預設 YES,有些client會不支援,因此設定NO。
3. 配合著使用ssl 及 pasv mode,需要調整firewall,把對應的port打開,
其中 ftps的listen port 預設為990,及pasv mode需要40100~40200。
firewall-cmd --zone=public --permanent --add-port=990/tcp
firewall-cmd --zone=public --permanent --add-port=40100-40200/tcp
firewall-cmd --reload
4. 完成設定後請記得重開 vsftpd 進行測是。FTP client 可以觀察到 SSL 或 TLS 的轉換訊息。
5. 增加僅能存取自己local目錄的安全限制:
通常為了安全起見,會僅允許使用者存取自己的local目錄以下的東西。
chroot_local_user=YES
增加此項設定後,登入時,client可能會遇到錯誤訊息:
' 500 OOPS: chroot '
來自於 SELINUX (Security-Enhanced Linux)的限制,需要做一下設定:
使用getsebool 查看限制:
getsebool -a | grep ftp
通常 CentOS7 需要設定:
setsebool -P ftpd_full_access on
較早的linux 版本:
setsebool -P ftp_home_dir 1
接著可以登入後,可能會出現下面的錯誤訊息:
'500 OOPS: vsftpd: refusing to run with writable root inside chroot()'
請在 vsftpd.conf 增加
allow_writeable_chroot=YES
6. 其他情況:
如果遇到較為舊版的 client需要支援的情況,可以開啟一些SSL & TLS的支援協定:
ssl_sslv2=NO
ssl_sslv3=NO
ssl_tlsv1=NO
ssl_tlsv1_1=NO
因此建議使用 ftps (ftp 擴充 SSL 或 TLS) 的方式。
但因為使用不同的port傳輸,因此必須使用 pasv mode來開啟資料傳輸線,
因此也需要同時起用pasv mode。
1. 建立ssl的憑證:
假設將憑證存放在 /etc/vsftpd/certs/vsftpd.pem,
mkdir /etc/vsftpd/certs
cd /etc/vsftpd/certs
openssl req -new -x509 -nodes -out vsftpd.pem -keyout vsftpd.pem
chmod 400 vsftpd.pem
此處設定成只有root可以讀取憑證內容,避免憑證資訊外漏。
2. 調整設定檔:
ssl_enable=YES
require_ssl_reuse=NO
rsa_cert_file=/etc/vsftpd/certs/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/certs/vsftpd.pem
pasv_min_port=40100
pasv_max_port=40200
其裝 pasv_min_port 與 pasv_max_port 的設定,是在pasv mode的設定。
傳輸資料時,server會在 pasv_min_port ~ pasv_max_port 之間開啟一個port來接收連線。
PS: require_ssl_reuse 預設 YES,有些client會不支援,因此設定NO。
3. 配合著使用ssl 及 pasv mode,需要調整firewall,把對應的port打開,
其中 ftps的listen port 預設為990,及pasv mode需要40100~40200。
firewall-cmd --zone=public --permanent --add-port=990/tcp
firewall-cmd --zone=public --permanent --add-port=40100-40200/tcp
firewall-cmd --reload
4. 完成設定後請記得重開 vsftpd 進行測是。FTP client 可以觀察到 SSL 或 TLS 的轉換訊息。
5. 增加僅能存取自己local目錄的安全限制:
通常為了安全起見,會僅允許使用者存取自己的local目錄以下的東西。
chroot_local_user=YES
增加此項設定後,登入時,client可能會遇到錯誤訊息:
' 500 OOPS: chroot '
來自於 SELINUX (Security-Enhanced Linux)的限制,需要做一下設定:
使用getsebool 查看限制:
getsebool -a | grep ftp
通常 CentOS7 需要設定:
setsebool -P ftpd_full_access on
較早的linux 版本:
setsebool -P ftp_home_dir 1
接著可以登入後,可能會出現下面的錯誤訊息:
'500 OOPS: vsftpd: refusing to run with writable root inside chroot()'
請在 vsftpd.conf 增加
allow_writeable_chroot=YES
6. 其他情況:
如果遇到較為舊版的 client需要支援的情況,可以開啟一些SSL & TLS的支援協定:
ssl_sslv2=NO
ssl_sslv3=NO
ssl_tlsv1=NO
ssl_tlsv1_1=NO
centos7 架設 vsftpd (基本設定)
接續前一篇基礎架設後,此處說明一些基本設定:
預設安裝完畢,可以在 /etc/vsftpd 下找到 vsftpd 相關的設定檔。
其中最主要的設定檔就是 vsftpd.conf,介紹下面幾個參數:
是否允許 anonymous 帳號登入?
anonymous_enable=YES
是否允許本機帳號登入(linux 的 user)?
local_enable=NO
最大傳輸速度(上傳 與 下載必須設定相同)。單位是 Bytes,預設0表示無限制。
local_max_rate=0
最多同時連線數(包含登入連線及資料傳輸線)
max_clients=2000
每個IP最多同時連線數(包含登入連線及資料傳輸線)
max_per_ip=50
來源IP限制。可以編輯 /etc/hosts.allow 與 /etc/hosts.deny 來設定允許登入的來源IP。
tcp_wrappers=ON
其中 /etc/hosts.allow 與 /etc/hosts.deny 的寫法例如:
vsftpd : 192.168.*.*
一般而言,如果是提供本機使用者可以透過FTP進行檔案傳輸,僅會調整下面設定:
anonymous_enable=NO
local_enable=YES
但仍然建議應該開啟 SSL 傳輸相關設定,避免帳號、密碼在傳輸過程中被盜取。
(請參考 ftps 與 pasv mode)
預設安裝完畢,可以在 /etc/vsftpd 下找到 vsftpd 相關的設定檔。
其中最主要的設定檔就是 vsftpd.conf,介紹下面幾個參數:
是否允許 anonymous 帳號登入?
anonymous_enable=YES
是否允許本機帳號登入(linux 的 user)?
local_enable=NO
最大傳輸速度(上傳 與 下載必須設定相同)。單位是 Bytes,預設0表示無限制。
local_max_rate=0
最多同時連線數(包含登入連線及資料傳輸線)
max_clients=2000
每個IP最多同時連線數(包含登入連線及資料傳輸線)
max_per_ip=50
來源IP限制。可以編輯 /etc/hosts.allow 與 /etc/hosts.deny 來設定允許登入的來源IP。
tcp_wrappers=ON
其中 /etc/hosts.allow 與 /etc/hosts.deny 的寫法例如:
vsftpd : 192.168.*.*
一般而言,如果是提供本機使用者可以透過FTP進行檔案傳輸,僅會調整下面設定:
anonymous_enable=NO
local_enable=YES
但仍然建議應該開啟 SSL 傳輸相關設定,避免帳號、密碼在傳輸過程中被盜取。
(請參考 ftps 與 pasv mode)
centos7 架設 vsftpd (預設安裝)
vsftpd是linux上較為簡易的ftp server,可以快速架設,提供簡單設定與功能。
使用預設安裝的步驟如下:
1. 使用 yum 安裝
yum install vsftpd
2. 安裝後,將yum加入systemctl的管理,之後可以透過systemctl的開關。
systemctl enable vsftpd
3. 啟動vsftpd 測試
systemctl start vsftpd
如果調整設定後要重啟,可以用:
systemctl restart vsftpd
關閉則用:
systemctl stop vsftpd
4. 開啟firewall相關 port
雖然ftpd已經啟用,但通常此時firewall 仍然阻擋外部連線,需要進一步打開firewall設定。
查看firewall運作中的 zone (組態),通常是 public:
firewall-cmd --get-default-zone
查看 public 組態的內容:
firewall-cmd --zone=public --list-all
在 public 增加 ftp相關設定:
firewall-cmd --zone=public --permanent --add-service=ftp
firewall-cmd --reload
PS:firewall-cmd 的參數:
--permanent 寫入設定檔,之後啟動都會有效。
--reload 現在重新讀取設定檔,進行調整。
5. 到這一步驟,應該可以用 anonymous 登入 ftp了。
2018年12月24日 星期一
CentOS7.5 MySQL5.7 repliaction 架設
在MySQL資料庫的實用上,常常會需要考慮到備援或增加讀取流量,
其中簡易的處理方案就以replication或cluster。
以下為測試CentOS7.5環境下,建立兩台機器進行安裝MySQL5.7,
並設定某個DB replication的過程。
安裝MySQL
本次假定在兩台機器安裝,
MASTER位於192.168.0.201
SLAVE位於192.168.0.202
CentOS7.5預設的MySQL版本並非5.7,因此需要先從MySQL網站下載。
先下載最新的 noarch.rpm
但每次安裝完畢,啟動MySQL後,MySQL會產生UUID提供辨識,
紀錄在 /var/lib/mysql/auto.cnf,
複製VM的方式會使兩個MySQL擁有相同的UUID,造成衝突。
因此複製完畢後,在其中一台VM要進行調整,將auto.cnf更名,
重新啟動MySQL,讓他重新產生UUID檔案。
fireall設定調整
CentOS7已經改用firewall取代iptables。
使用firewall可以增設一組設定,不用重新啟動firewall就可以更新狀態,
避免切斷已經在進行中的連線。
以下假定要增加一組名為 trusted 的設定,開放讓192.168.0.202機器連接本機的MySQL:
設定完畢後可以查看目前的狀態:
MASTER設定
MASTER的MySQL上要建立一個帳號讓SLAVE可以讀取資料變動,
需要的權限包含 FILE、REPLICATION:
編輯 /etc/my.cnf,加入下面的設定
PS:若有多個DB要同步,每個要獨立寫一行binlog-do-db。
完成後,若要查看MASTER的狀態,
可在MySQL下使用show master status\G,可以查看目前master設定是否運作正確。
SLAVE設定
同樣先建立要同步的testdb,
然後調整設定檔,設定要同步的db。
編輯/etc/my.cnf,加入以下設定
PS:同樣,多個DB要分寫多行replicate-do-db。
接著設定往MASTER連線,以root登入MySQL,下達下面的命令
如果其中有一項為No,都表示有問題。
可以直接查看MySQL的log檔,較容易找出問題所在。
MySQL的log位於:/var/log/mysqld.log
其中簡易的處理方案就以replication或cluster。
以下為測試CentOS7.5環境下,建立兩台機器進行安裝MySQL5.7,
並設定某個DB replication的過程。
安裝MySQL
本次假定在兩台機器安裝,
MASTER位於192.168.0.201
SLAVE位於192.168.0.202
CentOS7.5預設的MySQL版本並非5.7,因此需要先從MySQL網站下載。
先下載最新的 noarch.rpm
wget http://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpmyum安裝搜尋路徑
yum localinstall mysql80-community-release-el7-1.noarch.rpm查看目前yum關於MySQL的設定
yum repolist all | grep mysql啟用MySQL5.7並關閉MySQL8.0(預設安裝最新版本)
yum-config-manager --disable mysql80-community yum-config-manager --enable mysql57-community設定完畢後開始安裝MySQL server
yum install mysql-community-server
啟動MySQL
systemctl start mysqld.servicePS:因為本次測試要兩台機器,所以安裝完畢後直接複製VM。
但每次安裝完畢,啟動MySQL後,MySQL會產生UUID提供辨識,
紀錄在 /var/lib/mysql/auto.cnf,
複製VM的方式會使兩個MySQL擁有相同的UUID,造成衝突。
因此複製完畢後,在其中一台VM要進行調整,將auto.cnf更名,
重新啟動MySQL,讓他重新產生UUID檔案。
mv /var/lib/mysql/auto.cnf /var/lib/mysql/auto.cnf.bak
fireall設定調整
CentOS7已經改用firewall取代iptables。
使用firewall可以增設一組設定,不用重新啟動firewall就可以更新狀態,
避免切斷已經在進行中的連線。
以下假定要增加一組名為 trusted 的設定,開放讓192.168.0.202機器連接本機的MySQL:
firewall-cmd --permanent --zone=trusted --add-source=192.168.0.202 firewall-cmd --permanent --zone=trusted --add-port=3306/tcp firewall-cmd --reload其中 --permanent 表示寫入設定檔,下次開機也會有效。
設定完畢後可以查看目前的狀態:
firewall-cmd --zone=trusted --list-all firewall-cmd --zone=trusted --list-all --permanent
MASTER設定
MASTER的MySQL上要建立一個帳號讓SLAVE可以讀取資料變動,
需要的權限包含 FILE、REPLICATION:
GRANT FILE ON *.* TO ‘backup’@'192.168.0.202' IDENTIFIED BY ‘1234’; GRANT REPLICATION SLAVE ON *.* TO ‘backup’@'192.168.0.202' IDENTIFIED BY ‘1234’;建立要同步的DB
create database testdb;打開binary log的輸出,讓SLAVE可以讀取。
編輯 /etc/my.cnf,加入下面的設定
server-id=1 log-bin binlog-do-db=testdb重新啟動MySQL server
PS:若有多個DB要同步,每個要獨立寫一行binlog-do-db。
完成後,若要查看MASTER的狀態,
可在MySQL下使用show master status\G,可以查看目前master設定是否運作正確。
SLAVE設定
同樣先建立要同步的testdb,
然後調整設定檔,設定要同步的db。
編輯/etc/my.cnf,加入以下設定
server-id=2 replicate-do-db=testdb重新啟動MySQL server
PS:同樣,多個DB要分寫多行replicate-do-db。
接著設定往MASTER連線,以root登入MySQL,下達下面的命令
change master to master_host='192.168.0.201', master_user='backup', master_password='1234'; start slave io_thread; start slave;完成後查看SLAVE的狀態,使用 show slave status\G
Slave_IO_Running: Yes Slave_SQL_Running: Yes上面兩個項目要確認為Yes才是成功運作,
如果其中有一項為No,都表示有問題。
可以直接查看MySQL的log檔,較容易找出問題所在。
MySQL的log位於:/var/log/mysqld.log
2018年11月28日 星期三
MySQL 使用格狀分割index加速2D座標半徑搜尋
2D座標的半徑搜尋,常用於尋找附近區域內的地點。這類兩個維度範圍搜尋,對於關聯式資料庫而言,一直都是個瓶頸。index僅能提供一個維度的範圍搜尋,第二個維度就無效果了。為了解決搜尋速度的問題,目前最常見的方式就是將資料用網格分割,在半徑跨越的網格內搜尋的目標,加快速度。以下使用兩個大小不同的網格來測試搜尋的速度。
2018年11月27日 星期二
檢查process並執行程式 (windows排程)
在windows環境下,有時候我們會希望使用排程定時檢查某些程式是否在運作,如果沒有運作,則執行啟動。
以下以Notepad++為例,示範如何檢查是否運作,使用排程自動執行。
以下以Notepad++為例,示範如何檢查是否運作,使用排程自動執行。
訂閱:
文章 (Atom)