成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為Apache和SSH搭建雙因子驗證系統

譯文
安全 應用安全
如果你在運行一臺公眾可以訪問,但僅供自己使用的Web服務器,那么你該如何著手限制有人訪問你網站、搞破壞活動的風險?SSH又如何呢?SSH是更大的隱患!在如今這個環境下,有必要考慮你面臨的風險,并采取必要的措施,盡可能減小風險。

如果你在運行一臺公眾可以訪問,但僅供自己使用的Web服務器(咱們實話實說吧,如果你在閱讀本文,很有可能運行這樣一臺服務器),那么你該如何著手限制有人訪問你網站、搞破壞活動的風險?SSH又如何呢?SSH是更大的隱患!在如今這個環境下,有必要考慮你面臨的風險,并采取必要的措施,盡可能減小風險。

我在本教程中將詳細介紹具體的步驟,以便實施一套自行搭建的雙因子驗證系統,以便用于訪問你的網站和用于SSH訪問。

基礎設施和“挑戰”

運行自己的硬件可能令人討厭。你在處理風扇失效、電源失效和硬盤壞掉等各種硬件故障后,最終可能決定丟棄你在托管中心或自家臥室的機柜和硬件,毅然決然地投入彈性計算的懷抱。亞馬遜的EC2平臺就是這樣一種選擇,該平臺提供了眾多Linux版本,擁有市面上最可靠、最成熟的云平臺之一。我可不是亞馬遜的代表,但我還是要說試一試。這個產品很出色,微實例(micro instance)可以免費使用一年。

在針對本文的測試場景下,我使用了一臺運行Ubuntu 12.04 LTS的亞馬遜EC2服務器,來托管運行幾個Web應用程序。如果你使用不同的Linux版本,那么操作步驟只需稍加改動,就能滿足你的具體要求。假設這些應用程序多半僅供個人使用。要是只從辦公場所或家里訪問網站,你只要創建防火墻規則,只允許從那些IP地址訪問Web流量,就可以為網站保駕護航。捎帶提一下,這正是你確保SSH安全的做法。

不過,假設這個做法并不適合你的Web應用程序,因為你頻繁出差,出門在外時需要也能夠訪問那些應用程序,所以單單幾個防火墻規則幫不了你。另外假設,你的應用程序有自己的安全系統,但是你仍想要一層額外的安全機制。

你可以搭建一臺虛擬專用網(VPN)服務器,但你可能想讓家庭成員訪問其中一個網站,所以VPN方法行不通。

可以考慮的另一個方法是使用谷歌身份驗證器(Google Authenticator),實現真正的雙因子驗證。你當然可以選擇走這條路,但你尋求的是能自己動手做的系統,獨立的、屬于你的系統。

就跟Linux領域的許多事情一樣,只要有意愿,辦法總歸有的!結果證明,你很容易就能組建自己的雙因子驗證解決方案,并用它來控制對你的Web應用程序和SSH的訪問,同時又可以允許其他用戶偶爾訪問你的網站。

Apache驗證和授權

由于本例子中的Web服務器是Apache服務器,不妨充分利用該服務器的驗證和授權功能,要求用戶先提供一系列登錄憑證,之后你的任何網站才提供服務給用戶。

為了力求簡單,又由于你會遵守最佳實踐,只允許https流量進出你的Web服務器,不妨使用mod_auth_basic模塊用于驗證。

首先成為根用戶,在你全新安裝的Ubuntu上安裝Apache:

sudo su  
apt-get install apache2

假設你的Web應用程序在主www文檔文件夾的子文件夾中運行。這樣你只要在http服務器的根文件夾里面創建一個.htaccss文件,就可以管理你的所有網站:

vim /var/www/.htaccess

現在,不妨添加幾行,命令Apache要求驗證、哪里尋找密碼文件:

AuthType Basic 
AuthName "restricted area" 
AuthUserFile /home/ubuntu/.htpasswd 
require valid-user

這一步完成后,現在你需要更改文件的所有權,以便Apache進程能讀取文件內容:

chown www-data:www-data /var/www/.htaccess

下一步,你需要創建在.htaccess文件中參照的.htpasswd文件,并且配置其所有權,以便Web服務器能讀取該文件:

htpasswd -cb /home/ubuntu/.htpasswd jameslitton test123 
chown www-data:www-data /home/ubuntu/.htpasswd

現在,你需要命令Apache要求驗證、使用用于驗證的mod_auth_basic模塊:

vim /etc/apache2/sites-available/default-ssl

然后,你需要將AllowOverride None改成AllowOverride AuthConfig:

Service apache2 restart

現在訪問你的網站會提示輸入用戶名和密碼(見圖1)。

