1. 程式人生 > >我的Linux運維筆記

我的Linux運維筆記

最近幫實驗室裝了兩臺伺服器,計算用的伺服器放在內網,通過一臺堡壘機與外界相連。碰到很多小問題,在這裡記錄一下。

組建內網

這一部分沒有太多好說的,堡壘機需要有兩塊網絡卡,一塊對外一塊對內,內網伺服器一塊就夠了。組網的時候根據情況可以手工指定IP也可以DHCP。如果內網只有一臺機器的話可以找一根網線直連兩臺機器,如果機器多的話還是買個路由器吧,最好找高階一點的,可定製的功能多一點,否則會很坑。

埠轉發

從外面訪問內網伺服器的時候有三種方法:

  1. 最簡單的辦法是先ssh到堡壘機,再ssh到內網的伺服器。這樣做的問題是需要同時在堡壘機和內網伺服器上建立賬號,而有的時候我們並不希望使用者訪問堡壘機,堡壘機對使用者應該是透明的。
  2. 第二種辦法是ssh隧道,我們可以通過堡壘機建立隧道,把外面的請求轉發到內網。但建立隧道本身也比較麻煩。這篇部落格對於ssh隧道講得非常清楚。
  3. 最方便解決辦法就是埠轉發:將堡壘機上的埠與內網伺服器需要訪問的埠建立對映關係,例如將堡壘機的1234埠對映到內網伺服器的22埠,這時ssh -p 1234 <bastion server IP>實際登入到的就是內網伺服器。埠轉發的本質是把堡壘機當成了路由器。這篇部落格對於埠對映講得非常清楚。

時間校準

一個與世隔絕的伺服器時間往往不準,有時候是設定問題,有時候是BIOS上的時鐘本來就不準。想要校準的話,最方便的當然是手工設定,但這樣無法保證精度,而且過一段時間可能又會產生偏差。比較好的辦法是用NTP線上校準時間,但是內網無法訪問公共NTP伺服器。這時可以把堡壘機配置成一個NTP server,然後讓內網的伺服器都跟堡壘機校準。

當然我們也可以給內網伺服器指定一個閘道器(堡壘機),然後開啟堡壘機的轉發功能,這樣內網伺服器就可以直接上網了。但有時候我們並不想這麼做。

使用者管理

使用者管理涉及到批量新增/刪除使用者,使用者分組,許可權控制,磁碟限額,限時登入等等。

批量新增/刪除使用者

下面是我寫的一個小指令碼,需要讀取一個記載了使用者名稱和登入密碼的文字檔案,然後依次建立每一個使用者。

#!/bin/bash                                                                     

filename=$1                                                                     

cat $filename
| while read line do # cut string arr=($line) username=${arr[0]} password=${arr[1]} # add user useradd -g student -p `openssl passwd -crypt $password` $username chmod 700 /home/${username} # copy certain files to setup develop environment cp -r -f /home/vasys/home/students/example/* /home/${username}/ cp -f /home/vasys/.bashrc /home/${username}/ # change owner chown -R ${username}:student /home/${username} # disk quota xfs_quota -x -c "limit bsoft=40G bhard=50G ${username}" /home done

需要注意,通過useradd-p引數指定密碼時候一定要給出crypt加密後的密碼,不是原始密碼。在CentOS 7上,crypt加密後的密碼可以由openssl passwd -crypt $password生成,$password代表原始密碼。mkpasswd這個命令似乎也可以。

限制使用者磁碟空間

在前面的腳本里也看到了,可以通過quota命令限制每個使用者(或每個使用者組)使用的磁碟空間。但如果你的檔案系統是xfs,就需要用xfs_quota。為了支援磁碟限額,首先核心要足夠新(Linux 2.4以上),其次分割槽掛載的時候需要加上usrquotagrpquota兩個引數(在/etc/fstab裡)。

限制使用者登入時間

我們的伺服器是教學用的,學生可以通過預約獲得使用許可權。我們需要控制學生只能在預約的時間段登入,這個時間段之外,不僅不能登入,如果有這個使用者的程序還要殺掉。限制使用者登入時間有很多辦法,例如寫一個crontab,預約時間結束就用passwd或者usermod把使用者賬戶置為鎖定狀態,到下一次預約時間再解鎖。但這樣相當於一次預約要寫兩行crontab,對於我這種懶人很不友好。

我選擇的辦法是用PAM裡的時間模組,這種辦法首先要編輯/etc/security/time.conf,在裡面寫入允許(或禁止)使用者登入的時間,然後再編輯/etc/pam.d/loginauth條目後加入account required pam_time.so。這種辦法有一個侷限,只能指定周幾,不能指定具體的日期。不過我們的預約正好也是以周為單位,所以無所謂了。

殺死某個使用者的所有程序

有兩個方便的命令killallpkill。當然也可以用psgrepkill等命令組合起來,實現更復雜的功能。