變更Fedora登入畫面

# xhost +SI:localuser:gdm
# sudo -u gdm gnome-control-center

核心升級問題-無線網卡

無線網卡安裝舊文:Broadcom 802.11 BCM43227 驅動程式安裝步驟

無線網卡通常在核心升級後都必需重新產生並載入模組(驅動程式),此次由 3.3.4-5 升級至 3.6.10-2 後,使用舊的方法產生無線模組時發生了一些問題,在編譯的過程中找不到 asm/system.h 檔案,導致編譯失敗。

使用舊方式產生模組發生編譯的過程中找不到 asm/system.h 檔案問題 # yum install -y kernel-devel kernel-headers
# yum groupinstall "Development tools"
# make
 KBUILD_NOPEDANTIC=1 make -C /lib/modules/`uname -r`/build M=`pwd`
 make[1]: Entering directory `/usr/src/kernels/3.6.10-2.fc17.x86_64'
 Wireless Extension is the only possible API for this kernel version
 Using Wireless Extension API
  LD /root/wireless/built-in.o
  CC [M] /root/wireless/src/shared/linux_osl.o
  CC [M] /root/wireless/src/wl/sys/wl_linux.o
 /root/wireless/src/wl/sys/wl_linux.c:43:24: fatal error:asm/system.h:No such file or directory compilation
 terminated.

 make[2]: *** [/root/wireless/src/wl/sys/wl_linux.o] Error 1
 make[1]: *** [_module_/root/wireless] Error 2
 make[1]: Leaving directory `/usr/src/kernels/3.6.10-2.fc17.x86_64'
 make: *** [all] Error 2

system.h 的核心版本為 3.3.4-5.fc17.x86_64,沒有目前核心版本(3.6.10-2.fc17.x86_64)的 system.h # find / -name system.h
 /usr/src/kernels/3.3.4-5.fc17.x86_64/include/asm-generic/system.h
 /usr/src/kernels/3.3.4-5.fc17.x86_64/arch/x86/include/asm/system.h

# ll /usr/src/kernels/$(uname -r)/arch/x86/include/asm/system.h
 ls: cannot access /usr/src/kernels/3.6.10-2.fc17.x86_64/arch/x86/include/asm/system.h: No such file or directory

解決方法請依照以下步驟操作: # find / -name wl_linux.c
 /root/broadcom/src/wl/sys/wl_linux.c
# vim /root/broadcom/src/wl/sys/wl_linux.c
 #include   // 移除此行設定
 .ndo_set_rx_mode = wl_set_multicast_list,  // 找到字串.ndo_set_multicast_list 改成.ndo_set_rx_mode

# make
 KBUILD_NOPEDANTIC=1 make -C /lib/modules/`uname -r`/build M=`pwd`
 make[1]: Entering directory `/usr/src/kernels/3.6.10-2.fc17.x86_64'
 Wireless Extension is the only possible API for this kernel version
  Using Wireless Extension API
  CC [M] /root/broadcom/src/wl/sys/wl_linux.o
  CC [M] /root/broadcom/src/wl/sys/wl_iw.o
  CC [M] /root/broadcom/src/wl/sys/wl_cfg80211.o
  LD [M] /root/broadcom/wl.o
  Building modules, stage 2.
 Wireless Extension is the only possible API for this kernel version
 Using Wireless Extension API
  MODPOST 1 modules
 WARNING: modpost: missing MODULE_LICENSE() in /root/broadcom/wl.o
 see include/linux/module.h for more information
  CC /root/broadcom/wl.mod.o
  LD [M] /root/broadcom/wl.ko  // 編譯成功
 make[1]: Leaving directory `/usr/src/kernels/3.6.10-2.fc17.x86_64'

# ll wl.ko
 -rw-r--r--. 1 root root 4256993 12 月 25 23:33 wl.ko
# cp wl.ko /lib/modules/$(uname -r)/kernel/net/wireless
# depmod
# modprobe wl
# reboot

ThunderBird同步Google Calendar和Task

試用過 Evolution 和 ThunderBird 同步 Google Calendar 後,ThunderBird
因為版面幾乎和 Google Calender 一樣(套件thunderbird-lightning),而且新增或編輯都會同步到Google Calendar。

安裝ThunderBird(除了thunderbird以外,其餘套件要有epel的安裝來源) # yum install thunderbird thunderbird-lightning mozilla-adblockplus.noarch python-mozrunner.noarch

同步Google Calendar設定

  1. 到 Google 日曆設定內複製XML格式的私人網址

  2. 新增行事曆

  3. 行事曆存取位置

  4. 外部行事曆來源

  5. 登入Google帳號

  6. 日曆名稱及顏色設定

  7. 完成設定

  8. 載入後畫面


同步Google Task設定

