跳到主要內容

Linux操作不求人- 肆章之壹 - 伺服器架設(I) - SSH(SFTP、SCP)、FTP伺服器與遠端連線

@ ssh, sftp 
    通常安裝好 CentOS6_x64 作業系統後,sshd, ssh daemon 的服務功能是預設開啟的,如筆者的前面篇章所述,預設的 iptables 防火牆設定,亦是開啟讓 ssh 的連線是可通過的,不僅可以連出,也可以被連入。若要確認是否有安裝 sshd 套件以及在啟動時的 runlevel 2 3 5 是否有被載入,可以使用以下指令搜尋:
$   rpm  -qa  |   grep  openssh    #  ssh 與 sshd 連線服務皆由 openssh 應用軟體提供。
或使用以下
$   rpm  -qa  |   grep  ssh        #  比用關鍵字 openssh 搜尋更模糊,故符合的條件更多。

     如圖4-1可以查詢到有關於 openssh-client 與 openssh-server 的套件, openssh-server 便是提供連入服務的軟體,openssh-client 為提供可以連出的工具。若無以上套件,則使用 yum install openssh ,則可下載安裝。



















(圖4-1)

再接著輸入以下指令查詢到 sshd 這個服務,是否有再開機程序內載入,如圖4-2
$ chkconfig | grep ssh  # 查詢 sshd 是否有於 開機 runlevel 啟動
再利用以下指令,來查詢是否防火牆有允許連線
$ iptables  -L  |  grep ssh   # 出現如圖4-2 允許通過之條件










(圖4-2)

     接下來,我們要先來調整 sshd 的設定檔,利用 vim  /etc/sshd/sshd_conf,如圖4-3-1與4-3-2。因為設定檔參數很多,筆者為方便說明,將 /etc/sshd/sshd_conf 檔案內容分成兩張圖。







































(圖4-3-1)







































(圖4-3-2)

     首先,筆者強烈建議設定前,先閱讀 /etc/ssh/sshd_config 檔案內容前幾行的說明,如之前我們做任何的服務設定前,務必閱讀說明文字。說明告訴我們,若要更動預設參數設定,可以移除符號 # ,並更改後面的參數值。而我們要改動的參數主要為以下幾項:
Port   22
/*  一般 ssh 預設的 port 為 22,所以〝你知道、我知道、獨眼龍也知道〞,故建議可以更換預設 port ,以防被有惡意的人方便嘗試連線。   */
故我們暫將埠號 22 換成 5978,如以下設定即可,往後說明之設定參數名稱與設定值亦由此方式表示:
Port  5978

變更埠號後,請注意 SELinux 的限制問題,可以使用 SELinux 管理工具 semanage 來管理,若無 semanage 指令可使用,可以用 yum -y install policycoreutils-python 來重新安裝。接著利用指令(如圖4-4)
$  semanage  port  -l  |  grep ssh    
/* 列出受到 SELinux 管理開放的 port,並搜尋關於 ssh 的字串行  */

$  semanage port  -a  -t  ssh_port_t  -p  tcp  5978
/* 參數 -a 為增加,  -t 為目標物件名稱,我們要加到剛搜尋到的名稱  ssh_port_t  ,參數 -p 為 protocol,我們要開啟 tcp,埠號為 5978。 */








(圖4-4)

亦記得要加入 iptables 允許
$  iptables   -A   INPUT   -i   eth0   -p   tcp  --dport  5978   -j   ACCEPT
$  iptables-save

連接埠號更換後,利用 ssh 連線,需注意要輸入埠號的問題,若是用預設埠號 22 無需特別輸入埠號,如指令 ssh -2 -p 5978  newuser@192.168.100.100,亦可以調整連出主機的 /etc/ssh/ssh_config 的內容,或利用加入環境變數設定 alias ssh 'ssh -2 -p 5978' 來取代,或 加入設定檔的內容。

如機器上有好幾個 IP,可修改以下參數:
ListenAddress 0.0.0.0
設定為
ListenAddress  192.168.100.200
讓 sshd 僅在 192.168.100.200 這一個 IP 上開放服務