為Apache和SSH搭建雙因子驗證系統

圖1:來自mod_auth_basic的驗證請求

每天一次的密碼/PIN

我在這里要采用的方法是,讓你的輔助驗證密碼每天更改一次,而不是更頻繁地更改。這讓上述的mod_auth_basic方法得以奏效。我不會在此深入探討細節,但就一句話:每當密碼更改,就需要立即重新驗證,這可不是你所需要的那種行為。

假設我們采用一個六個數的數字PIN碼,在每天半夜這個時段將該PIN發送到手機上。我非常喜歡Pushover,這項服務可以從你自己的腳本和應用程序,將即時通知迅速發送到手機和平板電腦上。

為了實現這個機制,創建一個bash腳本:

vim /home/ubuntu/2fac.sh

現在,添加下面幾行:

1  #!/bin/bash
2  ppwd=`od -vAn -N4 -tu4 < /dev/urandom | tr -d '\n' | tail -c 6`
3  curl -s -F "token=id" -F "user=id" -F "message=$ppwd"
    &rarrhk;https://api.pushover.net/1/messages.json
4  htpasswd -b /home/ubuntu/.htpasswd jameslitton $ppwd
5  echo $ppwd | base64 >/home/ubuntu/.2fac

第2行生成一個隨機性的六位數PIN碼,并將其分配給一個名為ppwd的變量。第3行將PIN發送到Pushover服務,以便進而將PIN發送到你的手機。第4行用新密碼更新.htpasswd文件;最后但并非最不重要的是,第5行以一種可以恢復的方式保存PIN的副本,你在后文會有所看到。

現在,保存腳本,讓它成為可執行腳本:

chmod +x /home/ubuntu/2fac.sh

想完成該解決方案的最后一步,你只要通過計劃任務(cron),安排腳本在每天半夜運行:

crontab -e 
00 00 * * * /home/ubuntu/2fac.sh

讓它可以通過Web訪問

當然你可以不用管它,就算大功告成,但假設你沒有收到PIN碼、想要強行更改。或者可能你之前允許某人臨時訪問你的網站,但現在想強行更改密碼,確保那個人再也無法訪問網站。你總是可以使用SSH連接到服務器,并且手動運行腳本,但這太費勁了。不妨創建一個可以通過Web訪問的PHP腳本,讓它替你處理這一切。

首先,更改2fac.sh腳本的所有權,那樣你的Web服務器就能運行它:

chown www-data:www-data /home/Ubuntu/2fac.sh

現在,你需要創建一個新的文件夾來放置腳本,并創建PHP腳本本身,允許新的“密鑰”可以手動運行:

mkdir /vaw/www/twofactor
vim /var/www/twofactor/index.php

