互動式登入-不要顯示登入的使用者名者

預設的登入畫面已存在帳號名稱,這樣存在著些許的風險,讓有心人士 try 你的密碼。
取消互動式登入,可以解決這樣的問題,但請不要忘了自己的使用者名稱,雖然有辦法救,可是工程是非常浩大的。

請注意!家用版,沒有本機安全性選項,因此無法使用此功能。

互動式登入啟用中


取消互動式登入





Semanage和Chcon的差異

Semanage 和 Chcon 的差異,在於 resotrecon 後的結果。
Semanage是改變該資料夾或檔案的SELinux type預設值,而Chcon是直接改變資料夾或檔案的SELinux type,在resotrecon時會套用該資料夾或檔案的SELinux type預設值。

建立 2 個資料夾:
  1. 示範 semanage 用的資料夾
  2. 示範 chcon 用的資料夾
  3. selinux context 設為 httpd_sys_content_t
建立目錄 # mkdir -p /secon/semanagerdir
# mkdir /secon/chcondir
# ll -dZ /secon/semanagerdir
 drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /secon/semanagedir/
# ll -dZ /secon/chcondir
 drwxr-xr-x. root root unconfined_u:object_r:default_t:s0 /secon/chcondir/

使用 semanage(若 semanage 無法執行,請先安裝套件 policycoreutils-python) # ll -Zd /secon/semanagedir/
 drwxr-xr-x. root root system_u:object_r:default_t:s0 /secon/semanagedir/
# semanage fcontext -a -t httpd_sys_content_t '/secon/semanagedir(/.*)?'
# restorecon -FRvv /secon/semanagedir/
 restorecon reset /secon/semanagedir context system_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0
# ll -Zd /secon/semanagedir/
 drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /secon/semanagedir/

使用 chcon # ll -Zd /secon/chcondir/
 drwxr-xr-x. root root system_u:object_r:default_t:s0 /secon/chcondir/
# chcon -t httpd_sys_content_t -R /secon/chcondir/
# ll -Zd /secon/chcondir/
 drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /secon/chcondir/
# restorecon -FRvv /secon/chcon/
 restorecon reset /secon/chcondir context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:default_t:s0
# ll -Zd /secon/chcondir/
 drwxr-xr-x. root root system_u:object_r:default_t:s0 /secon/chcondir/

安裝及移除套件-YUM(續)

如何替 repo 檔安排順序?

安裝yum優先權套件 # yum install -y yum-plugin-priorities
之後在 [repo_name] 的段區中加上: failovermethod=priority
priority=N  //N=1~99,1 優先權最高

好用小套件-@penWebMail(問題篇)

瀏覽器:IE9、Chorme22、Firefox16 

問題 1:撰寫新郵件時,信件格式無法變更成 HTML 格式。


Firefox 解決方法:Firefox 不會有這個問題

IE 解決方法:【工具】→【相容性檢視】

Chrome 解決方法:安裝套件 IE Tat Multi(Enhance),並依照紅色框內容設定。



問題 2:設定附件大小預設是 8MB,超過限制的附件雖然還是可以上傳,但寄不出去。


# vim /etc/postfix/main.cf
 message_size_limit = 26214400  // 限制 25MB(25*1024*1024=26,214,400)
如果還是寄不出去,就是你所在區網的 MTA 有限制附件大小,像台灣大學是限制 25MB。


問題 3:限制上傳附件大小,當上傳附件超過限制大小,瀏覽器會出現警示訊息。


# vim /var/www/cgi-bin/openwebmail/etc/openwebmail.conf
 attlimit 25000  // 單位是 KB


問題 4:通訊錄大小限制與匯入檔案大小限制
# vim /var/www/cgi-bin/openwebmail/etc/openwebmail.conf
 abook_maxsizeallbooks 1000000  // 通訊錄大小限制
 abook_importlimit 100000  // 匯入檔案大小限制

好用小套件-@penWebMail

透過網路介面收發信件,而且使用 yum 安裝,讓整個步驟簡單的要命,當然你要先搞定 postfix 及 dovecot server。

網路郵局 @penWebMail
官方網站:http://www.openwebmail.org/

官方網站有提供 yum 安裝流程,請參考官方安裝流程

安裝 # wget http://openwebmail.org/openwebmail/download/redhat/rpm/release/openwebmail.repo -P /etc/yum.repos.d/  //-P 是指定路徑
# yum install -y openwebmail perl-CGI
# /var/www/cgi-bin/openwebmail/openwebmail-tool.pl --init
 Please change '/var/www/cgi-bin/openwebmail/etc/dbm.conf' from  // 出現警告訊息,請修改 dbm.conf 的內容
 dbm_ext          .db
 dbmopen_ext        .db
 dbmopen_haslock      no

 to

 dbm_ext          .pag
 dbmopen_ext        none
 dbmopen_haslock      no


 And execute '/var/www/cgi-bin/openwebmail/openwebmail-tool.pl --init' again!  // 修改完成後再執行一次

 ps: If you are running openwebmail in persistent mode,
   don't forget to 'touch openwebmail*.pl', so speedycgi
   will reload all scripts, modules and conf files in --init.

