本文轉載自大神博客:
linux下自建ssh堡壘機:http://www.361way.com/linux-diy-fort-machine/3135.html
使用google Authenticator增強ssh: http://www.361way.com/google-authenticator-ssh/2186.html html
開源web終端ssh解決方案-gateone簡介:http://itnihao.blog.51cto.com/1741976/1311506 linux
1、安裝相關包git
一、安裝相關包
yum -y install wget gcc make pam-devel libpng-develweb
二、安裝qrencodechrome
wget http://fukuchi.org/works/qrencode/qrencode-3.4.1.tar.gz
tar zxf qrencode-3.4.1.tar.gz
cd qrencode-3.4.1
./configure --prefix=/usr && make && make install後端
該軟件爲非必須包,其主要用於在終端下生成二維碼用。
三、google authenticator PAM插件安裝
該插件有兩種安裝方式,一種是經過下載tar.gz包安裝,一種是經過git下載安裝。
tar.gz包安裝:瀏覽器
wget http://google-authenticator.googlecode.com/files/libpam-google-authenticator-1.0-source.tar.bz2
tar jxf libpam-google-authenticator-1.0-source.tar.bz2
cd libpam-google-authenticator-1.0
make && make install安全
git下載安裝:bash
git clone https://code.google.com/p/google-authenticator/
cd google-authenticator/libpam/
make install服務器
2、使用google Authenticator增強ssh:
ssh自己是一個很是安全的認證鏈接方式。不過因爲人過等方面的緣由,不免會形成密碼的泄露。針對這種問題咱們不妨給ssh再加一把鎖。固然,增長這層鎖的方式有不少種。例如:knockd、S/KEY、OPIE/OPTW、Two-factor authentication等(以上列舉的幾種方式中可能互相包含,有興趣的能夠去維基百科上查下,進而細分下)。而今天講到的Google Authenticator就屬於Two-factor authentication的表明。
一、配置google-authenticator
安裝完成後會在/lib64/security/目錄生成pam_google_authenticator.so文件,若是是32位系統會在/lib/security/目錄生成。除此以外,系統還會多在/usr/local/bin目錄生成一個google-authenticator可執行文件,運行該命令。
[root@localhost /]# google-authenticator
Do you want authentication tokens to be time-based (y/n) y
https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/root@localhost.localdomain%3Fsecret%3DIO4SZL7YYHOTFNQJ
Your new secret key is: IO4SZL7YYHOTFNQJ
Your verification code is 236731
Your emergency scratch codes are:
98144901
30891929
79811882
84230327
53670228
Do you want me to update your "/root/.google_authenticator" file (y/n) y
Do you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n) y
By default, tokens are good for 30 seconds and in order to compensate for
possible time-skew between the client and the server, we allow an extra
token before and after the current time. If you experience problems with poor
time synchronization, you can increase the window from its default
size of 1:30min to about 4min. Do you want to do so (y/n) n
If the computer that you are logging into isn't hardened against brute-force
login attempts, you can enable rate-limiting for the authentication module.
By default, this limits attackers to no more than 3 login attempts every 30s.
Do you want to enable rate-limiting (y/n) y
注:
1.一、若是安裝了qrencode包,會在出現google的連接後出一個二維碼圖標。方便手持設備掃描。固然,沒裝該包,能夠打開https開頭的url,打開也是一個二維碼圖片,同qrencode在終端下生成的是同樣的。
1.二、"Your emergency scratch codes are:"下面的五個碼用於在取不到或錯的驗證碼有錯時,用於應急用的。不過每一個只能用一次,不能重複使用。
1.三、第四處選擇項是因爲選擇是否開啓時間容錯。若是客戶端設備具備很好的同時間服務器同步功能,建議此處選擇n。若是客戶端設備(手機、ipad等)不具備很好的同ntp時間同步的功能,能夠設爲y —— 即開啓時間容錯。
二、ssh調用及客戶端配置
2.一、sshd服務配置
按以上方式配置完成之後,是沒有程序去調用的。想要ssh調用,還須要在pam.d認證上進行配置。打開 /etc/pam.d/sshd 文件在第一行添加
auth required pam_google_authenticator.so
再打開 /etc/ssh/sshd_config 文件
ChallengeResponseAuthentication no
把上面配置改爲
ChallengeResponseAuthentication yes
service ssh restart重啓ssh服務生效。
2.二、客戶端配置
獲取30秒一次的動態碼的客戶端是瀏覽器(僅支持chrome、firefox)、Android設備、蘋果IOS設備、Blackberry、WP手持設備。各自程序的下載地址爲:
chrome google-authenticator插件
firefox google-authenticator插件
手機應用下載地址 (該手機連接提示支持symbian系統,不過經本人手機測試,發現應用安裝完之後帳戶add沒用反應)
賬戶名能夠隨意添寫,安全key即爲剛剛運行google-authenticator命令後生成的,add增長完成後。就會每過30秒新生成一個驗證碼。此時能夠經過另一臺主機鏈接的方式以下:
[root@localhost ~]# ssh root@192.168.10.14
Verification code:
Password:
Last login: Fri Jan 4 16:27:57 2013 from 192.168.10.11
[root@localhost ~]#
注:
一、若是命使用SecureCRT客戶端登陸時,須要在 鏈接——屬性——鏈接——ssh2——"鑑權/authenicaion" 中將 "鍵盤交互/keyboard Interactive" 調到第一位。否則鏈接會出錯。
二、以上安全配置對於ssh密鑰認證方式進行的登陸無效——即在pam配置中增長上面的配置後,經過密鑰認證時不會要求輸入驗證碼 。
3、 linux下自建ssh堡壘機
一、原理及原則
原理如上圖所示,原則以下:
1、全部主機的鏈接都經過/etc/hosts.deny和/etc/hosts.allow控制只容許兩臺堡壘機鏈接(冗餘考慮,避免一旦壞了全部主機都沒法鏈接,這裏圖上只畫了一個)。
二、全部主機關閉密碼認證方式,只容許key認證。但切換用戶可使用su - 用戶名 的方式進行切換。
三、角色控制,雖然鏈接到堡壘機上的各用戶名密碼不一樣,但後端全部的服務器按角色進行區分,如運維人員到後端服務器統一成oam用戶、開發人員統一成dev用戶。
四、堡壘機使用用戶名+google authenticator+密碼的方式認證。登陸用戶在堡壘機上的權限是受chroot限制的。
二、ssh服務配置
在/etc/pam.d/sshd中首行添加
auth required pam_google_authenticator.so
在/etc/ssh/sshd_config中修改:
ChallengeResponseAuthentication 將no改成yes
UsePAM 將no改成yes
三、chroot配置
修改/etc/ssh/sshd_config:
ChrootDirectory /var/chroot
建立模擬系統環境:
mkdir /var/chroot/
cd /var/chroot/
mkdir {bin,dev,lib,lib64,etc,home}
建立塊設備,並賦予全部用戶可執行權限,null,zero,tty這三個模擬設備須要全部用戶可寫:
mknod dev/null c 1 3
mknod dev/zero c 1 5
mknod dev/random c 1 8
mknod dev/urandom c 1 9
mknod dev/tty c 5 0
chmod -R 755 /var/chroot/
chmod 0666 dev/{null,zero,tty}
注:這裏塊設備是在/var/chroot/dev目錄下建立的,上面的dev前面是沒加/的。mknod的用法也能夠參看百度百科上的介紹。
複製lib庫文件到chroot環境下:
#!/bin/bash
ldd /bin/bash /bin/ls /bin/cp /bin/mkdir /bin/mv /bin/rm /bin/rmdir|awk '{print $1}'|grep "/lib64" >> liblist
ldd /bin/bash /bin/ls /bin/cp /bin/mkdir /bin/mv /bin/rm /bin/rmdir|awk '{print $3}'|grep "/lib64" >> liblist
for libfile in `sort liblist|uniq`
do
cp -p $libfile /var/chroot/lib64/
done
特別注意的是還須要增長libnss庫文件的支持,否則ssh登陸時會報「You don't exist, go away!」的錯誤,操做命令以下:
cp /lib64/libnss_* lib64/
以上操做都是64位系統下進行的,若是是32系統,直接使用lib目錄下的庫文件。
最後就是連接sh到bash,操做以下:
cd /var/chroot/bin
ln -s bash sh
四、建立用戶及密鑰文件
建立用戶及passwd、group文件
useradd yang
passwd yang --abc123
grep ^yang /etc/passwd > /var/chroot/etc/passwd
grep ^yang /etc/group > /var/chroot/etc/group
建立用戶chroot家目錄
cd /var/chroot
mkdir home/yang
chown -R yang:yang home/yang
chmod 700 -R home/*
建立密鑰文件
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/yang/.ssh/id_rsa):/var/chroot/home/yang/.ssh/id_rsa
最後將生成的id_rsa.pub文件的內容傳到後端受保護機相對應用戶的.ssh/authorized_keys文件中,固然批量機器的話建議使用puppet、saltstack這類的自動化工具實現。
五、google認證
切換到相應的用戶,例如,我這裏是su - yang,執行google-authenticator命令,而後就是一路的按y,這裏再也不列出,能夠參看以前寫的增強ssh安全的文章。
注:若要讓某帳戶不使用chroot環境,能夠直接su到系統root帳戶,則須修改/etc/ssh/sshd_config配置,在文件末尾添加:
Match User 用戶名
ChrootDirectory /
六、後端服務器配置後端主機權限配置主要有如下幾個地方能夠操做6.一、只開啓KEY認證,關掉密碼認證RSAAuthentication yesPasswordAuthentication no6.二、設置hosts.allow和hosts.deny,指定容許遠程鏈接的主機IP(堡壘機IP)如:#cat /etc/hosts.allowsshd:192.168.10.#cat /etc/hosts.denyALL:ALL記住hosts.allow的規則優先級高於hosts.deny就好了6.三、設置只容許ssh鏈接的用戶(這個方法有好幾種),本步略6.四、利用chattr給幾個特定文件權限限定死,連root用戶都只讀而沒法更改,本步略6.五、將用戶操做命令記入日誌(這個對bash有效,對個別csh等無效)建立/etc/profile.d/sshlog.sh文件,內容以下:PS1="`whoami`@`hostname`:"'[$PWD]'historyUSER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`if [ "$USER_IP" = "" ]then USER_IP=`hostname`fiif [ ! -d /var/log/history ]then mkdir /var/log/history chmod 777 /var/log/historyfiif [ ! -d /var/log/history/${LOGNAME} ]then mkdir /var/log/history/${LOGNAME} chmod 700 /var/log/history/${LOGNAME}fiexport HISTSIZE=4096DT=`date +"%Y%m%d_%H%M%S"`export HISTFILE="/var/log/history/${LOGNAME}/${USER_IP}_history.$DT"chmod 600 /var/log/history/${LOGNAME}/*history* 2>/dev/null在/var/log/history目錄下,會在用戶登陸並退出後,建立與用戶名相同的目錄,而且記錄每次的登陸IP和時間,格式如:192.168.10.50_history.20130514_100547。6.六、利用/etc/sudoers命令給個別組用戶一些特定權限(圖個便利)例如:oam ALL=(ALL) NOPASSWD: /sbin/reboot, /sbin/ifconfig//oam爲能夠以root執行命令的用戶,reboot、ifconfig爲能夠執行的命令,須要完整路徑,多個命令用逗號加空格隔開