使用外掛Google Task Sync 0.3.1
  1. 選取命令列Tools → Add-ons

  2. 搜尋並安裝外掛Google Task Sync 0.3.1

  3. 重啟Thunderbird

  4. 登入Gmail帳號

  5. 完成後畫面

Fedora設定Delete鍵直接刪除文件

在桌面或檔案總管(Nautilus)刪除文件的快速鍵為 Ctrl+Del,但是這樣很麻煩!
直接改成 Delete 鍵刪除文件或資料夾,就方便多了。

在終端機輸入以下指令 # gsettings set org.gnome.desktop.interface can-change-accels true
開啟檔案總管(Nautilus) # nautilus &
  1. 隨便選取一個文件
  2. 點選命令列 Edit
  3. 選取(不要點選)Move to Trash,見圖1。
  4. 按下 Delete 鍵:第一次取消原設定 Ctrl+Delete,見圖 2。
  5. 按下 Delete 鍵:第二次設定為 Delete,見圖 3。
圖 1.

圖 2.

圖 3.

在終端機輸入以下指令 # gsettings set org.gnome.desktop.interface can-change-accels false

Web 伺服器(第二版)-網頁內容加密傳輸SSL

本人曾在 Web 伺服器(第一版)的第三個網頁中使用輸入帳密才能登入網頁,但其實帳密資料在傳輸的過程中是沒有加密的,故此篇文章將教您加密資料。

以下將以 Web 伺服器(第一版)的第三個網頁示範加密流程。
安裝金鑰產生套件 openssl # yum install -y openssl
安裝 Apache ssl 模組:mod_ssl # yum install -y mod_ssl
開啟防火牆 # iptables -A INPUT -i eth0 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
# iptables -A INPUT -i eth0 -p tcp -m state --state INVALID,NEW -j DROP
# iptables -A INPUT -i eth0 -p tcp -m tcp --dport 443 -m state --state NEW -j ACCEPT

產生憑證 # /etc/pki/tls/certs
# make server.key  // 產生私鑰(Private Key)
 umask 77 ; \
   /usr/bin/openssl genrsa -aes128 2048 > server.key
 Generating RSA private key, 2048 bit long modulus
 .........................................+++
 ................+++  e is 65537 (0x10001)
 Enter pass phrase:  // 輸入口令,至少 4 個字元
 Verifying - Enter pass phrase:
# ll server.key
 -rw-------. 1 root root 1766 Dec 17 15:13 server.key

移除私鑰口令 # openssl rsa -in server.key -out www139.key
 Enter pass phrase for server.key:
 writing RSA key
# ll www139.key
 -rw-r--r--. 1 root root 1675 Dec 17 15:30 www139.key