1  <?php
2  exec('/home/ubuntu/2fac.sh');
3  header('Location: );
4  ?>

由于這可以想象:由于未收到之前的密鑰,你需要強行使用一個新密鑰,就需要確保放置該腳本的那個文件夾不需要驗證。為此,你需要改動Apache配置:

vim /etc/apache2/sites-available/default-ssl

現在,在/var/www的Directory命令下面添加下面內容:

<Directory /var/www/twofactor/>
        satisfy any
</Directory>

現在不妨配置所有權、重啟Apache:

chown -R www-data:www-data /var/www/twofactor
Service apache2 restart

所以徹底考慮這點后,可以想象:Pushover服務可能完全無法使用。這會讓你面臨糟糕的情形:你無法訪問自己的網站。應該針對這種場景為緊急情況做好準備。

為此,不妨建立第二個腳本,以便獲取你PIN的副本(別忘了之前保存的.2fac文件),然后通過電子郵件發給你。在本例中,不妨使用移動運營商的電子郵件至短信網橋功能,以短信方式將信息發給你。

開始安裝mailutils,如果你之前還沒有安裝的話;務必要選擇互聯網選項:

apt-get install mailutils

現在,創建第二個腳本:

vim /home/Ubuntu/2fac2.sh

然后,添加代碼:

#!/bin/bash
ppwd=`cat /home/ubuntu/.2fac | base64 --decode`
echo " " | mail -s $ppwd
xxx5551212@vtext.com

別忘了更改文件的所有權:

chown www-data:www-data /home/ubuntu/2fac2.sh
chown www-data:www-data /home/ubuntu/.2fac

完成這一步后,現在你需要改動PHP腳本:

vim /var/www/twofactor/index.php

把第2行換成下列:

2  if (isset($_GET["sms"])) {
3    exec('/home/ubuntu/2fac2.sh');
4    } else {
5    exec('/home/ubuntu/2fac.sh');
6    }

然后,創建兩個書簽,那樣無論何時你想生成一個新的PIN,并通過Pushover發送給自己,只需點擊鏈接,就大功告成了。萬一出現Pushover服務無法使用這種小幾率情形,第二個書簽會將現有PIN的副本發送到你所選擇的電子郵件地址。

2Factor = https://www.thelittonfamily.com/twofactor/index.php 
2Factor-SMS = https://www.thelittonfamily.com/twofactor/index.php?sms=1

擴展到SSH

擴展該解決方案以涵蓋SSH其實相當簡單。關鍵在于使用sshd_config文件中不大知名的ForceCommand命令。這迫使SSH守護程序在生成終端會話之前運行腳本。

不妨從這個腳本開始:

vim /home/ubuntu/tfac-ssh.sh

現在,添加下面幾行:

1  #!/bin/bash
2  code=`cat .2fac | base64 --decode`
3  echo -ne "Enter PIN: "
4  while IFS= read -r -s -n1 pass; do
5    if [[ -z $pass ]]; then
6       echo
7       break
8    else
9       echo -n '*'
10      input+=$pass
11   fi
12 done
13 if [ $code = $input ];
14 then
15   sleep 1
16   clear
17   /bin/bash
18 else
19   sleep 1
20   curl -s -F "token=id" -F "user=id" -F "message=$input"
      &rarrhk;https://api.pushover.net/1/messages.json
21 fi

第2行將PIN裝入到一個變量。第3行至第12行提示輸入PIN,并針對每次按鍵回送一個星號。第13行將用戶輸入的PIN與PIN進行比對。如果兩者匹配,第14行至第17行就會清空屏幕,啟動bash會話。要是用戶輸入的PIN與PIN不匹配,第18行至第21行就發送通知到Pushover,那樣你知道發生了故障,然后結束會話。

不妨配置SSH守護程序以運行腳本:

vim /etc/ssh/sshd_config

現在,將下面這一行添加到文件頂部:

ForceCommand /home/ubuntu/tfac-ssh.sh

為Apache和SSH搭建雙因子驗證系統

圖2:來自SSH的雙因子驗證請求

這個方法很管用。唯一的局限在于沒有退格。如果你按錯了鍵,會話就會被終結,你就只好重新試一下。

就這樣,這是一種簡易的雙因子驗證系統,根本不需要花多大力氣;根據我的經驗,它運行起來非常可靠!

原文地址:http://www.linuxjournal.com/content/two-factor-authentication-system-apache-and-ssh

責任編輯:藍雨淚 來源: 51CTO.com
相關推薦

2019-03-24 19:16:35

FedoraSSH系統運維

2018-03-19 10:50:26

2015-07-03 08:58:14

雙因子驗證ownCloud

2013-05-03 09:44:52

2016-06-23 11:49:09

2016-08-15 10:39:36

2016-06-14 10:01:12

2013-06-18 09:54:37

微軟Windows Azu

2018-11-07 08:20:55

UbuntuDebianLinux

2019-05-07 08:15:21

2012-11-13 18:24:03

LinOTPApache2一次性密碼

2022-09-13 10:57:45

雙因子驗證釣魚攻擊

2017-06-06 13:55:22

LinuxSSHssh_scan

2022-04-01 09:00:00

Linux安全SSH

2018-10-23 15:31:12

2010-06-28 09:46:17

2010-01-15 10:02:57

CentOS5.2 A

2022-06-29 10:12:33

開源

2015-08-31 10:17:14

2012-06-11 16:37:50

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 九色 在线| 羞羞色网站 | 密乳av | 国产一级毛片精品完整视频版 | 色综合99 | 精品欧美一区二区精品久久 | 国产超碰人人爽人人做人人爱 | 一区二区三区四区在线播放 | 成人午夜免费视频 | 国产一区二区日韩 | 成人影院免费视频 | 色av一区二区三区 | 国产中文字幕网 | 日本粉嫩一区二区三区视频 | 国产中文 | 在线观看av网站永久 | 农村妇女毛片精品久久久 | 中文字幕久久精品 | 7799精品视频天天看 | 伊人久麻豆社区 | 免费看国产一级特黄aaaa大片 | 一区在线视频 | 午夜视频在线观看网址 | 欧美一区二区三区久久精品视 | 国产成人一区二区 | 中文字幕在线视频一区二区三区 | 一区二区三区国产 | 日本免费小视频 | 亚洲男人天堂2024 | 成人a视频 | 日韩av一区二区在线观看 | 中文二区 | 天啪| 欧美激情va永久在线播放 | 欧美精品在线视频 | a级免费黄色片 | 欧美日韩电影免费观看 | 免费在线一区二区 | 羞羞视频网站免费看 | 成人免费网站视频 | 日韩在线播放第一页 |