# /var/www/cgi-bin/openwebmail/openwebmail-tool.pl --init
 creating db /var/www/cgi-bin/openwebmail/etc/maps/b2g ...done.
 creating db /var/www/cgi-bin/openwebmail/etc/maps/g2b ...done.
 creating db /var/www/cgi-bin/openwebmail/etc/maps/lunar ...done.

 Creating UTF-8 locales...
 langconv ar_AE.CP1256 -> ar_AE.UTF-8
 langconv ar_AE.ISO8859-6 -> ar_AE.UTF-8
 langconv bg_BG.CP1251 -> bg_BG.UTF-8
 langconv ca_ES.ISO8859-1 -> ca_ES.UTF-8
 langconv cs_CZ.ISO8859-2 -> cs_CZ.UTF-8
 ...done.

 Welcome to the OpenWebMail!
 This program is going to send a short message back to the developer,
 so we could have the idea that who is installing and how many sites are
 using this software, the content to be sent is:

 OS: Linux 2.6.32-279.11.1.el6.x86_64 x86_64
 Perl: 5.010001
 WebMail: OpenWebMail 2.53 20080123

 Send the site report?(Y/n) y
 sending report...
 Thank you.

修改@penWebMail組態檔 # vim /var/www/cgi-bin/openwebmail/etc/openwebmail.conf
 enable_spamcheck     yes
 enable_learnspam     yes
 webdisk_rootpath     /
 webdisk_lshidden     yes

# service httpd restart

使用瀏覽器登入,看到畫面很開心 XD,但登入後慘劇就發生了(登入時無法使用 root 帳密,因為預設是拒絕管理者登入)。


被 SELinux 擋住了,雖然官方文件有說明,要將 SELinux 關閉或改成 Permissive,但這樣系統的安全性就降低了


解決 SELinux 問題,引用以下網址內容 http://openwebmail.acatysmoof.com/archive/html/owm-users/owm-users.200512/msg00007.html
解決問題的指令如下: # chcon -u system_u /var/log/openwebmail.log
# chcon -t httpd_sys_script_rw_t /var/log/openwebmail.log
# chcon -t httpd_unconfined_script_exec_t /var/www/cgi-bin/openwebmail/openwebmail*

SMTP伺服器

20121101新增:收發信件實驗環境架設實作