憑證請求檔(CSR、Certificate Signing Request) # make www139.csr
 umask 77 ; \
   /usr/bin/openssl req -utf8 -new -key www139.key -out www139.csr
 You are about to be asked to enter information that will be incorporated into your certificate request.
 What you are about to enter is what is called a Distinguished Name or a DN.
 There are quite a few fields but you can leave some blank
 For some fields there will be a default value,
 If you enter '.', the field will be left blank.
 -----
 // 輸入以下基本資訊
 Country Name (2 letter code) [XX]:TW
 State or Province Name (full name) []:TAIWAN
 Locality Name (eg, city) [Default City]:TAIPEI
 Organization Name (eg, company) [Default Company Ltd]:
 Organizational Unit Name (eg, section) []:
 Common Name (eg, your name or your server's hostname) []:
 Email Address []:XXX@XXX.com

 Please enter the following 'extra' attributes
 to be sent with your certificate request
 A challenge password []:
 An optional company name []:

# ll www139.csr
 -rw-------. 1 root root 1013 Dec 17 15:34 www139.csr

自簽電子證書(Self-Sign Certificate) # openssl x509 -req -in www139.csr -signkey www139.key -out www139.crt -days 365
 Signature ok
 subject=/C=TW/ST=TAIWAN/L=TAIPEI/O=NTU/OU=CC/emailAddress=CC@com.tw
 Getting Private key

在需要加密的網頁中,加入以下設定  <VirtualHost *:443>
   DocumentRoot /var/www/svhost
   ServerName secretapacheserver139.example.com
   SSLEngine on  // 以下 5 個參數是參考 /etc/httpd/conf.d/ssl.conf
   SSLProtocol all -SSLv2
   SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
   SSLCertificateFile /etc/pki/tls/certs/www139.crt
   SSLCertificateKeyFile /etc/pki/tls/private/www139.key

   <Directory /var/www/svhost>
    AuthName "Secret Hideout"
    AuthType basic
    AuthUserFile /var/www/svhost/users
    require valid-user
   </Directory>
 </VirtualHost>

合併列印與Gmail的結合

使用合併印列寄送電子郵件,預設的寄件人通常是本地主機的郵件帳號,寄件備份也會留在 Outlook 裡面。
但如果你希望是透過 Gmail 的郵件伺服器寄送電子郵件,並把寄件備份也留在 Google 的郵件伺服器上,那請依照以下的設定。
  1. 設定本地主機 gmail 帳號:控制台→郵件→顯示設定

  2. 新增設定檔 Gmail-IMAP

  3. 新增 Gmail 帳號









  4. 完成上述的設定,郵件備份就會留在 Google 的郵件伺服器上,同時也可以透過 Outlook 操作。

Fedora安裝氣象預測套件

CentOS 有氣象預測的圖示,但在 Fedora 預設是沒有安裝的,因此要手動安裝並開啟才會出現。

CentOS6.3



Fedora 17

在 Fedora 17 安裝氣象預測套件 # yum install -y gnome-shell-extension-weather.noarch
開啟氣象預測套件:網址 Gnome Shell Extensions


ntop

資料來源:軟體開箱文~~ 使用 ntop 好用的圖型化介面監控網路管理資訊

network-top 是統計目前網量流量的軟體(類似 Linux 的 top 指令),如果你的主機是網域的出入口,可以知道網域內的主機瀏覽那些網頁以及使用那些網路協定進行資料傳輸。

安裝 # yum install ntop  // 必須有 epel 安裝來源
設定系統管理者密碼,帳號預設是 admin。 # ntop -A
 Fri Dec 14 09:29:22 2012 Initializing gdbm databases
 Fri Dec 14 09:29:22 2012 Setting administrator password...

 ntop startup - waiting for user response!

 Please enter the password for the admin user:123456  // 至少 5 個字元
 Please enter the password again: 123456
 Fri Dec 14 09:29:53 2012 Admin user password has been set
 Fri Dec 14 09:29:53 2012 Admin password set...

啓動 ntop 服務測試 # /etc/init.d/ntop start
開啟防火牆 # iptables -A INPUT -i eth0 -p tcp -m tcp --dport 21 -m state --state NEW -j ACCEPT
# iptables -A INPUT -i eth0 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
# iptables -I INPUT -i eth0 -p tdp --dport 80 -m state --state NEW -j ACCEPT
# iptables -I INPUT -i eth0 -p tcp --dport 3000 -m state --state NEW -j ACCEPT
# /etc/init.d/iptables save

要求登入驗證密碼,不然外部只要連上主機的 3000port 就可以查看。
  1. Admin-->Configure-->Protect URLs

  2. 輸入管理者帳密 admin/123456

  3. 新增 Protect URLs


  4. 確認 URLs 清單中有出現 * 的網頁位置。

  5. 網頁存取被拒絕
  6. 不要使用 http://localhost:3000/,使用伺服器的 IP 登入。

    查看 ntop 設定檔內容,ntop 只接受 localhost 監聽 3000port,請註解這行設定後,重啟服務。 # vim /etc/ntop.conf
     # limit ntop to listening on a specific interface and port
     --http-server 127.0.0.1:3000 --https-server 127.0.0.1:3001

    # vim /etc/ntop.conf
     # limit ntop to listening on a specific interface and port
     # --http-server 127.0.0.1:3000 --https-server 127.0.0.1:3001

    # service ntop restart


  7. 統計畫面:功能實在太多,有需要的人請自行摸索!XD

Samba 伺服器(第三版)

Samba 伺服器(第三版)修正了一些步驟並增加了觀念,但也簡化了內容,建議從舊版看起,可以了解作者遇到的問題和觀念的修正。

原始文章:Samba 伺服器(第二版)

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


以下的示範,將分為二部份:
  1. 建立一個共享資料夾為 share(/srv/share),不必驗證即可登入與上傳
  2. 建立一個共享資料夾為 mygroup(/srv/mygroup),必須使用者驗證成功後,才可登入與上傳
安裝 Samba 伺服器(10.10.10.137) # yum install -y samba samba-client samba-common cifs-utils
開機時啟動 # chkconfig nmb on ; chkconfig smb on
開啟防火牆
# iptables -A INPUT -i eth0 -p tcp -m tcp --dport 21 -m state --state NEW -j ACCEPT
# iptables -A INPUT -i eth0 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
# iptables -I INPUT -i eth0 -p udp --dport 137:138 -m state --state NEW -j ACCEPT
# iptables -I INPUT -i eth0 -p tcp -m multiport --dport 139,445 -m state --state NEW -j ACCEPT
# service iptables save
# iptables -L -n | grep --color -Ew '13[789]|445'



Part1:建立一個共享資料夾為 share(/srv/share),不必驗證即可登入與上傳,編輯設定檔 /etc/samba/smb.conf

# mkdir /srv/share   // 建立共享資料夾
# chmod 2777 /srv/share  // 變更共享資料夾權限
# ll -dZ /srv/share  // SELinux 設定
 drwxrwsr-x. root root unconfined_u:object_r:var_t:s0 /srv/share
# chcon -t samba_share_t /srv/share
# ll -dZ /srv/share
 drwxrwsr-x. root root unconfined_u:object_r:samba_share_t:s0 /srv/share

# vim /etc/samba/smb.conf
 [global]
 workgroup = career
 security = usr
 passdb backend = tdbsam  // 檔案是 passdb.tdb

 [share]  // 共享目錄名稱,使用 smbclient 查詢時所顯示的共享資料夾名稱
 path = /srv/share
 guest ok = yes
 guest only = yes
 read only = no  // 同等於 writeable = yes

使用 testparm 測試 /etc/samba/smb.conf 語法是否正確。 # testparm  // 自動載入 /etc/samba/smb.conf;參數 -v 詳細列出
啟動服務 # service nmb start; service smb start
Samba 客戶端(10.10.10.129)測試
  1. 找出目前網域上的 Workgroup
  2. # nmblookup -A 10.10.10.160  // 亦可用主機名稱

  3. 查詢分享資源
  4. # smbclient -L 10.10.10.160  // 亦可用主機名稱

  5. 登入 samba 伺服器,並上傳資料到 /srv/share
  6. # smbclient //10.10.10.160/share
     Enter root's password: 直接按 Enter 進入
     Anonymous login successful
     Domain=[CAREER] OS=[Unix] Server=[Samba 3.5.10-125.el6]
    smb: \> put install.log
     putting file install.log as \install.log (9833.5 kb/s) (average 9833.7 kb/s)

  7. 使用檔案總管 nautilus 登入並上傳
  8. # nautilus &

Part2:建立一個共享資料夾為 mygroup(/srv/mygroup),必須使用者驗證成功後,才可登入與上傳,編輯設定檔 /etc/samba/smb.conf

# useradd guest2  // 新增使用者guest2,當他登入/srv/mygroup時,是被目錄的安全性拒絕,而不是samba伺服器。
# passwd guest2
# groupadd -g 8000 sambauser
# mkdir /srv/mygroup       // 建立共享資料夾
# chgrp sambauser /srv/mygroup   // 變更共享資料夾群組
# chmod 2777 /srv/mygroup    // 變更共享資料夾權限
# chcon -t samba_share_t /srv/mygroup  // SELinux 設定

# vim /etc/samba/smb.conf
 [global]
 workgroup = career
 security = usr
 passdb backend = tdbsam  // 檔案是 passdb.tdb

 [share]  // 共享目錄名稱,使用 smbclient 查詢時所顯示的共享資料夾名稱
 path = /srv/share
 guest ok = yes
 guest only = yes
 read only = no  // 同等於 writeable = yes

 [members]  // 共享目錄名稱,使用 smbclient 查詢時所顯示的共享資料夾名稱
 path = /srv/mygroup
 guest ok = no
 guest only = no
 read only = no  // 同等於 writeable = yes
 vaild users = @sambauser  // 允許群組成員存取
 invaild users = guest  // 拒絕使用者guest存取

samba使用者條件:
  1. 必須為Linux用戶
  2. 使用smbpasswd建立登入密碼,注意!使用者的samba密碼與系統登入密碼是不相同的。
新增 Samba 使用者
  • 『user』,群組為『sabmauser』,密碼為『1』
  • 『guest』,群組為『sabmauser』,密碼為『1』
  • 『guest2』,不屬於群組『sabmauser』,密碼為『1』
  • # useradd -G 8000 -s /sbin/nologin user
    # smbpasswd -a sambauser1
     New SMB password: 『1』
     Retype new SMB password: 『1』
     Added user sambauser.

    # useradd -G 8000 -s /sbin/nologin guest # smbpasswd -a guest
     New SMB password: 『1』
     Retype new SMB password: 『1』
     Added user sambauser2.

    # useradd -s /sbin/nologin guest2 # smbpasswd -a guest2
     New SMB password: 『1』
     Retype new SMB password: 『1』
     Added user sambauser2.

    查詢 samba 使用者資料庫 # pdbedit -L  // 查看 samba 使用者是否已建立;-v詳細模式
     user:505:
     guest:500:guest
     guest2:504:

    啟動服務
    # service smb start
    Samba 客戶端(10.10.10.129)測試 登入 samba 伺服器 # smbclient //10.10.10.160/members -U user
     Enter user's password:
     Domain=[CAREER] OS=[Unix] Server=[Samba 3.5.10-125.el6]
     smb: \> exit

    # smbclient //10.10.10.160/members -U guest
     Enter guest's password:
     Domain=[CAREER] OS=[Unix] Server=[Samba 3.5.10-125.el6]
     tree connect failed: NT_STATUS_ACCESS_DENIED  // 此連線是被samba伺服器拒絕

    # smbclient //10.10.10.160/members -U guest2
     Enter guest2's password:
     Domain=[CAREER] OS=[Unix] Server=[Samba 3.5.10-125.el6]
     tree connect failed: NT_STATUS_ACCESS_DENIED  // 此連線是被目錄拒絕

    FTP伺服器

    建立一個可以讓使用者登入家目錄及匿名者上傳的 FTP 伺服器。


    FTP 伺服器(10.10.10.160)


    安裝 # yum install vsftpd
    開機時啟動 # chkconfig vsftpd on
    啟動服務 # service vsftpd start

    Part1:讓匿名者上傳檔案


    編輯組態檔 /etc/vsftpd/vsftpd.conf # vim /etc/vsftpd/vsftpd.conf
     anon_root=/var/ftp/pub
     anonymous_enable=YES
     write_enable=YES
     anon_upload_enable=YES

    # setsebool -P allow_ftpd_anon_write on

    # service vsftpd restart

    產生上傳目錄 # mkdir /var/ftp/pub/upload
    # chmod 1777 /var/ftp/pub/upload
    # ll -d /var/ftp/pub/upload
     drwxrwxrwt. 2 root root 4096 Dec 13 13:50 /var/ftp/pub/upload

    防火牆設定 # iptables -A INPUT -i eth0 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
    # iptables -A INPUT -i eth0 -p tcp -m state --state NEW,INVALID -j DROP
    # iptables -I INPUT -i eth0 -p tcp --dport 21 -m state --state NEW -j ACCEPT

    FTP 客戶端測試(10.10.10.129) # ftp 10.10.10.160
      Connected to 10.10.10.160 (10.10.10.160).
      220 (vsFTPd 2.2.2)
      Name (10.10.10.160:root): anonymous
      331 Please specify the password.
      Password: 直接按 Enter 進入
      230 Login successful.
      Remote system type is UNIX.
      Using binary mode to transfer files.
    ftp> dir
      227 Entering Passive Mode (10,10,10,160,86,44).
      150 Here comes the directory listing.
      drwxrwxrwt 2 0 0 4096 Dec 13 05:50 upload
      226 Directory send OK.
    ftp> cd upload
      250 Directory successfully changed.
    ftp> put install.log
      local: install.log remote: install.log
      227 Entering Passive Mode (10,10,10,160,158,187).
      553 Could not create file.  上傳檔案被拒絕!?

    註:成功連線後,使用指令 dir 或 ls 查看內容(包含其他指令,例如 put..),但畫面卻卡住,大部份是 FTP 伺服器沒有載入 nf_conntrack_ftp 模組,因為伺服器回應時不是透過 21port,而是以一個亂數產生的 port number 回應,而這個 port number 會被防火牆阻擋。 10.10.10.160# modprobe nf_conntrack_ftp
    解決匿名上傳檔案被拒絕的問題(SELinux) # tail -f /var/log/messages
     Dec 13 15:12:41 localhost setroubleshoot: [avc.ERROR] Plugin Exception catchall_boolean #012Traceback
     (most recent call last):#012 File "/usr/lib64/python2.6/site-packages/setroubleshoot/analyze.py", line 191, in
     analyze_avc#012 report = plugin.analyze(avc)#012 File "/usr/share/setroubleshoot/plugins/catchall_boolean.py",
     line 90, in analyze#012 man_page = self.check_for_man(b)#012 File
     "/usr/share/setroubleshoot/plugins/catchall_boolean.py", line 76, in check_for_man#012 man_page =
     name.split("_")[0] + "_selinux"#012AttributeError: 'tuple' object has no attribute 'split' Dec 13 15:12:41
     localhost setroubleshoot: SELinux is preventing /usr/sbin/vsftpd from write access on the directory upload.
     For complete SELinux messages. run sealert -l c5f97a15-0622-4443-bdb3-a9ae3ac693c9  // 這個錯誤訊息
     要裝 setroubleshoot 才會顯示


    # sealert -l c5f97a15-0622-4443-bdb3-a9ae3ac693c9
     If you want to allow /usr/sbin/vsftpd to be able to write to shared public content Then you need to
     change the label on upload to public_content_rw_t
    , and potentially turn on the
     allow_httpd_sys_script_anon_write boolean.

    # ll -dZ /var/ftp/pub/upload/
     drwxrwsrwt. root root unconfined_u:object_r:public_content_t:s0 /var/ftp/pub/upload/
    # chcon -t public_content_rw_t /var/ftp/pub/upload/
    # ll -dZ /var/ftp/pub/upload/
     drwxrwsrwt. root root unconfined_u:object_r:public_content_rw_t:s0 /var/ftp/pub/upload/

    Part2:讓系一般使用者帳密登入自己家目錄,並讓家目錄成為使用者的根目錄


    使用一般使用者帳密登入 # ftp 10.10.10.160
     Connected to 10.10.10.160 (10.10.10.160).
     220 (vsFTPd 2.2.2)
     Name (10.10.10.160:root): guest
     331 Please specify the password.
     Password:
     500 OOPS: cannot change directory:/home/guest
     Login failed.

    編輯組態檔 /etc/vsftpd/vsftpd.conf # vim /etc/vsftpd/vsftpd.conf
     anon_root=/var/ftp/pub
     anonymous_enable=YES
     write_enable=YES
     anon_upload_enable=YES

     local_enable=YES
     chroot_local_user=YES
     passwd_chroot_enable=YES  // 此設定是參考/etc/passwd內容

    # setsebool -P ftp_home_dir on

    # service vsftpd restart

    chroot限制使用者到其他目錄,只能存取自己家目錄底下的子目錄。 # ftp 10.10.10.160
     Connected to 10.10.10.160 (10.10.10.160).
     220 (vsFTPd 2.2.2)
     Name (10.10.10.160:root): guest
     331 Please specify the password.
     Password:
     230 Login successful.
     Remote system type is UNIX.
     Using binary mode to transfer files.

    ftp> pwd
     257 "/"

    NFS伺服器(第二版)

    NFS(Network FileSystem)的功能就是可以透過網路,讓不同的機器、不同的作業系統、可以彼此分享個別的檔案 (share files) 並進行操作。


    NFS Server(10.10.10.160)
    NFS 需要遠端程序呼叫 (RPC) 的服務,因此安裝 rpcbind 套件。
    RPC服務啟動後,會開啟應用程式portmapper(111 port),這支應用程式的功能有2個:
    1. NFS或NIS服務啟動時,會先portmapper註冊,由portmapper動態分配port number。
    2. 讓客戶端提出NFS服務要求時,必須透過portmapper得到正確的NFS資訊。
    # yum install -y nfs-utils rpcbind
    開機時啟動
    # chkconfig nfs on
    # chkconfig rpcbind on

    啟動服務
    # service rpcbind start  // 先啟動
    # service nfs start  // NFS服務向portmapper註冊,要求mountd的port number。

    註:NFS啟動後會提供2個服務程式rpc.mountd(/etc/exports)及rpc.nfsd。

    新增1GB容量的分割區供客戶端掛載 # palimpsest &  // 新分割代號/dev/sda4,使用palimpsest的好處是不用重開機。
    # mkfs.ext4 /dev/sda4
    # mkdir /mnt/nfs  // 建立掛載點
    # chmod 1775 /mnt/nfs
    # mount /dev/sda4 /mnt/nfs

    固定mountd的port number,因為開機或重啟服務時port number是隨機產生的,如果沒有固定,無法進行防火牆的設定。 # cp /etc/sysconfig/nfs /etc/sysconfig/nfs.bak
    # sed 's/#MOUNTD_PORT=892/MOUNTD_PORT=12345/g' /etc/sysconfig/nfs
    # sed -i 's/#MOUNTD_PORT=892/MOUNTD_PORT=12345/g' /etc/sysconfig/nfs  // 參數-i:直接修改讀取的檔案內容,而不是由螢幕輸出。
    # service nfs restart  // 固定port number之後必須重啟服務才會生效

    防火牆設定:請注意先後順序
    # iptables -F
    # service iptables save
    # iptables -I INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
    # iptables -I INPUT -i eth0 -m state --state NEW,INVALID -j DROP
    # iptables -I INPUT -i eth0 -p tcp --dport 111 -m state --state NEW -j ACCEPT  // 沒開111port,客戶端rpcinfo和showmount會卡住
    # iptables -I INPUT -i eth0 -p tcp --dport 111 -m state --state NEW -j ACCEPT
    # iptables -I INPUT -i eth0 -p tcp --dport 12345 -m state --state NEW -j ACCEPT
    # iptables -I INPUT -i eth0 -p tcp --dport 12345 -m state --state NEW -j ACCEPT
    # iptables -I INPUT -i eth0 -p tcp --dport 2049 -m state --state NEW -j ACCEPT

    NFS 伺服器端分享資料夾設定
    # vim /etc/exports
     /mnt/nfs *(rw,sync)
    # exportfs -r

    補充:
  • NFS真正的設定檔在/var/lib/nfs/etab
  • # cat /var/lib/nfs/etab
     /mnt/nfs *(ro,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534)

  • 修改 /etc/exports 內容後,重啟 NFS 服務套用更新,但會使得在線上的使用者斷線,使用以下指令可避免此情況發生。
  • # exportfs -rv  // 參數『v』代表詳細模式,可以不用加
  • 以下四個參數,讓 NFS 客戶端使用者登入 NFS 伺服端時,轉換身份(以 UID 為主)並取得相對應的權限操作。


  • NFS Client(10.10.10.129) # rpcinfo -p 10.10.10.160  // 查看NFS伺服器是否有提供NFS服務
    # showmount -e 10.10.10.160
     Export list for 10.10.10.160:
     /mnt/nfs *
    # mkdir /mnt/nfsclient
    # mount 10.10.10.160:/mnt/nfs /mnt/nfsclient
    # df -h
     檔案系統 1K- 區段 已用 可用 已用 % 掛載點
     10.10.10.160:/mnt/nfs 996M 18M 929M 2% /mnt/nfsclient

    注意:無法對資料夾/mnt/nfsclient進行新增刪除的操作。
    NFS客戶端的身份為管理者root,但登入NFS伺服端後,系統會變更成使用者nfsnobody,而nfsnobody的權限對資料夾只有讀的權限。
    有2種方法可以解決這個問題,都是在NFS伺服器端上設定
    1. 將共享資料夾的使用者權限變更成xx7
    2. 在/etc/exports組態檔中加入no_root_squash參數,讓客戶端的管理者登入後亦維持管理者身份但此舉會降低系統安全性的風險
    開機時掛載
    # vim /etc/fstab
     10.10.10.160:/mnt/nfs /mnt/nfsclient/ nfs ro 0 0

    Troubleshooting


  • 無法掛載:若出現被 NFS Server 拒絶的訊息,請先檢查是否有權限存取。假設 NFS Server 設定只有 10.10.10.128 可以存取,但目前的 NFS Client 的 IP 是 10.10.10.129,因此會被拒絕。
  • client # mount nfs_server_ip:/var/ftp /mnt/nfsclient
       mount.nfs: access denied by server while mounting nfs_server_ip:/var/ftp
    client # showmount -e nfs_server_ip
       Export list for nfs_server_ip:
       /var/ftp 10.10.10.128

    記錄符合防火牆規則所過濾封包

    我們可以針對防火牆規則所過濾的封包加以記錄
    以下將以SSH為例,示範如何將SSH相關訊息記錄起來。

    Server:192.168.122.7
    Client:192.168.122.16
    Other:192.168.122.165
    要求:只允許Clinet登入,拒絕其他人Other登入。

    加入規則 #iptables -A INPUT -s 192.168.122.16/32 -i eth1 -p tcp --dport 22 -j ACCEPT
    #iptables -A INPUT -i eth1 -p tcp --dport 22 -j LOG --log-prefix "###deny all expect 16###"  // 記錄以下規則的訊息,並加上自定的字串內容。
    #iptables -A INPUT -i eth1 -p tcp --dport 22 -j DROP

    查看Server的message內容,可以看到除了192.168.122.16以外都會被拒絕,而且登記在message。 Nov 29 00:43:02 localhost kernel: ###deny all expect 16###IN=eth1 OUT= MAC=52:54:00:fb:0a:eb:52:54:00:96:4d:91:08:00 SRC=192.168.122.165 DST=192.168.122.7 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=4284 DF PROTO=TCP SPT=37278 DPT=22 WINDOW=14600 RES=0x00 SYN URGP=0

    解決管理員無法開啟google日曆錯誤

    當我們以管理員執行 google chrome 時,有時候會無法開啟 google 日曆,這是因為 SELinux 的問題,這時候只要變更 content type 就可以執行了。

    開啟 google 日曆


    測試是否為 SELinux 阻擋? # setenforce 0

    查看 log 檔內容:檔案 /opt/google-tmp/Default/databases/https_www.google.com_0/1 的 content type 無法取得權限。 # tail -f /var/log/messages
     Dec 10 13:17:00 ktl kernel: type=1400 audit(1355116620.282:130): avc: denied { write } for pid=8137
     comm="Chrome_ChildIOT" path="/opt/google-tmp/Default/databases/https_www.google.com_0/1" dev=sda3
     ino=1706905 scontext=unconfined_u:unconfined_r:chrome_sandbox_t:s0-s0:c0.c1023
     tcontext=unconfined_u:object_r:usr_t:s0 tclass=file

    變更檔案 /opt/google-tmp/Default/databases/https_www.google.com_0/1 的 content type # ll -Z /opt/google-tmp/Default/databases/https_www.google.com_0/1
     -rw-------. root root unconfined_u:object_r:usr_t:s0 /opt/google-tmp/Default/databases/https_www.google.com_0/1
    # chcon -t user_tmp_t /opt/google-tmp/Default/databases/https_www.google.com_0/1
    # ll -Z /opt/google-tmp/Default/databases/https_www.google.com_0/1
     -rw-------. root root unconfined_u:object_r:user_tmp_t:s0 /opt/google-tmp/Default/databases/
     https_www.google.com_0/1

    註:/opt/google-tmp/ 這個路徑是自行產生的喲!請參考本人文章解除 root 執行 Chrome 限制

    檢測網卡狀態ethtool

    檢測網卡狀態除了目視硬網卡的燈號是否閃爍以外,還可以用指令看到目前網卡速度是 100M 還是 10M,因為即使網卡支援 1000M,也會因為網路環境,而降速至 10M。

    # ethtool eth0
     Settings for eth0:
     Supported ports: [ TP ]
     Supported link modes: 10baseT/Half 10baseT/Full
                100baseT/Half 100baseT/Full
                1000baseT/Full
     Supports auto-negotiation: Yes
     Advertised link modes: 10baseT/Half 10baseT/Full  // 目前最高速度可到 1000Mb/s
                100baseT/Half 100baseT/Full
                1000baseT/Full
     Advertised pause frame use: No
     Advertised auto-negotiation: Yes
     Speed: 1000Mb/s
     Duplex: Full
     Port: Twisted Pair
     PHYAD: 0
     Transceiver: internal
     Auto-negotiation: on
     MDI-X: Unknown
     Supports Wake-on: d
     Wake-on: d
     Current message level: 0x00000007 (7)
     Link detected: yes  // 接線正常

    偵測遠端主機網路服務是否有開啟nmap

    這裡介紹的是圖形界面的 zenmap,軟體會依照選取偵測的等級,自動調整 nmap 的參數。
    套件名稱:nmap-frontend.noarch

    安裝 Zenmap # yum install nmap-frontend.noarch
    啟動 Zenmap,並查詢中華電信的 DNS 伺服器 168.95.1.1 # zenmap &

    設定開機時啟動服務 chkconfig

    chkconfig 設定服務(deamon)在開機時是否啟動,也可以指定 runlevel 啟停狀態。
    # chkconfig --list vsftpd
     vsftpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off

    但是 chkconfig 真正的涵義,其實是將 /etc/rc.d/init.d 內的Scripts產生 softlink 並放置到 目錄 /etc/rc.d/rc[0-6].d 內,開機時系統依照這些 softlink 順序開啟服務。 # ll -d rc[0-6].d
     drwxr-xr-x. 2 root root 4096 Dec 6 20:18 rc0.d
     drwxr-xr-x. 2 root root 4096 Dec 6 20:18 rc1.d
     drwxr-xr-x. 2 root root 4096 Dec 6 20:18 rc2.d
     drwxr-xr-x. 2 root root 4096 Dec 6 20:18 rc3.d
     drwxr-xr-x. 2 root root 4096 Dec 6 20:18 rc4.d
     drwxr-xr-x. 2 root root 4096 Dec 6 20:18 rc5.d
     drwxr-xr-x. 2 root root 4096 Dec 6 20:18 rc6.d

    /etc/rc5.d 內容,請注意檔案名稱分為 S(開機)和 K(關機)開頭,而且有順序。 # ll

    chkconfig 新增或移除服務,或指定服務在 runlevel 上的執行狀態。
    1. 參數 --level:指定服務在 runlevel 上的執行狀態
    2. # chkconfig --list vsftpd
       vsftpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
      # chkconfig --level 34 vsftpd off
      # chkconfig --list vsftpd
       vsftpd 0:off 1:off 2:on 3:off 4:off 5:on 6:off

    3. 參數 --del:刪除 httpd 服務後,再去/etc/rc.d/rc[0-6].d的目錄查看 httpd 的softlink還存不存在?
    4. [rc5.d]# chkconfig --list | grep -E 'pd'
          httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
          ntpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
          ntpdate 0:off 1:off 2:off 3:off 4:off 5:off 6:off
          snmpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
          snmptrapd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
          vsftpd 0:off 1:off 2:on 3:off 4:off 5:on 6:off
      [rc5.d]# ll *httpd*
          lrwxrwxrwx. 1 root root 15 Dec 7 10:34 K15httpd -> ../init.d/httpd

      [rc5.d]# chkconfig --del httpd
      [rc5.d]# chkconfig --list | grep -E 'pd'
          ntpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
          ntpdate 0:off 1:off 2:off 3:off 4:off 5:off 6:off
          snmpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
          snmptrapd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
          vsftpd 0:off 1:off 2:on 3:off 4:off 5:on 6:off
      [rc5.d]# ll *httpd*
          [EMPTY]

    5. 參數 --add
    6. 操作與--del差不多,就不描述了!