Protocol 2 
/* 此部分維持預設,僅利用較安全的 sshd 2 版協定連線,連出主機端亦對應輸入 ssh  -2  */

若要調整登入提示等待時間,以增強安全性效果,約 41行附近有一個
LoginGraceTime 2m
可修改為
LoginGraceTime 1m
主要將連線登入提示輸入帳號與密碼時間,縮短至 1 分鐘。

再接著有關帳號安全性問題
PermitRootLogin yes
預設為可允許 root 遠端登入,雖然對管理者很方便,但對入侵系統的人,也很方便。故請改為 no,並多加上一參數 AllowUsers ,可指定只有那些帳號可用遠端 ssh 登入,如以下:
PermitRootLogin  no     #  禁止直接用 root 登入,防止惡意人士用 root 試密碼登入

AllowUsers  newuser     #  很常用的重要設定

或設定僅允許哪些 group,藉以縮小可使用範圍,可輸入以下
AllowGroups  misgroup

若要防止機器人程式不斷嘗試錯誤,來試圖非法登入,可更改以下參數
MaxAuthTries 6
更改改為
MaxAuthTries 3
讓登入只能嘗試 3 次錯誤就踢掉程序,重新登入,以防暴力法方式來試帳號與密碼。

MaxSessions 10
也可以設定為每個來源連線IP,能同時開啟 sessions 的最大次數,可改少,亦可維持預設。