系統組成:
  • MUA:Mail User Agent
  • MTA:Mail Transfer Agent
  • MDA:Mail Delivery Agent
  • 請注意:MUT→MTA 或 MTA→MTA 是使用 SMTP,MDA→MUA 是使用 POP3 或 IMAP。
    郵件通訊協定:
  • SMTP(Simple Mail Transport Protocol):寄信使用的協定,套件名稱postfix
  • POP3(Post Office Protocol) / IMAP(Internet Mail Application Protocol):收信使用的協定,套件名稱dovecot

  • SMTP Server

    安裝 # yum install -y postfix
    開機時啟動 # chkconfig postfix on
    啟動服務 # service postfix start
    防火牆 # iptables -I INPUT -p tcp --dport 25 -j ACCEPT
    修改postfix的組態檔 # vim /etc/postfix/main.cf
     myhostname = postfix149.example.com  //完整的FQDN
     mydomain = example.com
     myorigin = $myhostname
     inet_interfaces = all       //記得註解inet_interfaces = localhost
     mynetworks = 140.112.xxx.xxx/25, 127.0.0.0/8

    # service postfix restart

    測試服務是否開啟 # telnet 140.112.xxx.xxx 25
     Trying 140.112.xxx.xxx...
     Connected to 140.112.xxx.xxx.
     Escape character is '^]'.
     220 postfix149.example.com ESMTP Postfix

    # telnet postfix149.example.com 25
     Trying 140.112.xxx.xxx...
     Connected to postfix149.example.com.
     Escape character is '^]'.
     220 postfix149.example.com ESMTP Postfix

    寄信測試 # mail -s "postfix_test" aaa@bbb.ccc
    這是測試信
    .   //『.』是結束符號
    EOT

    安裝及移除套件-X Window System

    若 Linux 系統是最小安裝(是 mini 而不是 mini desktop)後想要安裝 X-Windows,在 yum 套件群姐安裝的協助下變的超級簡單
    當然!你要先把 yum 和網路組態搞定。

    網路設定:因為最小安裝沒有 setup 可用,因此要直接編輯 ifcfg-ethX,完成後重啟網路。
    # vi /etc/sysconfig/network-script/ifcfg-eth0  // 最小安裝沒有 vim 可以用,但操作差不多
     DEVICE="eth0"
     BOOTPROTO="dhcp"
     HWADDR="00:0C:29:16:03:D1"
     IPV6INIT="yes"
     NM_CONTROLLED="no"   // 預設為 yes
     ONBOOT="yes"  // 預設為 no
     TYPE="Ethernet"
     UUID="ad0722c8-66bb-4d03-8dd0-8be3c6cd0d8b"

    # service network restart
    # ip a

    YUM 設定請參考此篇

    查詢 X-Windows 套件
    # yum grouplist | grep --color X
     Legacy UNIX compatibility
     Legacy X Window System compatibility
     X Window System
     TeX support
     Xfce
     Xhosa Support [xh]

    安裝 X-Windows 及 GNOME Desktop
    # yum groupinstall [-y] "X Window System" [&> /dev/null]  // 中括號 [] 內容加上後(不含 [])會自動安裝並隱藏安裝訊息
    # yum groupinstall [-y] "Desktop" [&> /dev/null]
    # yum groupinstall [-y] "Chinese Support [zh]" [&> /dev/null]  // 若想要支援中文環境再安裝就好

    下次啟動使用 X-Window 介面 # vim /etc/inittab  id:5:initdefault:
    重開機
    # reboot

    Samba 伺服器-網頁式管理畫面

    套件名稱 samba-swat,通訊埠為 901
    登入網址:
    http://127.0.0.1:901/
    http://localhost:901/
    http://[::1]:901/  // IPv6

    安裝 SWAT
    # yum install -y samba-swat
    開機時啟動
    # chkconfig swat on
    登入管理畫面 http://127.0.0.1:901,帳號為 root


    從其他 IP 位址無法登入,因為 SWAT 的組態檔設定只允許 127.0.0.1 登入,註解後即可從其他 IP 位址登入
    # vim /etc/xinetd.d/swat
     service swat
     {
      disable = no
      port = 901
      socket_type = stream
      wait = no
      # only_from = 127.0.0.1
      user = root
      server = /usr/sbin/swat
      log_on_failure += USERID
     }

    # srvice xinetd restart

    Troubleshooting-FTP傳輸型態問題

    FTP 傳輸型態有 ASCII 及 Binary 等 2 種:

    • Binary :不做任何格式轉換的傳輸方式。
    • ASCII :傳輸文字檔時會做格式轉換。ASCII 傳輸型態是為了符合 Window 文字檔編碼方式,例如跳行在 linux 是『\n』,但 windows 是『\r \n』,若在 Linux 編輯好文字檔,下載到 Windows 系統並開啟,所有文字會在同一行。

    Binary 型態傳輸文字檔所產生的問題

    範例:在 Linux 系統產生一文字檔,並在 Windows 的筆記本中開啟(請勿使用 Notepad++ 等文字編輯軟體,因為軟體會自動完成跳行動作,若使用FTP軟體請先設定為Binary型態下載,因為軟體會自動辨視資料型態並予以轉換,像FileZilla)
    # vim linuxtext.txt
     linux
     哈
     哈

    # od -c linuxtext.txt
     0000000 l i n u x \n 345 223 210 \n 345 223 210 \n
     0000016

    關閉 vsftpd 的 ascii 下載功能,這樣 windows 客戶端下載時就不會自動轉換。
    # vim /etc/vsftpd/vsftpd.conf
     ascii_download_enable=NO  // 表示 FTP 伺服器只支援 Binary 型態下載

    在 Windows 的記事本中開啟 linuxtext.txt,發現內容沒有跳行。


    可使用unix2dos.x86_64及dos2unix.x86_64來轉換格式。
    # yum install -y unix2dos &> /dev/null  // 安裝時不顯示安裝流程

    # od -c linuxtext.txt
     0000000 l i n u x \n 345 223 210 \n 345 223 210 \n
     0000016

    # unix2dos linuxtext.txt
     unix2dos: converting file linuxtext.txt to DOS format ...

    # od -c linuxtext.txt
     0000000 l i n u x \r \n 345 223 210 \r \n 345 223 210 \r
     0000020 \n
     0000021

    ASCII 型態傳輸壓縮檔所產生的問題

    範例:在 Windows 系統產生副檔名為 gz 的壓縮檔(軟體 7-zip),上載時使用 FileZilla 並指定 ASCII 型態,再下載至 Windows 系統解壓縮時會發現壓縮檔毀損,因此上傳檔案時最好使用 Binary 型態。


    核心升級

    核心升級很簡單,只需要注意一個小地方,就是要等到 initramfs-$(uname -r).img 產生後再重開機,否則可能會升級失敗。

    以 CentOS6.3 為例:yum 自動安裝 # yum install -y kernel
    # ll /boot | grep --color -E 'vmlinuz|initramfs'
     -rwxr-xr-x. 1 root root 3986608 2012-06-22 20:44 vmlinuz-2.6.32-279.el6.x86_64
     -rw-r--r--. 1 root root 16363554 2012-08-26 14:33 initramfs-2.6.32-279.el6.x86_64.img

    手動安裝:
    下載 2 個檔案,安裝時有先後順序,先安裝 firmware
    1. kernel-firmware-2.6.32-279.el6.noarch.rpm
    2. kernel-2.6.32-279.el6.x86_64.rpm
    # rpm -Uvh kernel-firmware-2.6.32-279.el6.noarch.rpm  // -U 不保留舊版本
    # rpm -ivh kernel-2.6.32-279.el6.x86_64.rpm

    安裝Vmware-toos

    在 VMware Player5.0 有個好用的小功能 enter unity mode就是能讓虛機中的視窗,離開原本的環境到 Windows 畫面上,就不用再實機和虛機之間切換。

    VMware Easy Install 的安裝方式,會一併安裝 VMware-tools,但有時候會失敗。而且在應用程式選單的 Install VMware Tools...】也失效的情況下,只有使用 VMware OSPs 來安裝。

    VMware OSPs 介紹
    套件來源

    使用 YUM 安裝,因為必須設定 repo 檔
    # vim /etc/yum.repos.d/vmwaretools.repo
     [vmware]
     name=vmware
     baseurl=http://packages.vmware.com/tools/esx/5.1/rhel6/x86_64/
     enable=1

    安裝 VMware Tools
    # yum install -y vmware-tools*  // 因為不知道要安裝那些,索性全部安裝

    重開機後,『enter unity mode』功能就可以用了。

    Web 伺服器(第一版-續)-Name-based Virtual Host

    此篇文章是將Virtual Hosts的設定寫成conf組態檔,儲存在/etc/httpd/conf.d路徑下,Apache啟動時會自動載入,和C語言載入函數庫觀念相同,可減少主程式碼的長度。
    伺服器-Name-based Virtual Host

    將/etc/httpd/conf/httpd.conf的VirtualHost相關設定移動/etc/httpd/conf.d/vhost.conf 編輯 Apache 組態檔
    # vim /etc/httpd/conf.d/vhost.conf
     NameVirtualHost *:80

     <VirtualHost *:80>  // 此區塊設定可以省略
       DocumentRoot /var/www/html
       ServerName apacheserver139.example.com
     </VirtualHost>

     <VirtualHost *:80>
       DocumentRoot /var/www/vhost
       ServerName vhostapacheserver139.example.com
     </VirtualHost>

     <VirtualHost *:80>
       DocumentRoot /var/www/svhost
       ServerName secretapacheserver139.example.com
       <Directory /var/www/svhost>
          AuthName "Secret Hideout"
          AuthType basic  // 傳輸過程不加密,因此最好搭配 ssl 才安全。
          AuthUserFile /var/www/svhost/users
          require valid-user
       </Directory>
     </VirtualHost>

    重啟 Apache
    # service httpd restart

    Web 伺服器(第一版)-Name-based Virtual Host

    Web伺服器基礎文章:Web 伺服器-Apache
    本篇文章延伸主題:Web 伺服器(第一版 - 續)-Name-based Virtual Host
    20121217內容修訂

    Virtual Host 分成以下兩種
    1. Name-based Virtual Hosts:網頁伺服器架設多個網站,但屬於同一個 IP 位址
    2. IP-based Virtual Hosts:網頁伺服器架設多個網站,而每個網站都有屬於自己的 IP 位址
    範例:架設三個網站,但用同一個 IP 位址。
    Server(10.10.10.139)
    Client(10.10.10.140)

    規劃網站:
    第一個網站:
  • 路徑:/var/www/html
  • 首面內容:apacheserver139.example.com
  • # echo "apacheserver139.example.com" > /var/www/html/index.html
    第二個網站:
  • 路徑:/var/www/vhost
  • 首面內容:vhostapacheserver139.example.com
  • # mkdir /var/www/vhost
    # ll -dZ /var/www/vhost/
     drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/vhost/
    # echo "vhostapacheserver139.example.com" > /var/www/vhost/index.html
    注意:因為資料夾 vhost 是以管理者身份在路徑 /var/www 底下產生的,所以 SELinux context types 是 httpd_sys_content_t,如果是在別的路徑,就要改變 SELinux context 否則無法存取首頁。指令請看 Troubleshootingbr />

    第三個網站:需輸入帳密才能存取
  • 路徑:/var/www/svhost
  • 首面內容:secretapacheserver.example.com
  • # mkdir /var/www/svhost
    # echo "secretapacheserver139.example.com" > /var/www/vhost/private/index.html

    編輯 Apache 組態檔
    # vim /etc/httpd/conf/httpd.conf
     NameVirtualHost *:80

     <VirtualHost *:80>  // 此區塊設定可以省略
       DocumentRoot /var/www/html
       ServerName apacheserver139.example.com
     </VirtualHost>

     <VirtualHost *:80>
       DocumentRoot /var/www/vhost
       ServerName vhostapacheserver139.example.com
     </VirtualHost>

     <VirtualHost *:80>
       DocumentRoot /var/www/svhost
       ServerName secretapacheserver139.example.com
       <Directory /var/www/svhost>
          AuthName "Secret Hideout"
          AuthType basic  // 傳輸過程不加密,因此最好搭配 ssl 才安全。
          AuthUserFile /var/www/svhost/users
          require valid-user
       </Directory>
     </VirtualHost>

    測試組態檔語法是否正確 # service httpd configtest  // 使用httpd -t亦可
     Syntax OK

    為第三個網站產生私有區域的帳密 # htpasswd -cm /var/www/svhost/users privateuser
     New password: 1
     Re-type new password: 1
     Adding password for user privateuser

    重啟 Apache
    # service httpd restart

    客戶端測試

    在沒有架設 DNS 伺服器時,可以編輯 /etc/hosts 組態檔,讓瀏覽器知道網址所對應的 IP 位址
    # vim /etc/hosts
     127.0.0.1  localhost localhost.localdomain localhost4 localhost4.localdomain4
     ::1     localhost localhost.localdomain localhost6 localhost6.localdomain6
     10.10.10.139 apacheserver139.example.com
     10.10.10.139 vhostapacheserver139.example.com
     10.10.10.139 secrteapacheserver139.example.com

    第一及第二網站存取測試:



    第三網站存取測試:



    Troubleshooting

    提供 2 種變更 SELinux types 指令 # chcon -Rt httpd_sys_content_t /another_path  // 參數『R』是將路徑下的所有資料也一併變更
    # chcon -R --reference /var/www/html /another_path  // 參考 /var/www/html 的 SELinux context type

    ganglia分散式監視系統

    一套可以監視多台主機資源的軟體,以 Multicast 方式運作(如果路由器擋 Multicast,還可以改成 Unicast)
    ganglia所有版本載點

    範例:
    • Master(10.10.10.139/Linux)
    • Slave(10.10.10.140/Linux)

    Master(10.10.10.139/Linux)

    安裝 ganglia
    # yum install -y ganglia ganglia-gmetad.x86_64 ganglia-gmond.x86_64 ganglia-web.x86_64
    開機時啟動
    # chkconfig gmetad on
    # chkconfig gmond on

    修改 gmond.conf 內容
    # vim /etc/ganglia/gmond.conf
     cluster {
     name = "santana"
     owner = "unspecified"
     latlong = "unspecified"
     url = "unspecified"
     }

    啟動服務
    # service gmond start
    # service gmetad start

    重啟 Apache
    # service httpd restart
    使用 Firefox 開啟 ganglia 網頁管理畫頁,但無法存取,因為SELinux阻擋存取。

    設定SELinux
    # setsebool -P httpd_can_network_connect 1

    Slave(10.10.10.140/Linux)

    所有安裝及設定步驟與Master相同

    遠端遙控-Virtual Network Computing(VNC)

    Windows 安裝 UltraVNC
    Linux 安裝 TigerVNC

    目標:Linux 連線至 Windows


    Windows 平台設定
    安裝 UltraVNC 後,開啟 UltraVNC Server,常駐程式列會出現應用程式圖示,滑鼠右鍵點選圖示,並選擇 Admin Properties 開啟屬性頁面,在此設定認證密碼為『1』


    Linux 平台設定
    安裝 TigerVNC
    # yum install -y tigerVNC

    開啟 vncview
    # vncview&



    Samba 伺服器(第二版)

    原始文章:Samba 伺服器

    微軟的網路芳鄰檔案系統為 CIFS(Common Internet File System),若想讓 Unix-Like 主機加入微軟的網路芳鄰並共享資源時,就必須架設 Samba Server,目的就是要讓微軟的使用者在網路芳鄰中看到這台主機的 NetBIOS name,進而存取共享的資源。

    以下範例需要認證才能登入共享資料夾
    安裝 Samba Server(10.10.10.137)
    # yum install -y samba(samba-client cifs-utils) 註:
  • samba-client 套件:smbclient 指令查詢伺服器所分享的資訊,可選擇性安裝,若對自己的伺服器設定有把握的話
  • cifs-utils 套件:網路芳鄰檔案系統格式,沒有安裝就無法掛載,錯誤訊息請看 Troubleshooting
  • 以上兩個套件在客戶端都必須安裝

    開機時啟動
    # chkconfig nmb on ; chkconfig smb on
    開啟防火牆
    # iptables -I INPUT -p udp --dport 137:138 -j ACCEPT
    # iptables -I INPUT -p tcp --dport 139 -j ACCEPT
    # iptables -I INPUT -p tcp --dport 445 -j ACCEPT
    # service iptables save
    # iptables -L -n | grep --color -Ew '13[789]|445'


    設定共享資料及存取權限,組態檔 /etc/samba/smb.conf
    # groupadd -r sambauser
    # mkdir -p /sharedir/santana      // 建立共享資料夾
    # chgrp sambauser /sharedir/santana  // 變更共享資料夾群組
    # chmod 2775 /sharedir/santana    // 變更共享資料夾權限
    # chcon -t samba_share_t /sharedir/santana  // SELinux 設定
    # vim /etc/samba/smb.confg
     [global]
     workgroup = career
     security = usr        // share 不需要認證,user 需要認證
     passdb backend = tdbsam  // 檔案是 passdb.tdb
     ; hosts allow = 127. 192.168.0  // 先用分號註解。

     [santana]  // 共享目錄名稱,使用 smbclient 查詢時所顯示的共享資料夾名稱
     path = /sharedir/santana
     write list = @sambauser
     writeable = yes
     public = no
     browseable = yes
     ; hosts allow = 127. 192.168.0  // 先用分號註解。
    注意:
    hosts allow 放在 global 區段和一般共享資料夾設定區段內,會有不同的訊息
    但相同的是都無法存取
  • global 區段:除了允許的網段外,其餘的主機用 smbclient 也看不到分享資 訊,錯誤訊息請看 Troubleshooting 2
  • 一般共享資料夾設定區段:除了允許的網段外,其餘主機用 smbclient 看得到分享資訊,但不能存取或掛載,錯誤訊息請看 Troubleshooting 3

  • 使用 testparm 測試 /etc/samba/smb.conf 語法是否正確。
    # testparm  // 自動載入 /etc/samba/smb.conf

    新增 3 個 Samba 使用者,待會做測試用。
  • 『sabmauser』,群組為『sabmauser』,密碼為『1』
  • 『sabmauser2』,群組不是『sabmauser』,密碼為『1』
  • 『sabmauser3』,群組為『sabmauser』,密碼為『1』
  • # useradd -s /sbin/nologin sambauser
    # smbpasswd -a sambauser
     New SMB password: 『1』
     Retype new SMB password: 『1』
     Added user sambauser.
    # useradd -s /sbin/nologin sambauser2
    # smbpasswd -a sambauser2
     New SMB password: 『1』
     Retype new SMB password: 『1』
     Added user sambauser2.
    # useradd -s /sbin/nologin -G sambauser sambauser3
    # smbpasswd -a sambauser3
     New SMB password: 『1』
     Retype new SMB password: 『1』
     Added user sambauser3.

    查詢 samba 使用者資料庫
    # pdbedit -L
     sambauser:502:  // 查看 samba 使用者是否已建立
     sambauser2:503:
     sambauser3:504:

    啟動服務
    # service nmb start ; service smb start

    Linux 平台測試(10.10.10.138)

    安裝 Samba Client 套件
    # yum install -y samba-client cifs-utils
    查看 Samba Server 共享資源訊息
    # smbclient -L 10.10.10.137

    存取共享目錄,但無法支援許多常用的指令,故建議掛載以方便進行操作。
    # smbclient //10.10.10.137/santana -U sambauser%1  // santana 是共享資料夾的設定名稱 [santana]

    手動掛載,順便測試 sambauser、sambauser2 及 sambauser3 存取狀態。
    # mkdir /mnt/smb
    # mount //10.10.10.137/santana /mnt/smb -o username=sambauser%1
    # df
    # touch i.am.sambauser.txt
    # mount //10.10.10.137/santana /mnt/smb -o username=sambauser2%1
    # mount //10.10.10.137/santana /mnt/smb -o username=sambauser3%1
    # df
    # touch i.am.sambauser3.txt
    # ll /mnt/smb


    注意!雖然可以用不同帳號同時掛載,但新增檔案所屬為最後掛載的使用者,而為何 sambauser2 會掛載失敗,因為在 smb.conf 的設定,是只有 sambauser 群組,才能存取。

    開機時掛載
    # chkconfig netfs on
    # service netfs start
    # echo '//10.10.10.137/santana /mnt/smb cifs username=sambauser%1 0 0' >> /etc/fstab
    # mount -a

    Troubleshooting

    無法掛載訊息
    # mount //10.10.10.137/share_samba /mnt/samba/ -o username=sambauser%1
     mount: block device //10.10.10.137/share_samba is write-protected, mounting read-only
     mount: cannot mount block device //10.10.10.137/share_samba read-only

    查詢系統記錄
    # tail messages
     Oct 17 22:24:08 sambaserver137 kernel: CIFS VFS: cifs_mount failed w/return code = -13
     Oct 17 22:24:16 sambaserver137 tpvmlpd2[2886]: device type not supported
     Oct 17 22:24:16 sambaserver137 tpvmlpd2[1895]: aborting
     Oct 17 22:24:24 sambaserver137 kernel: CIFS VFS: cifs_mount failed w/return code = -22
     Oct 17 22:24:28 sambaserver137 kernel: Status code returned 0xc000006d NT_STATUS_LOGON_FAILURE
     Oct 17 22:24:28 sambaserver137 kernel: CIFS VFS: Send error in SessSetup = -13
     Oct 17 22:24:28 sambaserver137 kernel: CIFS VFS: cifs_mount failed w/return code = -13
     Oct 17 22:24:28 sambaserver137 kernel: Status code returned 0xc000006d NT_STATUS_LOGON_FAILURE
     Oct 17 22:24:28 sambaserver137 kernel: CIFS VFS: Send error in SessSetup = -13
     Oct 17 22:24:28 sambaserver137 kernel: CIFS VFS: cifs_mount failed w/return code = -13

    安裝 cifs-utils 套件,讓系統能辨視裝置格式
    # yum install -y cifs-utils.x86_64

    Troubleshooting 2

    hosts allow 設定在 global 區段
    # smbclient -L 10.10.10.137
     Enter root's password:
     protocol negotiation failed: NT_STATUS_INVALID_NETWORK_RESPONSE

    Troubleshooting 3

    hosts allow 設定在一般共享資料夾區段

    Samba 伺服器

    微軟的網路芳鄰檔案系統為 CIFS(Common Internet File System),若想讓 Unix-Like 主機加入微軟的網路芳鄰並並享資源時,就必須架設 Samba Server,目的就是要讓微軟的使用者在網路芳鄰中看到這台主機的 NetBIOS name,進而存取享的資源。

    以下範例需要認證才能登入共享資料夾
    安裝 Samba Server
    # yum install -y samba
    開機時啟動
    # chkconfig nmb on  // 提供 NetBIOS 名稱解析
    # chkconfig smb on  // 提供檔案共享及列印服務

    開啟防火牆,nmbd 通訊埠為 137(udp)、138(udp),smbd 通訊埠為 139(tcp)、445(tcp)
    # iptables -I INPUT -p udp --dport 137:138 -j ACCEPT
    # iptables -I INPUT -p tcp --dport 139 -j ACCEPT
    # iptables -I INPUT -p tcp --dport 445 -j ACCEPT
    # service iptables save

    設定共享資料及存取權限,組態檔 /etc/samba/smb.conf
    # mkdir /sharedir  // 建立共享資料夾
    # chcon -t samba_share_t /sharedir  // SELinux設定
    # vim /etc/samba/smb.confg
     [global]
     workgroup = career
     netbios name = santanalee
     security = usr  //share 不需要認證,user 需要認證
     passdb backend = tdbsam  // 檔案是 passdb.tdb

     [share_samba]  // 共享目錄名稱
     path = /sharedir
     valid users = sambauser
     writeable = yes
     public = no
     browseable = yes  // 若設定為no,但如果登入者知道完整路徑仍可存取。
     available = yes  // 此區段設定是否動作,預設是yes,可以不用輸入

    使用 testparm 測試 /etc/samba/smb.conf 語法是否正確。
    故意在組態檔內寫入一個錯誤參數名稱 printers。
    # testparm  // 自動載入 /etc/samba/smb.conf
     Load smb config files from /etc/samba/smb.conf
     rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
     Processing section "[homes]"
     Processing section "[printers]"
     Unknown parameter encountered: "aprintable"
     Ignoring unknown parameter "aprintable"
     WARNING: [printers] service MUST be printable!
     Loaded services file OK.
     Server role: ROLE_STANDALONE
     Press enter to see a dump of your service definitions

    新增 Samba 使用者『sabmauser』,密碼為『1』
    # useradd -s /sbin/nologin sambauser
    # smbpasswd -a sambauser
     New SMB password: 『1』
     Retype new SMB password: 『1』
     Added user sambauser.

    查詢 samba 使用者資料庫
    # pdbedit -L
     sambauser:502:

    啟動服務
    # service nmb start ; service smb start

    Windows 平台測試

    1. 打開網路芳鄰,可以看到 NetBIOS Name 為 SANTANALEE 的主機


    2. 進入主機要輸入帳/密 (sambauser/1)


    3. 登入後可看見共享目錄 share_samba 及使用者家目錄


    4. 登入使用者家目錄遭系統拒絕,是因為 SELinux 關係

    5. 設定 SELinux 布林值
      # setsebool -P samba_enable_home_dirs 1

    Linux 平台測試

    安裝 Samba Client 套件
    # yum install -y samba-client
    查看 Samba Server 共享資源訊息
    # smbclient -L 10.10.10.137

    存取共享目錄,但無法支援許多常用的指令,故建議掛載以方便進行操作。
    # smbclient //10.10.10.137/share_samba -U sambauser%1
     // 可使用 NetBIOS Name 或 IP 位址,另外 sambauser%1 的寫法,密碼會留在歷史資料內,不加 %1 系統會出現提示輸入訊息。


    手動掛載
    # mkdir /mnt/smb
    # mount(-t cifs)//10.10.10.137/share_samba /mnt/smb -o username=sambauser%1  // 檔案系統參數可以不用下
    # df


    開機時掛載
    # chkconfig netfs on
    # service netfs start
    # echo '//10.10.10.137/share_samba /mnt/smb cifs username=sambauser%1 0 0' >> /etc/fstab
    # mount -a

    移除網路芳鄰帳號

    方法一:使用認證管理員,但 GUI 界面有的時候會找不到,這時候可以使用指令模式(方法二)
    1. Windows 鍵 + R 呼叫執行視窗,並輸入 control userpasswords2
    2. 使用者帳戶【進階】【管理密碼】

    3. 認證管理員

    方法二:
    1. Windows 鍵 + R 呼叫執行視窗,並輸入 cmd

    2. 查詢所有遠端連線
    3. c:\ net use


    4. 刪除所有遠端連線
    5. c:\ net use * /delete


    6. 刪除單一遠端連線
    7. c:\ net use \\********EE\IPC$ /delete


    好用小套件-nmap

    偵測遠端服務是否開啟。

    安裝nmap套件
    # yum install -y nmap

    查詢遠端 TCP 類型服務是否開啟
    # nmap -sT 140.112.xxx.xx  // sT = scan TCP
     Starting Nmap 5.51 ( http://nmap.org ) at 2012-10-12 15:04 CST
     Nmap scan report for pcxx.career.studa.ntu.edu.tw (140.112.xxx.xx)
     Host is up (0.0014s latency).
     Not shown: 996 filtered ports
     PORT STATE SERVICE
     21/tcp open ftp
     22/tcp open ssh
     80/tcp open http
     443/tcp open https

     Nmap done: 1 IP address (1 host up) scanned in 25.23 seconds

    查詢遠端 UDP 類型服務是否開啟
    # nmap -sU 140.112.xxx.xx  // sU = scan UDP
     Starting Nmap 5.51 ( http://nmap.org ) at 2012-10-12 15:05 CST
     Nmap scan report for dns.career (140.112.xxx.xx)
     Host is up (0.00036s latency).
     Not shown: 999 open|filtered ports
     PORT STATE SERVICE
     123/udp open ntp
     Nmap done: 1 IP address (1 host up) scanned in 4.03 seconds

    參數『-A』可同時作業系統偵測及版本偵測,但會花費較長的時間,且結果可能會有錯誤,像作業系統怎麼變成Windows了
    # nmap -A 140.112.xxx.xx


    Script-case...esac範例

    在螢幕上輸入『A』會出現『Apple』,輸入『B』會出現『Ball』,輸入其他則出現『Other』
    # vim /etc/script
     case $1 in a)
      echo Apple;;
      b)
      echo Ball;;
      *)

      echo "請輸入A或B";;

     esac

    執行script
    # chmod 744 /etc/script
    # /etc/script a
     Apple

    權限規劃-ACL(Access Control List)

    限制(使用者/群組)存取對某(檔案/目錄)權限方法通常有 2 種 chmod 和 ACL,但 chmod 若是使用在群組上,無法限制單一使用者存取檔案權限。

    範例:新增檔案 /root/aclexample.txt,群組為 manager,使用者 normal 及 normal2 亦為 manager 群組,normal 可以進行讀寫,但 normal2 無法進行任何操作。

    新增檔案
    # echo 'acl example' > /home/aclexample.txt
    # groupadd manager
    # chgrp manager /home/aclexample.txt

    修改使用者群組
    # usermod -G manager normal
    # id normal
     uid=500(normal) gid=500(normal) groups=500(normal),502(manager)

    # usermod -G manager normal2
    # id normal2
     uid=501(normal2) gid=501(normal2) groups=501(normal2),502(manager)

    設定存取權限(規則是有先後順序,先使用者再群組)
    # setfacl -m u:normal:rw- /home/aclexample.txt
    # setfacl -m u:normal1:--- /home/aclexample.txt
    # getfacl /root/aclexample.txt
     getfacl: Removing leading '/' from absolute path names
     # file: home/aclexample.txt
     # owner: root
     # group: manager
     user::rw-
     user:normal:rw-
     user:normal2:---

     group::r--
     mask::rw-
     other::r--

    使用者 normal 寫入 /home/aclexample.txt
    $ echo 'i am normal' >> /home/aclexample.txt
    $ cat /home/aclexample.txt
     acl example
     i am normal

    使用者 normal2 寫入 /home/aclexample.txt
    $ echo 'i am normal2' >> /home/aclexample.txt
     -bash: /home/aclexample.txt: Permission denied




    Default ACL

    20121211 新增內容


    使用方法:只能在目錄上設定,而該目錄下的檔案及子目錄會繼承其 ACLs。
    範例:使用者 user1、user2 及 user3 皆為群組 manager,/home/test 底下所有的檔案及目錄,user3 沒有任何權限。


    # mkdir /home/test
    # chmod 2775 /home/test
    # chgrp manager /home/test
    # setfacl -m d:u:user3:--- /home/test
    # ll -d /home/test
     drwxrwsr-x+ 2 root manager 4096 Dec 11 10:56 /home/test  // 有 Default ACLs 的目錄或檔案都會有個加號。

    ############user1、user2 及 user3 皆可以在 /home/test 產生目錄及檔案############
    # su - user1
    user1 $ mkdir /home/test/user1
    user1 $ echo "i am user1" > /home/test/user1.txt
    user1 $ exit

    # su - user2
    user2 $ mkdir /home/test/user2
    user2 $ echo "i am user2" > /home/test/user2.txt
    user2 $ exit

    # su - user1
    user3 $ mkdir /home/test/user3
    user3 $ echo "i am user3" > /home/test/user3.txt
    user3 $ exit

    ############ user3 無法讀寫存取其他使用者在 /home/test 底下的目錄及檔案############
    user3 $ echo "i am user3" >> /home/test/user1.txt
        -bash: user1.txt: Permission denied
    user3 $ echo "i am user3" >> /home/test/user2.txt
        -bash: user2.txt: Permission denied
    user3 $ ll /home/test/user1
        ls: cannot open directory /home/test/user1: Permission denied
    user3 $ ll /home/test/user2
        ls: cannot open directory /home/test/user2: Permission denied

    ############其他使用者可相互讀寫存取在 /home/test 的目錄及檔案############
    user1 $ ll /home/test/user2
        total 0
    user1 $ echo "i am user1" >> /home/test/user2.txt
    user1 $ exit
        logout

    # su - user2
    user2 $ ll /home/test/user1
        total 0
    user2 $ echo "i am user2" >> /home/test/user1.txt
    user2 $ ll /home/test/user3
        total 0
    user2 $ echo "i am user2" >> /home/test/user3.txt