# yum install alacarte
核心升級問題-無線網卡
無線網卡安裝舊文:Broadcom 802.11 BCM43227 驅動程式安裝步驟
無線網卡通常在核心升級後都必需重新產生並載入模組(驅動程式),此次由 3.3.4-5 升級至 3.6.10-2 後,使用舊的方法產生無線模組時發生了一些問題,在編譯的過程中找不到 asm/system.h 檔案,導致編譯失敗。
使用舊方式產生模組發生編譯的過程中找不到 asm/system.h 檔案問題
system.h 的核心版本為 3.3.4-5.fc17.x86_64,沒有目前核心版本(3.6.10-2.fc17.x86_64)的 system.h
解決方法請依照以下步驟操作:
無線網卡通常在核心升級後都必需重新產生並載入模組(驅動程式),此次由 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的安裝來源)
因為版面幾乎和 Google Calender 一樣(套件thunderbird-lightning),而且新增或編輯都會同步到Google Calendar。
安裝ThunderBird(除了thunderbird以外,其餘套件要有epel的安裝來源)
# yum install thunderbird thunderbird-lightning mozilla-adblockplus.noarch python-mozrunner.noarch
同步Google Calendar設定
同步Google Task設定
使用外掛Google Task Sync 0.3.1Fedora設定Delete鍵直接刪除文件
在桌面或檔案總管(Nautilus)刪除文件的快速鍵為 Ctrl+Del,但是這樣很麻煩!
直接改成 Delete 鍵刪除文件或資料夾,就方便多了。
在終端機輸入以下指令
開啟檔案總管(Nautilus)
在終端機輸入以下指令
直接改成 Delete 鍵刪除文件或資料夾,就方便多了。
在終端機輸入以下指令
# gsettings set org.gnome.desktop.interface can-change-accels true
開啟檔案總管(Nautilus)
# nautilus &
- 隨便選取一個文件
- 點選命令列 Edit
- 選取(不要點選)Move to Trash,見圖1。
- 按下 Delete 鍵:第一次取消原設定 Ctrl+Delete,見圖 2。
- 按下 Delete 鍵:第二次設定為 Delete,見圖 3。
圖 1.
圖 2.
圖 3.
在終端機輸入以下指令
# gsettings set org.gnome.desktop.interface can-change-accels false
Web 伺服器(第二版)-網頁內容加密傳輸SSL
本人曾在 Web 伺服器(第一版)的第三個網頁中使用輸入帳密才能登入網頁,但其實帳密資料在傳輸的過程中是沒有加密的,故此篇文章將教您加密資料。
以下將以 Web 伺服器(第一版)的第三個網頁示範加密流程。
安裝金鑰產生套件 openssl
安裝 Apache ssl 模組:mod_ssl
開啟防火牆
產生憑證
移除私鑰口令
憑證請求檔(CSR、Certificate Signing Request)
自簽電子證書(Self-Sign Certificate)
在需要加密的網頁中,加入以下設定
以下將以 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 的郵件伺服器上,那請依照以下的設定。
但如果你希望是透過 Gmail 的郵件伺服器寄送電子郵件,並把寄件備份也留在 Google 的郵件伺服器上,那請依照以下的設定。
- 設定本地主機 gmail 帳號:控制台→郵件→顯示設定
- 新增設定檔 Gmail-IMAP
- 新增 Gmail 帳號
- 完成上述的設定,郵件備份就會留在 Google 的郵件伺服器上,同時也可以透過 Outlook 操作。
Fedora安裝氣象預測套件
CentOS 有氣象預測的圖示,但在 Fedora 預設是沒有安裝的,因此要手動安裝並開啟才會出現。
開啟氣象預測套件:網址 Gnome Shell Extensions
CentOS6.3
Fedora 17
在 Fedora 17 安裝氣象預測套件
# yum install -y gnome-shell-extension-weather.noarch
開啟氣象預測套件:網址 Gnome Shell Extensions
ntop
資料來源:軟體開箱文~~ 使用 ntop 好用的圖型化介面監控網路管理資訊
network-top 是統計目前網量流量的軟體(類似 Linux 的 top 指令),如果你的主機是網域的出入口,可以知道網域內的主機瀏覽那些網頁以及使用那些網路協定進行資料傳輸。
安裝
設定系統管理者密碼,帳號預設是 admin。
啓動 ntop 服務測試
開啟防火牆
要求登入驗證密碼,不然外部只要連上主機的 3000port 就可以查看。
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 就可以查看。
- Admin-->Configure-->Protect URLs
- 輸入管理者帳密 admin/123456
- 新增 Protect URLs
- 確認 URLs 清單中有出現 * 的網頁位置。
- 網頁存取被拒絕 不要使用 http://localhost:3000/,使用伺服器的 IP 登入。
- 統計畫面:功能實在太多,有需要的人請自行摸索!XD
查看 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
Samba 伺服器(第三版)
Samba 伺服器(第三版)修正了一些步驟並增加了觀念,但也簡化了內容,建議從舊版看起,可以了解作者遇到的問題和觀念的修正。
原始文章:Samba 伺服器(第二版)
微軟的網路芳鄰檔案系統為 CIFS(Common Internet File System),若想讓 Unix-Like 主機加入微軟的網路芳鄰並共享資源時,就必須架設 Samba Server,目的就是要讓微軟的使用者在網路芳鄰中看到這台主機的 NetBIOS name,進而存取共享的資源。
以下的示範,將分為二部份:
開機時啟動
開啟防火牆
使用 testparm 測試 /etc/samba/smb.conf 語法是否正確。
啟動服務
Samba 客戶端(10.10.10.129)測試
samba使用者條件:『user』,群組為『sabmauser』,密碼為『1』
『guest』,群組為『sabmauser』,密碼為『1』
『guest2』,不屬於群組『sabmauser』,密碼為『1』
查詢 samba 使用者資料庫
啟動服務
Samba 客戶端(10.10.10.129)測試 登入 samba 伺服器
原始文章:Samba 伺服器(第二版)
微軟的網路芳鄰檔案系統為 CIFS(Common Internet File System),若想讓 Unix-Like 主機加入微軟的網路芳鄰並共享資源時,就必須架設 Samba Server,目的就是要讓微軟的使用者在網路芳鄰中看到這台主機的 NetBIOS name,進而存取共享的資源。
以下的示範,將分為二部份:
- 建立一個共享資料夾為 share(/srv/share),不必驗證即可登入與上傳
- 建立一個共享資料夾為 mygroup(/srv/mygroup),必須使用者驗證成功後,才可登入與上傳
# 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)測試
- 找出目前網域上的 Workgroup
- 查詢分享資源
- 登入 samba 伺服器,並上傳資料到 /srv/share
- 使用檔案總管 nautilus 登入並上傳
# nmblookup -A 10.10.10.160 // 亦可用主機名稱
# smbclient -L 10.10.10.160 // 亦可用主機名稱
# 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)
# 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使用者條件:
- 必須為Linux用戶
- 使用smbpasswd建立登入密碼,注意!使用者的samba密碼與系統登入密碼是不相同的。
# 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 伺服器。
安裝
開機時啟動
啟動服務
編輯組態檔 /etc/vsftpd/vsftpd.conf
產生上傳目錄
防火牆設定
FTP 客戶端測試(10.10.10.129)
註:成功連線後,使用指令 dir 或 ls 查看內容(包含其他指令,例如 put..),但畫面卻卡住,大部份是 FTP 伺服器沒有載入 nf_conntrack_ftp 模組,因為伺服器回應時不是透過 21port,而是以一個亂數產生的 port number 回應,而這個 port number 會被防火牆阻擋。
解決匿名上傳檔案被拒絕的問題(SELinux)
使用一般使用者帳密登入
編輯組態檔 /etc/vsftpd/vsftpd.conf
chroot限制使用者到其他目錄,只能存取自己家目錄底下的子目錄。
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個:
開機時啟動
啟動服務
註:NFS啟動後會提供2個服務程式rpc.mountd(/etc/exports)及rpc.nfsd。
新增1GB容量的分割區供客戶端掛載
固定mountd的port number,因為開機或重啟服務時port number是隨機產生的,如果沒有固定,無法進行防火牆的設定。
防火牆設定:請注意先後順序
NFS 伺服器端分享資料夾設定
補充:NFS真正的設定檔在/var/lib/nfs/etab
修改 /etc/exports 內容後,重啟 NFS 服務套用更新,但會使得在線上的使用者斷線,使用以下指令可避免此情況發生。
以下四個參數,讓 NFS 客戶端使用者登入 NFS 伺服端時,轉換身份(以 UID 為主)並取得相對應的權限操作。
NFS Client(10.10.10.129)
注意:無法對資料夾/mnt/nfsclient進行新增刪除的操作。
NFS客戶端的身份為管理者root,但登入NFS伺服端後,系統會變更成使用者nfsnobody,而nfsnobody的權限對資料夾只有讀的權限。
有2種方法可以解決這個問題,都是在NFS伺服器端上設定
無法掛載:若出現被 NFS Server 拒絶的訊息,請先檢查是否有權限存取。假設 NFS Server 設定只有 10.10.10.128 可以存取,但目前的 NFS Client 的 IP 是 10.10.10.129,因此會被拒絕。
NFS Server(10.10.10.160)
NFS 需要遠端程序呼叫 (RPC) 的服務,因此安裝 rpcbind 套件。
RPC服務啟動後,會開啟應用程式portmapper(111 port),這支應用程式的功能有2個:
- NFS或NIS服務啟動時,會先portmapper註冊,由portmapper動態分配port number。
- 讓客戶端提出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
補充:
# 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)
# exportfs -rv // 參數『v』代表詳細模式,可以不用加
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伺服器端上設定
- 將共享資料夾的使用者權限變更成xx7
- 在/etc/exports組態檔中加入no_root_squash參數,讓客戶端的管理者登入後亦維持管理者身份,但此舉會降低系統安全性的風險
# vim /etc/fstab
10.10.10.160:/mnt/nfs /mnt/nfsclient/ nfs ro 0 0
Troubleshooting
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登入。
加入規則
查看Server的message內容,可以看到除了192.168.122.16以外都會被拒絕,而且登記在message。
以下將以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 阻擋?
查看 log 檔內容:檔案 /opt/google-tmp/Default/databases/https_www.google.com_0/1 的 content type 無法取得權限。
變更檔案 /opt/google-tmp/Default/databases/https_www.google.com_0/1 的 content type
註:/opt/google-tmp/ 這個路徑是自行產生的喲!請參考本人文章解除 root 執行 Chrome 限制
開啟 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
啟動 Zenmap,並查詢中華電信的 DNS 伺服器 168.95.1.1
套件名稱:nmap-frontend.noarch
安裝 Zenmap
# yum install nmap-frontend.noarch
啟動 Zenmap,並查詢中華電信的 DNS 伺服器 168.95.1.1
# zenmap &
設定開機時啟動服務 chkconfig
chkconfig 設定服務(deamon)在開機時是否啟動,也可以指定 runlevel 啟停狀態。
但是 chkconfig 真正的涵義,其實是將 /etc/rc.d/init.d 內的Scripts產生 softlink 並放置到 目錄 /etc/rc.d/rc[0-6].d 內,開機時系統依照這些 softlink 順序開啟服務。
/etc/rc5.d 內容,請注意檔案名稱分為 S(開機)和 K(關機)開頭,而且有順序。
chkconfig 新增或移除服務,或指定服務在 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 上的執行狀態。
- 參數 --level:指定服務在 runlevel 上的執行狀態
- 參數 --del:刪除 httpd 服務後,再去/etc/rc.d/rc[0-6].d的目錄查看 httpd 的softlink還存不存在?
- 參數 --add
# 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
[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]
操作與--del差不多,就不描述了!