若要使用無密碼登入,請開啟 49-50 行附近的
PubkeyAuthentication yes
AuthorizedKeysFile  .ssh/authorized_keys  
/*  此為提供 sshd 服務端的公鑰檔案名稱,搭配無密碼ssh登入  */

     無密碼登入方式,可先在自己的家目錄下 cd  ~ ,利用指令 ssh-keygen -t rsa -b 2048 來產生長度 2048bits 的 RSA演算法成對金鑰檔 (或在較新版本的 openssh 內, ssh-keygen -t ecdsa -b 256 產生長度 256bits 的 ECC DSA演算法的成對金鑰檔 ,如圖4-5,這裡有篇  RSA 與 ECDSA 之比較,https://koclab.cs.ucsb.edu/teaching/ecc/project/2015Projects/Levy.pdf ),並設定檔案位置為 ~/.ssh/id_rsa,此時 ssh-keygen 會建立身分檔 ~/.ssh/id_rsa 與一個公鑰(public key) ~/.ssh/rd_rsa.pub, 進入產生畫面後,皆輸入鍵盤Enter鍵即可。接著再利用 scp 將公鑰複製到提供 sshd 連線的遠端電腦主機,並將公鑰名稱改為 ~/.ssh/authorized_key( sshd_config 內預設為主 ),若遠端主機內無 .ssh 資料夾,請利用 ssh 192.168.100.200 'mkdir ~/.ssh' 新增。接著利用指令如下
$  scp  ~/.sshid_rsa.pub 192.168.100.200:~/.ssh/authorized_key 

$  scp  ~/.sshid_ecdsa.pub 192.168.100.200:~/.ssh/authorized_key

為了安全性,請將 .ssh 資料夾設定成僅擁有的使用者可讀寫,如 chmod 600 ~/.ssh 。故提供連線的遠端電腦主機,帳號家目錄下 ~/.ssh/ 一定要包含連出端電腦主機產生的 ~/.ssh/id_*.pub 的公鑰資訊,與身分檔 ~/.ssh/id_* 成對。如圖4-5為利用 ecdsa 演算法產生公鑰

























(圖4-5)

     若公開金鑰配對有成功後,會如圖4-6,筆者利用無密碼ssh,直接利用金鑰登入真實的遠端主機,此方式在內部網路的叢集式電腦管理,相當實用。例如,可以直接 ssh 192.168.100.200  ! ls -al (符號 ! 一般指執行遠端主機的命令 ),直接對著 192.168.100.200 下指令,再搭配 shell script ,是不是就可以同時對著好幾台主機操作與管理呢?除此之外,若再搭配上 NFS 的網路硬碟系統,將發送端主機的磁碟給接收端主機們掛載,是不是就能利用這些接收端主機的計算資源,來幫忙處理發送端主機,需要較多計算資源的工作?聰明的讀者,可以用心想想,這可以有哪些好功用可以讓多主機管理或操作更方便。





















(圖4-6)


緊接著,若要使用遠端主機 X11 之 X Windows ,請在約 110行 附近設定,如下
X11Forwarding  yes    # 預設為開啟

若想在低速網路環境中傳輸較大的封包,可利用約 119 行的 Compression 參數值,在連出的主機端,亦可搭配 ssh -C (但 man ssh 說明中,僅適合低速網路環境使用,如modem,在較高速的網路環境,反而會降低速度) 來連線。 修改 Compression 參數值如下:
Compression delayed
改為
Compression yes

若需使用 X Windows 連線至遠端工作的機器,再連出端可以利用指令 ssh -Y 192.168.100.200
( 參數 -Y 為直接允許 forwarding, 或是 ssh -X ),連線過去後,就可以執行 X Windows 的程式,如 /usr/bin/gnome-terminal & ( 使用符號 & 為將gnome-terminal視窗顯示後,放入背景程序執行,故原本執行指令的 terminal,可以再執行下個指令 )

若想踢掉可能會發生使用者不登出,造成殭屍(zombie)連線的 idle,則可以使用
ClientAliveInterval   0
ClientAliveCountMax  3
可改為
ClientAliveInterval   600
ClientAliveCountMax   3
偵測每 600 秒 1 次,最多 3 次,則剔除此 ssh 登入之 session,也就是半小時內沒有活動,就剔除。(類似提高翻桌率嗎XD)

接下來設定 chroot jail ( 限制可進出操作的資料夾範圍 )
ChrootDirectory  none  /* 啟用 ssh 的 chroot jail 可能會出現 無法使用 /bin /sbin /usr/bin /usr/sbin 的問題,故設定限制進出操作資料夾的範圍,要相當小心  */
除此之外,可以設定禁止使用者跳躍至的目錄路徑,也可保持預設值 none (無限制),若要針對個人使用者與群組進行sftp 的 chroot jail,並限制僅能使用 sftp 登入,可使用以下設定:

Match User jailuser   # jailuser 為要限制的帳號名稱
   ChrootDirectory /home
   X11Forwarding no
   AllowTCPForwarding no
   PermitTTY no
   ForceCommand internal-sftp

Match Group jailgroup   # jailgroup 為要限制的帳號名稱
   ChrootDirectory /home
   X11Forwarding no
   AllowTCPForwarding no
   PermitTTY no
   ForceCommand internal-sftp

/*  請記得要先用 useradd 跟 groupadd 創造 jailuser 跟 jailgroup 來分開正常ssh登入的帳號與群組,ChrootDirector 的資料夾,擁有者與群組皆需要換成 root也就是說,若您ChrootDirecotory 的資料夾為/first/second ,則需要使用指令 chown root:root /first/second。但下一層如為 /first/second/third,則需使用指令chown jailuser:jailgroup /first/second/third ,來變更可上傳寫入權限。 */


-------------------------------------------------------------------

若要開啟 selinux chroot 可寫入 ${HOME},則需設定
$ setsebool -P ssh_chroot_rw_homedirs=1
$ setsebool -P selinuxuser_use_ssh_chroot=1

若為 ssh chroot jail,則需要複製 /dev/random /usr/lib,/usr/local,/usr/bin,/bin
,/etc/等內容至限制的${HOME}路徑下,否則會有指令操作上的錯誤。

接著將 jailuser 的 shell 改為 /usr/libexec/openssh/sftp-server,並將 /usr/libexec/openssh/sftp-server加入/etc/shells 內的 shell 清單中,如下
$ usermod -s /usr/libexec/openssh/sftp-server jailuser
$ echo '/usr/libexec/openssh/sftp-server' >> /etc/shells

若要使用 sftp 服務,請注意以下約 133行設定是否有開啟:
Subsystem  sftp   /usr/libexec/openssh/sftp-server

設定後記得儲存離開,並利用以下指令重啟動 
$    service sshd restart

並利用指令  netstat 如以下
$   netstat  -tlnp   |   grep   5978  # 查詢是否有聽 tcp 的埠號 5978 的服務,如果沒調整,預設是22

若欲連出 sftp 的電腦主機,可打上指令
$ sftp 192.168.100.200 -P 5978     # 如果埠號為 5978
進入 sftp> 介面後,再以輸入鍵盤 ? ,來查詢可用的 sftp 指令,大致類似 ftp。需要利用圖形連線 sftp,或 Windows下連線 sftp 的使用者,亦可利用 FileZilla Client ,可從 https://filezilla-project.org/ 下載,圖形部分有圖有真相,筆者就不在介紹 FileZilla 操作方式,再請讀者自行下載後玩一玩,應該很快能上手。



@vsftp
     緊接著,要跟讀者說明如何架設 CentOS6_x64 下的 ftp 伺服器軟體,CentOS6_x64下之 ftp 伺服器軟體預設為 vsftpd ( https://security.appspot.com/vsftpd.html )。如同之前說明過的軟體安裝步驟,先利用 rpm 搜尋是否有安裝,若無,再利用 yum install vsftpd 安裝,安裝過程便不再贅述。我們直接從 vsftpd 的設定檔 /etc/vsftpd/vsftpd.conf 來說明設定,請使用 vim 來開啟並編輯,如圖4-7-1與圖4-7-2,亦因為設定檔太長,筆者分成兩個檔案說明:







































(圖 4-7-1)







































(圖 4-7-2)

     設定參數值的方式類似於 sshd_config,檔案內的說明文件十分很詳細,設定前可參考,筆者直接提出要設定的參數,由上而下來說明:
anonymous_enable = NO
/* 若 vsftpd 僅允許用帳號密碼登入,則設定為 NO,否則僅需要輸入 anonymous@mail 的 email 帳號便能直接登入 */

write_enable = NO
/*  若僅分享下載,而無上傳或允許編輯檔案與資料夾,請將此設定值設定為 NO,否則就會有被更改檔案的風險 */

anon_upload_enable = NO
anon_mkdir_write_enable = NO
/* 當 write_enable 為 YES,也請將匿名使用者上傳設定為 NO, 若 write_enable 為 NO,則此亦無作用,無須變更 */

dirmessage_enable = NO
/* 若有製作 .message 檔案,便顯示檔案內容。  */

chroot_local_user =YES
chroot_list_enable = YES
chroot_list_file=/etc/vsftpd/chroot_list
/*  上述三項建立 chroot 清單, chroot 可以防止使用者離開家目錄,而其他資料夾做不安全的操作,而此時,建立在 /etc/vsfptd/chroot_list 清單內的使用者帳號,是可以允許跳躍至其他資料夾 。若是對於大多數使用者帳號允許跳躍其他資料夾,則將 chroot_local_user=NO, 而這狀態下, /etc/vsftpd/chroot_list 清單內的使用者帳號,便成為不能跳躍的使用者帳號 ,且 chroot_list_file 需搭配 chroot_list_enable 參數才有作用。 */

userlist_enable = YES
userlist_deny = YES
userlist_file=/etc/vsftpd/userlist
/*  此 userlist 開頭之設定參數,為設定禁止連入的使用者帳號,在 /etc/vsftpd/userlist 之內的使用者帳號,是被禁止登入的。   */

listen_address = 192.168.100.200
/*  若多主機 IP,則僅允許 192.168.100.200 此 IP 可供 vsftpd 連線  */

max_clients = 5
max_per_ip = 2
/*  上方設定為給定最多機器,與每個IP可以連線的 session 數,為了頻寬的控管  */

idle_session_timeout = 600
/*  10分鐘內皆無使用指令動作,就踢出使用者  */

除此之外,還可以設定使用者使用頻寬
local_max_rate = 131072        # 單位  byte/second

針對個別使用者,可利用設定檔
user_config_dir=/etc/vsftpd/mycfg

假如有一個使用者名稱為 ftpuser,則將 local_max_rate 設定值寫入檔案 /etc/vsftpd/mycfg/ftpuser

接著此時若啟動 vsftpd來使用,無論在帳號與密碼傳輸,或是資料的傳輸之間,都是無加密的狀態,有心人僅需要透過監控軟體( packet sniffer,如https://www.wireshark.org/,http://sectools.org/tag/sniffers/),便可得知帳號密碼與您在操作的資料,監視您的所有動作,為了不讓自己變成〝楚門的世界〞,故我們須利用 openssl 來加密登入與傳輸資料
,可加入如以下:
ssl_enable = YES   #此時已滿足 over ssl explicit 條件
allow_anon_ssl = YES
force_local_data_ssl = YES
force_local_logins_ssl = YES
ssl_tlsv1 = YES      #  使用 tls 1.X版
ssl_sslv2 = NO       #  ssl 2.0設成  YES 啟用亦可,但安全性較 tls 低
ssl_sslv3 = NO       #  ssl 3.0設成  YES 啟用亦可,但安全性較 tls 低
/* 以上為 ssl 加密在 ftp 傳輸的啟用,我們利用 tls,關於 ssl/tls 可參考 wikipedia 說明https://en.wikipedia.org/wiki/Transport_Layer_Security  */

rsa_cert_file = /etc/vsftpd/myftp.pem    #  若要使用 implicit ssl ,請設定憑證的路徑位置並加上
implicit_ssl=YES

若要啟用 PASV 模式 ( https://en.wikipedia.org/wiki/File_Transfer_Protocol,https://winscp.net/eng/docs/ftp_modes,https://wiki.filezilla-project.org/Network_Configuration )
則設定如以下
pasv_enable = YES
pasv_min_port = 10010
pasv_max_port = 10020  /*   僅開放 10 個動態 port 供 pasv 模式連線  */
最後設定完,儲存離開後,要記得防火牆也要開啟允許此連接埠範圍,如下
$  iptables -I INPUT -p tcp --dport 10010:10020 -j ACCEPT 
$ setsebool -P ftpd_use_passive_mode 1  #開啟selinux的允許

除此之外,vsftpd 也可以自訂連接埠號,如以下:
listen_port = 990
ftp_data_port = 989   # 舊名稱 connect_from_port_20,ftp 資料傳輸埠
/* 一般 ftp port 為 21,資料傳輸埠 20,ftp over ssl/tls 的 ftps (https://en.wikipedia.org/wiki/FTPS)預設連結埠號 990,資料傳輸埠號 989,也可改成如連結埠號 9527,傳輸埠號 10978,但請記得 防火牆設定 也需要跟著換 */

以上做完設定後,儲存 /etc/vsftpd.conf 檔案後離開。接著再針對上面給的 .pem 憑證路徑,利用 openssl 產生 x509 憑證證書(https://en.wikipedia.org/wiki/X.509),再轉換成私密金鑰 .pem,並利用 RSA 加密,
$  openssl  req -x509 -nodes -days 3650  -newkey  rsa:2048  -keyout /etc/vsftpd/myftp.key  -out \ /etc/vsftpd/myftp.pem
/*  符號 \ 為接續下行,建立可以使用10年(3650天)的憑證,一般都建議每次設定一年(365天),一樣產生 RSA 2048bits 長度的密碼  */

或利用以下方法,只要確定指向的路徑與參數設定可配合即可:
$  cd /etc/pki/tls/certs
$  make myftp.pem
$  cp myftp.pem /etc/vsftpd/
/*   以上會詢問輸入憑證所需的資訊 ,就依所知的資訊輸入,未知就預設,讀者選擇習慣使用的產生器就好   */
緊接著
$  mv myftp.pem /etc/vsftpd/     #  移動憑證給 vsftpd 用
$  chmod go-rxw /etc/vsftpd/myftp.pem   #  修改憑證權限或 chmod 600

亦記得要加入 iptables 允許,如果僅需使用 port 21的讀者,請自行改 --dport 後方的值。
$  iptables   -A   INPUT   -i   eth0   -p   tcp  --dport  990  -j   ACCEPT
$  iptables-save

接著同樣需考慮解除 SELinux 對連線埠的封鎖
$semanage port  -l | grep ftp

$ semanage port -a -t ftp_port_t -p tcp 990

要解除 SELinux 對 home 目錄的 ftp 存取
$  setsebool  -P ftp_home_dir 1
$  setsebool  -P allow_ftpd_full_access 1


設定後記得儲存離開,並利用以下指令重啟動 
$   service vsftpd restart

再加入開機時的啟動,確保重開機可以自動化執行
$   chkconfig --level 235 vsftpd on

並利用指令  netstat 查詢是否有成功啟用,如以下
$   netstat  -tlnp   |   grep   990   # 查詢是否有聽 tcp 的埠號 990 的服務

     在CentOS6_x64 的環境下設定伺服器軟體的開啟,請記得設定檔的參數設定完,重啟前要考慮防火牆 iptables 的規則是否有允許,以及使用指令 getsebool -a 來看 SELinux 的權限是否有開啟,如圖4-8 ,因參數太多太長,筆者僅節錄第一頁設定,請讀者在利用 grep 來搜尋跟服務名稱有關的設定值。SELinux 除了設定此 boolean 值外,還要考慮到資料夾的寫入,如 ls -lZ  ~,-Z 可以列出 SELinux 的控制內容,如圖4-9,再使用 chcon -t public_content_rw_t  ~/  ,可允許上傳寫入自己的家目錄資料夾。雖然 SELinux 會給定很多限制,但若讀者遇到了參數設定都沒錯,卻無法使用服務時,再想到關於 SELinux 的限制開放,應該就是解開問題的關鍵了,故筆者真的不建議關閉 SELinux 的安全防護功能。






































(圖4-8)

     圖4-9,利用指令 semanage fcontext -l | grep ~/,來查詢在自己家目錄下的 SELinux 安全性文件設定值。其他設定與利用 lftp 文字介面登入方式,讀者可以參考網頁 https://access.redhat.com/solutions/3436 的詳細說明,或其他可設定之參數可參考 http://vsftpd.beasts.org/vsftpd_conf.html,筆者就不再多加贅述。



























(圖4-9)

     基本上來說,架設伺服器軟體,不外乎反覆考慮以下幾點:
1. Whom,可以使用服務的帳號,帳號的上傳與下載權限的規劃。
2. Where,可以連入的 IP 位置或電腦名稱要的拒絕與允許設定,以及連接埠的更改或預設。
3. Which,連入後可到哪裡寫資料夾或檔案,每個資料夾或檔案的權限考量。
4. What System Load,機器可以承受多少 session 連線數,多少網路頻寬使用,並考量單一帳號可使用量,與全部帳號總量
5. How Network Security,連線的加密,無論在登入的帳號密碼,或是連線傳輸的資料上,皆須加上編碼,如 SSL/TLS的加密
     無論是 sshd 或 vsftpd 這些類固定式的參數設定方式,我們亦可利用 script ,製作一鍵設定懶人包,僅利用 指令 sed 取代參數值 與 指令 echo " " >> ,來加入新增的參數名稱與值,就可以一次設定好並啟動,若有機會,筆者會在後面附錄篇幅探討,讀者亦可以自行先試試,應該是很好玩的設定經驗。
     下一節,筆者要介紹利用 CentOS6_x64 架設收發 email 的伺服器軟體,往後可以搭配 php 等 CGI 網頁程式設計工具,來做到利用網頁平台收發 email 機制,可行動化收發 email,與使用網頁電子郵件 Webmail 軟體(如 roundcube,https://roundcube.net/ )架設中小企業的 Webmail。



If you have any feedback or question, please go to my forum to discuss.

這個網誌中的熱門文章

Linux 操作不求人系列 - 貳章之貳 - Shell Script 程式設計(II) - BASH 與 TCSH / CSH

     在上章,我們介紹很多bash shell指令的應用方式,並讓它們變成 script,在這章此節,我們要承襲上節,繼續討論 bash shell script 的其它程式設計概念,與讓程式可重複使用的方法,就是利用函式(function)。      首先,我們來創作一個判斷是否為閏年的函數,script的名稱就取為 check_year.sh ,請自行將其設為可執行。程式碼如圖2-6,為了解說方便,筆者利用指令 nl check_year.sh 將程式碼包含行數印出(圖2-7),其他除顏色外,都與圖2-6同。以下 export 宣告環境變數,自訂變數無需加宣告保留字。(2021.10.07更正export說明,以下自訂變數宣告請直接去除export開頭) (圖2-6) (圖2-7)        圖2-7第2-6行,與之前的範例相似,皆有防堵參數個數輸入錯誤的判斷。第7-11行為接著判斷輸入的年分,是否為真的正整數,也就是大於零的數字。其中第7行可解釋為,利用正規表示式搜尋 $2 字串值得頭至尾部的字元,皆由 0-9 組成,若有,則為真(True)會進入 if 內的陳述執行, 但我們想要的,應該是僅要字串其中一字元為非正整數,便進入if 內的警告並跳出 。故,筆者在判斷式前多加一個 ! ,代表著當字元完全是正整數時,就不要執行  if  內陳述,而直接往第12行執行,但若其中有一個字元為非正整數,則會進入 if 內印出錯誤訊息並跳出 Script 。在此例使用者輸入非正整數等字串(如:12ab、cde、1a1b),便會出現錯誤訊息"Error Value",並跳出 Script 。而第8行的判斷式,效果跟第7行相同,但只能在BASH 3.0才能支援,故筆者故意保留,讓讀者可以學到另一種表示方式。         第12-28行,為宣告一個函式 leapyr () ,在 BASH Script內若要使用含式,必須在使用之前先建立函式的功能,如函式建立在第12-28行,則若要呼叫使用(Call)函式,則必須在第29行之後才能呼叫,並且可重複呼叫。第13行為定義函式呼叫時,一定會有一個外部參數, 此外部參數非該 Script 的外部參數 ,而是由程式撰寫者給入,故在此無設定防呆判斷。第14-

Linux操作不求人 - 伍章之陸 - Intel PXE 與利用 tftp + anaconda kickstart來自動部署系統

     現代的個人電腦與筆電爲了節能省碳,往往皆省略了光碟機的設置。雖然說 USB隨身碟亦可應用於安裝作業系統,但若遇到機房的大量機器需安裝之問題,亦不適合此種用光碟片或隨身碟逐臺安裝的方式,或是需準備多片光碟或隨身碟。故爲了大量安裝與部屬 Linux作業系統的機器,我們便可透過具有PXE功能之網路卡(https://en.wikipedia.org/wiki/Preboot_Execution_Environment),其所具備的網路開機的能力,來作透過網路方式來安裝與大量部署 CentOS Linux作業系統。其原理 wikipedia  的PXE說明,都解釋得很清楚,筆者不需要再 " 掉書包 ",在開發者大神面前班門弄斧,我們就直接來做做看。      首先,我們一樣透過 yum來安裝所需的 tftp伺服器軟體(http://www.jounin.net/tftpd32.html),利用PXE支援 tftp 透過 udp 埠號 69連線,來提供檔案的能力,給利用 PXE開機後安裝作業系統的機器,圖5-60   (圖5-60) 接著修改 tftp 設定檔 /etc/xinetd.d/tftp,如圖5-61,請記得 disable  要改為 no (圖5-61)      若要修改 server_args 參數為自訂的 tftp root 路徑,記得要變更 SELinux 的權限設定,如要改為/tftpboot,則使用指令 chcon  來調整,如以下: $ mkdir /tftpboot $ chcon  --reference /var/lib/tftpboot  /tftpboot 接著將 xinetd 與 tftp 加入開機啟動,並重啟動 xinetd,如下: $ chkconfig  --level  235  xinetd on $ chkconfig  --level  235  tftp  on $ service xinetd restart 開放防火牆通行 $ iptables -A INPUT -p udp --dport 69 -j ACCEPT $ service iptables re