上一篇"CentOS上安裝memcached"已經安裝好及設定好Memcached
在單一台主機上已經能利用Memcached做第三方的資料存取
但是如果要利用Memcached做SSO(Single sign-on)單一登入機制
還需要在Apache做額外的設定(有要用到此功能的web server都需要設定)
設定步驟如下
1.先將SERVER1和SERVER2設定相同Domain HostName
hostname [ServerName].[DomainName]
2.設定/etc/php.ini
開啟/etc/php.ini
vi /etc/php.ini
修改以下值(原本的設定可在最前面用;做註解)
session.save_handler = memcached
session.save_path="[Memcached IP]:11211"
session.cookie_domain=.[DomainName]
存檔
以下用兩個測試程式做測試
一、利用Memcached做資料相互存取
SERVER1 TestCode
memcache_put.php
//Server1存入值給Server2讀取
$memcache = new Memcache(); //宣告一個Memcache
$memcache->connect('23.101.8.62', 11211); //連線到Memcache主機
$memcache->set('server1_date', 'Memcache test OK!', 0, 60); //將值存入命名為server1_date
$result = $memcache->get('server1_date'); //取出存入的值
echo $result;
?>
SERVER2 TestCode
memcache_get.php
//Server2只讀取Server1存入的資料
$memcache = new Memcache(); //宣告一個Memcache
$memcache->connect('23.101.8.62', 11211) or die ("Could not connect"); //連線到Memcache主機
$result = $memcache->get('server1_date'); //取出值
echo $result;
?>
二、利用Memcached存取Session
SERVER1 TestCode
session_put.php
//-----初始化設定Start
//如果無權限修改php.ini請做以下初始化設定
$host = '[Memcached IP]';
$port = '11211';
$session_save_path = "tcp://$host:$port?persistent=1&weight;=2&timeout;=2&retry;_interval=10, ,tcp://$host:$port";
ini_set('session.save_handler', 'memcache');
ini_set('session.save_path', $session_save_path);
ini_set("session.cookie_domain", ".[DomainName]");
//------初始化設定End
session_start();
session_register('login_name');
$_SESSION['login_name'] = 'HI I am server01';
print_r($_SESSION);
?>
SERVER2 TestCode
session_get.php
//-----初始化設定Start
//如果無權限修改php.ini請做以下初始化設定
$host = '[Memcached IP]';
$port = '11211';
$session_save_path = "tcp://$host:$port?persistent=1&weight;=2&timeout;=2&retry;_interval=10, ,tcp://$host:$port";
ini_set('session.save_handler', 'memcache');
ini_set('session.save_path', $session_save_path);
ini_set("session.cookie_domain", ".[DomainName]");
//------初始化設定End
session_start();
echo $_SESSION['login_name'];
?>
透過測試就可以完整的利用Memcached做多網站間的資料交換
不過因為Memcached是有開特別的port以及會做到第三方資料的存取
所以之後還需要真對Memcached server上的主機做更詳細的防火牆設定
EX:限定固定的web server IP才能存取
無差別亂抄筆記
IT學習旅途上的點滴記錄,Linux和MS
2015年3月29日 星期日
[Linux]CentOS上安裝memcached
Memcached是一個linux下的快取服務機制
根據Wiki介紹
=======================
memcached是一套分布式的快取系統,由LiveJournal的Brad Fitzpatrick開發,但目前被許多網站使用。
8.重新啟動httpd
二、直接呼叫memcached的功能使用
$memcache = new Memcache();
$memcache->connect('127.0.0.1', 11211) or die ("Could not connect");
$memcache->set('mdata', 'Memcache test OK', 0, 60);
$result = $memcache->get('mdata');
unset($memcache);
echo $result;
?>
清除memcached的暫存
nc localhost 11211
flush_all
exit
如果第二程式執行時出現Permission denied
是因為SELinux這個安全機制把權限鎖住了
就用以下指令解開應該就可以了
setenforce 0
監控 memcache 的工具:
1.memcached-tool 查看memcached的資源
memcached-tool 192.168.1.216:11211 stats
完成
根據Wiki介紹
=======================
memcached是一套分布式的快取系統,由LiveJournal的Brad Fitzpatrick開發,但目前被許多網站使用。
這是一套開放原始碼軟體,以BSD license授權釋出。
memcached缺乏認證以及安全管制,這代表應該將memcached伺服器放置在防火牆後。
memcached的API使用三十二位元的循環冗餘校驗(CRC-32)計算鍵值後,將資料分散在不同的機器上。當表格滿了以後,接下來新增的資料會以LRU機制替換掉。由於memcached通常只是當作快取系統使用,所以使用memcached的應用程式在寫回較慢的系統時(像是後端的資料庫)需要額外的程式碼更新memcached內的資料。
還有安裝支援php的extension <<這個套件是要在執行PHP的主機上安裝memcached缺乏認證以及安全管制,這代表應該將memcached伺服器放置在防火牆後。
memcached的API使用三十二位元的循環冗餘校驗(CRC-32)計算鍵值後,將資料分散在不同的機器上。當表格滿了以後,接下來新增的資料會以LRU機制替換掉。由於memcached通常只是當作快取系統使用,所以使用memcached的應用程式在寫回較慢的系統時(像是後端的資料庫)需要額外的程式碼更新memcached內的資料。
=======================
雖然這個memcache服務是在linux上開發的,但是目前也有提供給win環境IIS上支援
但IIS的機制上還需要再找時間研究,目前先在linux上做架設動作
OS:CentOS 6.3 + LAMP
WebServer:Apache
測試語言:PHP
透過SSH登入後直接先透過指令安裝memcached
1.
yum install memcached
yum install php-pecl-memcache
然後就會開始安裝所需要的套件了
2.安裝完成後檢查一下php上是否已經支援memcached模組
php -m|grep memcache
如果成功會顯示memcache
3.設定memcached服務開機時自動啟動
chkconfig memcached on
4.檢查memcached是否啟動正常
chkconfig --list memcached
成功的話2~5項會顯示on
5.檢查一下是否正確的Listen,預設會是port 11211
netstat -ntulp | grep 11211
6.memcached設定檔的位置會在/etc/sysconfig/memcached
可以透過vi去開啟看一下
vi /etc/sysconfig/memcached
PORT="11211" #設定memcached使用的port
USER="memcache" #配置啟動時使用的用戶
MAXCONN="1024" #最大連接數
CACHESIZE="64" #最大使用暫存,預設是64M
OPTIONS="" #其它設定,EX:有兩台以上的memcached主機就要設定這個。
(OPTIONS目前用不到之後再研究有什麼其他設定)
7.設定好後就可以啟動Memcached
service memcached start
服務其他指令
*service memcached start 啟動
*service memcached stop 停止
*service memcached restart 重新啟動
*service memcached status 啟動狀態
**service可替代成/etc/init.d/**
service httpd restart
####目前memcached server都已經設定完成了#####
再來就是利用PHP測試
用PHP要使用memcached有兩種做法
一、修改php.ini讓session預設就放在memcached上
二、要用memcached功能時才call function
先做第一種方式
1.修改php.ini
vi /etc/php.ini
2.找到以下兩行,建議將原本的session.save_handler和session.save_path 在最前面加上;
然後再輸入下面的設定
session.save_handler = memcached
session.save_path = "127.0.0.1:11211"
或
session.save_path="tcp://127.0.0.1:11211?persistent=1&weight=1&timeout=1&retry_interval=15
或
session.save_path="tcp://127.0.0.1:11211?persistent=1&weight=1&timeout=1&retry_interval=15
*save_path是指定session存放的位置因為這裡是在同一台server上所以是127.0.0.1
3.然後在往下找display_errors,並改如下設定
display_errors = on
*display_errors = on是當PHP程式執行有錯誤時是否顯示在畫面上
*這功能可以幫忙等下測試的除錯,但網站正式上線記得要關掉
4.離開php.ini設定
ESC >> : >> wq!
5.重新啟動httpd
service httpd restart
以上就是設定php預設session存放位置
接下來放二支程式,查看設定並測試memcached怎麼做
Apache預設的網站目錄為/var/www/html
一、查看PHP當下所支援的模組
1.新增一個檔案phpinfo.php
vi /var/www/html/phpinfo.php
2.輸入以下程式
phpinfo();
?>
3.存檔離開
ESC >> : >> wq!
4.開啟網頁檢視模組是否有成功
*有改session存放的位置多看第二張圖
二、直接呼叫memcached的功能使用
$memcache = new Memcache();
$memcache->connect('127.0.0.1', 11211) or die ("Could not connect");
$memcache->set('mdata', 'Memcache test OK', 0, 60);
$result = $memcache->get('mdata');
unset($memcache);
echo $result;
?>
清除memcached的暫存
nc localhost 11211
flush_all
exit
如果第二程式執行時出現Permission denied
是因為SELinux這個安全機制把權限鎖住了
就用以下指令解開應該就可以了
setenforce 0
監控 memcache 的工具:
1.memcached-tool 查看memcached的資源
memcached-tool 192.168.1.216:11211 stats
完成
2015年3月26日 星期四
[Linux]使用yum install發生錯誤
初次在安裝gcc的時候發生了一個詭異的錯誤
指令是yum install gcc
但是執行了一下最後跳出兩個錯誤造成gcc安裝失敗
後來知道原來是這個部份因為kernel的版本跟即將要安裝gcc其他程式所需要的最低版本不一樣
也就是當下OS的kernel版本太過老舊必須要先更新kernel head才能正確安裝gcc
所以需要先執行以下指令以更新kernel head版本
yum install kernel-headers --disableexcludes=all
更新後
yum install gcc
安裝gcc檔案也就成功了
這個問題可能不只會發生在gcc這個程式上,其他程式如果有kernel版本需求也會有機會發生
在此筆記一下
[Linux]SELinux安全性的關閉
一開始在設定FTP Server時發生了不論權限如何設定
都無法上傳檔案到設定的資料夾內
總是出現錯誤訊息
553 Could not create file
或者
550 SITE CHMOD command failed.
經過多番查找資料,原來在CentOS內預設是有SELinux這個機制並且預設還是開啟的
鳥哥的網站這篇也有介紹到這個功能 http://linux.vbird.org/linux_basic/0440processcontrol.php#selinux
以及Wiki上的介紹
http://en.wikipedia.org/wiki/Security-Enhanced_Linux
SELinux全名是 Security Enhanced Linux是一個針對檔案權限限制更嚴謹的模組......
詳細介紹就此省略了
紀錄一下
關掉 SELinux
vi /etc/sysconfig/selinux
將 SELINUX=enforcing 改成 SELINUX=disabled
存檔
重新開機
完成!!
總是出現錯誤訊息
553 Could not create file
或者
550 SITE CHMOD command failed.
經過多番查找資料,原來在CentOS內預設是有SELinux這個機制並且預設還是開啟的
鳥哥的網站這篇也有介紹到這個功能 http://linux.vbird.org/linux_basic/0440processcontrol.php#selinux
以及Wiki上的介紹
http://en.wikipedia.org/wiki/Security-Enhanced_Linux
SELinux全名是 Security Enhanced Linux是一個針對檔案權限限制更嚴謹的模組......
詳細介紹就此省略了
紀錄一下
關掉 SELinux
vi /etc/sysconfig/selinux
將 SELINUX=enforcing 改成 SELINUX=disabled
存檔
重新開機
完成!!
2015年3月25日 星期三
[Azure]Azure VM設定Public IP (PIP)
最近在研究MS Azure上的VM
利用Azure裡面market提供的CentOS with LAMP的映像檔建立了一個vm在上面
因為此映像檔建立後就自動將LAMP給安裝好了
但是要上下傳資料的FTP卻沒有安裝
這個部分需要自己手動將vsftpd給安裝上去
當FTP Server安裝設定完成後發現被動模式pasv的部份無法透過Azure VM預設給的IP從外部連線進去
錯誤紀錄是連線都正常但是最後會卡住造成連線失敗
經過上MSDN官網查了相關文件說明後發現這篇
https://msdn.microsoft.com/zh-tw/library/azure/dn690118.aspx
這個PIP全名是Instance-level Public IP Address (PIP)
用途是
"執行個體層級公用 IP (PIP) 是您可以直接指派給 VM 的 IP 位址,而不是指派給您 VM 所在之雲端服務的 IP 位址"
然後還有這張架構圖
原來是這個
這篇文件裡面還說明了如何在VM上面建立一個PIP
不過目前PIP的設定還沒在網頁的操作介面上有看到此設定
文件也指出需要透過Azure PowerShell下指令的方式去處理
==============
Azure PowerShell工具可以透過以下連結下載,同時支援多種OS
http://azure.microsoft.com/zh-tw/downloads/
的命令列工具
==============
建立的方式有幾個情況
1.在新建VM的時候就加入了PIP
2.在現有的VM上加入PIP
->
*關於參數-ServiceName後面要接什麼名稱,可以先下這個指令,在照列出來的資訊輸入
利用Azure裡面market提供的CentOS with LAMP的映像檔建立了一個vm在上面
因為此映像檔建立後就自動將LAMP給安裝好了
但是要上下傳資料的FTP卻沒有安裝
這個部分需要自己手動將vsftpd給安裝上去
當FTP Server安裝設定完成後發現被動模式pasv的部份無法透過Azure VM預設給的IP從外部連線進去
錯誤紀錄是連線都正常但是最後會卡住造成連線失敗
經過上MSDN官網查了相關文件說明後發現這篇
https://msdn.microsoft.com/zh-tw/library/azure/dn690118.aspx
這個PIP全名是Instance-level Public IP Address (PIP)
用途是
"執行個體層級公用 IP (PIP) 是您可以直接指派給 VM 的 IP 位址,而不是指派給您 VM 所在之雲端服務的 IP 位址"
然後還有這張架構圖
原來是這個
這篇文件裡面還說明了如何在VM上面建立一個PIP
不過目前PIP的設定還沒在網頁的操作介面上有看到此設定
文件也指出需要透過Azure PowerShell下指令的方式去處理
==============
Azure PowerShell工具可以透過以下連結下載,同時支援多種OS
http://azure.microsoft.com/zh-tw/downloads/
的命令列工具
==============
建立的方式有幾個情況
1.在新建VM的時候就加入了PIP
New-AzureVMConfig -Name "FTPInstance" -InstanceSize Small -ImageName $images[50].ImageName | Add-AzureProvisioningConfig -Windows -AdminUsername narayan -Password abcd123 | Set-AzurePublicIP -PublicIPName "ftpip" | New-AzureVM -ServiceName "FTPinAzure" -Location "North Central US"
2.在現有的VM上加入PIP
->
Get-AzureVM -ServiceName FTPInAzure -Name FTPInstance | Set-AzurePublicIP -PublicIPName ftpip | Update-AzureVM
*關於參數-ServiceName後面要接什麼名稱,可以先下這個指令,在照列出來的資訊輸入
Get-AzureVM
建立完成後要查看VM的PIP資訊可以透過以下指令Get-AzureRole -ServiceName FTPInAzure -Slot Production -InstanceDetails
如果要移除VM的PIP,透過以下指令
設定完成後再回Azure的操作畫面去增加pasv需要用到的port就可以正常連線了Get-AzureVM -ServiceName FTPInAzure -Name FTPInstance | Remove-AzurePublicIP | Update-AzureVM
[Linux]CentOS vsftp 增加安全性設定
使用root登入是有一定程度的安全性問題,因為FTP傳輸時預設並沒有加密
上網查到有以下幾個方法能增加FTP存取時的安全性
1.限制FTP使用者
如果要新增adminuser這個帳號而且將目錄固定在/var/www/html/adminuser/user_html這個目錄中,但無法使用SSH登錄系統
指令
adduser -d /var/www/html/adminuser/user_html -g ftp -s /sbin/nologin adminuser
passwd adminuser
輸入登入時的密碼
如果要使只有adminuser可以切換目錄
要修改vsftpd.conf並加上以下設定
指令
vi /etc/vsftpd/vsftpd.conf
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
然後
vi /etc/vsftpd/chroot_list
把adminuser這個帳號加入到此文件內存檔就完成了
更進一步的限制:限制連線來源IP
設定只允許 192.168.0.0/24 的主機能登入 FTP Server
請修改 /etc/hosts.allow
vi /etc/hosts.allow
在裡面加入
vsftpd: 192.168.0.x
以及修改 /etc/hosts.deny
vi /etc/hosts.deny
在裡面加入
vsftpd: ALL
上網查到有以下幾個方法能增加FTP存取時的安全性
1.限制FTP使用者
如果要新增adminuser這個帳號而且將目錄固定在/var/www/html/adminuser/user_html這個目錄中,但無法使用SSH登錄系統
指令
adduser -d /var/www/html/adminuser/user_html -g ftp -s /sbin/nologin adminuser
passwd adminuser
輸入登入時的密碼
如果要使只有adminuser可以切換目錄
要修改vsftpd.conf並加上以下設定
指令
vi /etc/vsftpd/vsftpd.conf
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
然後
vi /etc/vsftpd/chroot_list
把adminuser這個帳號加入到此文件內存檔就完成了
更進一步的限制:限制連線來源IP
設定只允許 192.168.0.0/24 的主機能登入 FTP Server
請修改 /etc/hosts.allow
vi /etc/hosts.allow
在裡面加入
vsftpd: 192.168.0.x
以及修改 /etc/hosts.deny
vi /etc/hosts.deny
在裡面加入
vsftpd: ALL
[Linux]CentOS vsftp登入時發生錯誤 [500 OOPS:cannot change directory]
剛設定好的FTP Server在登入時可能會出現這樣的錯誤
500 OOPS:cannot change directory
完成
500 OOPS:cannot change directory
這個問題原因找了好久也檢查過/home目錄下確實是有[AccountName]目錄的
後來發現原來是SELinux 的問題,又加上有開防火牆
解決的方法有兩個
1.關閉 SELinux
vi /etc/selinux/config
在裡面把
SELINUX=enforcing
改成
SELINUX=disabled
重新開機即可
reboot
****但是不建議使用這種方式****
2.查看SELinux設定中有關於ftp的權限設定
sestatus -b | grep ftp
會出現以下訊息
allow_ftpd_anon_write off
allow_ftpd_full_access off
allow_ftpd_use_cifs off
allow_ftpd_use_nfs off
ftp_home_dir off
ftpd_connect_db off
ftpd_use_fusefs off
ftpd_use_passive_mode off
httpd_enable_ftp_server off
tftp_anon_write off
tftp_use_cifs off
tftp_use_nfs off
發現ftp_home_dir預設是off的,所以把ftp_home_dir打開
指令
setsebool -P ftp_home_dir on
如果要給user有完整的存取權限另外要再把allow_ftpd_full_acces給打開
setsebool -P allow_ftpd_full_access on
重新啟動FTP Server
service vsftpd restart
訂閱:
文章 (Atom)