顯示具有 config 標籤的文章。 顯示所有文章
顯示具有 config 標籤的文章。 顯示所有文章

2012年3月8日

使用wpa_supplicant指令上網

看名稱WPA請求(supplicant)似乎適合呼邏輯,雖然個人認為不大直覺
首先確定ifconfig wlan0 up有起來(用ifconfig確定即可)
wpa_passphrase essid password>wpa.conf
這裡是將essid跟password填寫入一個設定檔案,因為編碼過後的密碼長度不是一般人背得下來的(如果有本事背出超過30個字元的人應該可以不必XD)
wpa_supplicant -BDwext -iwlan0 -cwpa.conf
-BD表示driver的type,一般使用wext (linux wireless extension)就可以了-c後面接著設定檔案的參數
dhclient wlan0
一般就是執行DHCP的client端獲取IP

另外如果喜歡互動是的介面有wpa_cli直接用一些指令的方式來溝通

P.S.如果不知道essid,可以用iwlist wlan0 scanning,他會列出附近少描到的AP ID
參考資料:
http://zh.wikipedia.org/wiki/WPA
http://en.wikipedia.org/wiki/Wpa_supplicant
http://hostap.epitest.fi/wpa_supplicant/
http://www.joecen.com/2007/10/26/linux-wireless-setting/
http://mysuperbaby.iteye.com/blog/1405729
http://ninitsai0206.blogspot.com/2010/11/using-wpacli-setting-wifi.html

2009年12月10日

/dev、/sys跟udev

過去設備檔案大多放在/dev底下,所以ls /dev總是有很多的設備檔案,不管是用得到的,用不到的都放在下面,實在管理上面有好些麻煩,再者plug and play的裝置太多,這樣的設計已經不合時宜,所以開發出了外一套的管理方式就是udev跟sys
sys主要就是把設備有規律的管理起來,使用樹狀結構,跟udev配合起來有幾項優點
  • /sys將只有呈現使用中的設備
  • 不需要major/minor number
  • 可以自行定義高可讀性的名稱,比方把eth1改為NAT_out_card
  • 可以再新增硬體的時候執行相對應的script
讀取相關資訊
udevinfo -ap /sys/class/net/eth1
定義的script存在/etc/udev/rules.d內

2009年12月9日

initrd中的init script

init script不是init process,他是initrd中執行的一個script,做一些很重要的工作,使用的是nash這個shell,好處大概就是小、快,但功能有限。init script執行了底下的工作
  1. 掛載系統檔案
  2. 建立設備(device)所需要的檔案系統
  3. 初始化設備檔案
  4. 載入相關模組
  5. 切換到作業系統
掛載系統檔案
init會掛載/proc/sys,/proc主要放置執行跟一些硬體的資訊,比方說process info或者cpuinfo 。 /sys在2.6後產生的,主要是對付設備(/dev)檔案混亂跟處理過去procfs放了太多資料,還有hotplug的設備
建立設備(device)所需要的檔案系統
會產生/dev/pts/dev/shm/dev/mapper這三個目錄
初始化設備檔案
內有產生很多設備檔案的script,比方說
mknod /dev/null c 1 3
mknod /dev/zero c 1 5
...
載入相關模組
會看到很多
...
echo "Loading ext3.ko module"
insmod /lib/ext3.ko
echo "Loading scsi_mod.ko module"
insmod /lib/scsi_mod.ko
...
載入一些預設的硬體裝備的driver
切換到作業系統
最後是chroot跟switchroot

2009年12月8日

initrd

從之前提到的開機程序得知,grub會載入kernel,接著kernel會載入initrd這個檔案,在過去2.4他可能是個image file,或者現在的壓縮檔案
kernel會在記憶體中開啟一塊rootfs空間,再把initrd mount在這rootfs上,initrd會去載入一些kernel
事先沒有載入的檔案,比方說硬碟的驅動程式
initrd會建立一些目錄架構,跟著也會建立/dev,他用來存放設備檔案,/lib目錄用以存放一些module,接著還會載入很重要的init
如果有一些關於module的觀念就會知道,module可以藉由modprobe來載入,可是一般modprobe的時機是在作業系統載入之後,如果必須要在開機的時候就用到的還是必須修改initrd來達成

Fedora
在fedora自行製作initrd使用mkinitrd指令,如果預設使用mkinitrd,將會依照/etc/modprobe.conf (2.4使用/etc/modules.conf)去搜尋module,由/etc/fstab決定要掛載的directory

再使用mkinitrd之前必須確定,modules已經放到/lib/modules底下正確的位置
mkinitrd --with=ntfs initrd_new.img 2.6.18-1.2798.fc6
cp initrd_new.img /boot
vim /boot/grub/grub.conf
其實最後一步驟是修改grub的設定,將載入的initrd變成我們編譯出來的檔案,grub2或許會有些不同

Ubuntu
ubuntu早期也是使用mkinitrd,目前已經取代為initrd-tools內的工具,工具程式為mkinitramfs,將要載入的modules放到/lib/modules相對應的位置(依照kernel版本位置不大一樣),然後將要載入的module名稱增加到/etc/initramfs-tools/modules內,其他設定在/etc/initramfs-tools/initramfs.conf內最後執行
mkinitramfs -o /boot/initrd.img-2.6.12-9-386 /lib modules/2.6.12-9-386
剩下就是拷貝initrd到/boot下跟修改grub設定
可以參考範例

2009年12月7日

init process

這個process是核心載入之後第一個執行的process,一般他的PID為1,init會指引其他流程,尤其是執行/etc/rc.d/rc.sysinit,大致的流程如下

以fedora為例,rc.sysinit做了哪些事情呢?
  • /etc/sysconfig/network:網路設定
  • /proc/mounts:檢查主要系統檔案是否存在
  • /proc/bus/usb:usb drivers
  • /etc/init.d/functions:一個很重要的script,裡面有很多的環境變數跟設定
  • /etc/selinux/config:selinux設定值
  • /sbin/setsysfont:設定基本的字形
  • /etc/sysconfig/clock:系統時間
  • /bin/dmesg:系統訊息
  • sysctl:設定一些module所需要的值,後面才會載入module
  • /bin/taskset:設定cpu
  • /sbin/start_udev、/etc/rc.modules:載入modules
接著是GUI等等的相關階段,跟著有其他的工作
  • /dev/pts:產生第一個tty介面
  • sysctl:主要是一些/proc/sys下的開關(on/off)值的設定
  • /etc/sysconfig/keyboard:設定鍵盤
  • /etc/mdadm.conf:software RAID(如果沒有用到就沒有)
  • /dev/mapper:LVM機制,同上
  • /ect/crypttab:啟動區塊加密機制
  • /fastboot、/fsckoptions、/forcefsck、/.autofsck、/etc/sysconfig/autofsck:檢查磁碟動作
  • /etc/sysconfig/readonlyroot:是否將root dir設定為唯讀
  • ipaddr:啟動網路
  • /sbin/quotacheck:檢查disk quota
  • mount /:將root dir重新mount為read/write
  • restrecon:
  • /etc/mtab:
  • /sbin/quotaon:打開quota功能

  • /usr/bin/rhgb:
  • /.unconfigured:
接下來會清除一些產生出來的檔案跟lock
  • rm files:刪除由.unconfigured跟fsck產生的檔案
  • /var:刪除/var/lock跟/var/run下檔案,有些存在/var下
  • /tmp:刪除lock檔案
接著可能啟動x-win的相關事宜跟相關設定
  • /tmp/.ICE-unix:產生x-win所需的目錄
  • blkid:啟動swap
  • /usr/sbin/system-config-network-cmd:開機網路設定
  • dmesg:寫入訊息
  • /.autofsck:
  • /usr/bin/rhgb-client:
大致上rc.sysinit至此告一段落,由inittab開始決定執行那個run level

2009年11月7日

syslog.conf跟sysctl.conf

syslog表示如何記錄log,格式為
訊息的總類.訊息等級 \t 動作

訊息種類有
  • auth
  • authpriv
  • cron
  • daemon
  • kern
  • lpr
  • mail
  • mark
  • news
  • security
  • syslog
  • user
  • uucp
  • local0~local7
訊息等級有
  • debug
  • info
  • notice
  • warning\warn
  • err\error
  • crit
  • alert
  • emerg\panic

不同種類但相同等級以逗號(,)分開
不同的訊息等級但是有相同的動作處理,可以使用分號(;)分開

動作可以有
  • 記錄到紀錄檔
  • 送到某個終端機,比方說/dev/console
  • 傳送到遠端電腦,比方@hostname
  • 把訊息mail給某個使用者
  • 給所有登入者
另外一個重要的設定檔是sysctl.conf,在開機的時候kernel會讀此一檔案內容做一些kernel的設定,比方說packet forward,設定檔內容可以用sysctl -p觀察

2009年10月27日

防火牆-iptables(1)

iptables相當複雜,所以這個文章我會慢慢寫
=============================
iptables不只能夠filter(過濾)packet的資料,甚至修改資料,也就是能夠做packet改寫達到NAT的功能
對於過濾的部分可以由一群群有次序的規則做判斷

Linux底下防火牆這功能幾乎由iptables一手包辦,其他儲存規則跟回覆規則的指令則是iptables-save跟iptables-restore
一開始如果系統沒有預設的規則,應該是等同全開、沒有限制,可借由
iptables -L -n

來觀察規則表,其中參數n的意思表示不要使用DNS反查,速度會快許多,結果如下圖表
iptables的語法大致上如同鳥哥網站提到的
iptables [-AI 鏈] [-io 網路介面] [-p 協定] \
> [-s 來源IP/網域] [-d 目標IP/網域] -j [ACCEPT|DROP]
參數:
-AI 鏈:針對某的鏈進行規則的 "插入" 或 "累加"
-A :新增加一條規則,該規則增加在原本規則的最後面。例如原本已經有四條規則,
使用 -A 就可以加上第五條規則!
-I :插入一條規則。如果沒有指定此規則的順序,預設是插入變成第一條規則。
例如原本有四條規則,使用 -I 則該規則變成第一條,而原本四條變成 2~5 號
鏈 :有 INPUT, OUTPUT, FORWARD 等,此鏈名稱又與 -io 有關,請看底下。

-io 網路介面:設定封包進出的介面規範
-i :封包所進入的那個網路介面,例如 eth0, lo 等介面。需與 INPUT 鏈配合;
-o :封包所傳出的那個網路介面,需與 OUTPUT 鏈配合;

-p 協定:設定此規則適用於哪種封包格式
主要的封包格式有: tcp, udp, icmp 及 all 。

-s 來源 IP/網域:設定此規則之封包的來源項目,可指定單純的 IP 或包括網域,例如:
IP  :192.168.0.100
網域:192.168.0.0/24, 192.168.0.0/255.255.255.0 均可。
若規範為『不許』時,則加上 ! 即可,例如:
-s ! 192.168.100.0/24 表示不許 192.168.100.0/24 之封包來源;

-d 目標 IP/網域:同 -s ,只不過這裡指的是目標的 IP 或網域。

-j :後面接動作,主要的動作有接受 (ACCEPT)、丟棄 (DROP) 及記錄 (LOG)
一般而言建議練習時先把INPUT的Policy設定為DROP,先全部擋住,在慢慢開啟允許進入的部分
iptables -P INPUT DROP

比方說允許SSH Server的port則開啟port # 22
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

不過我也很懷疑為何iptables不能進化一點,只有A跟I,只能把rule放在最前跟最後,何不妨讓人可以插入到某一條規則之後
使用如
iptables -A INPUT 2 -p tcp --dport 22 -j ACCEPT
就可以在規則2後加入一條規則

最後補上一條方便的規則,讓已經建立連線或者是由我們主機發出的封包引起對方回覆的封包進入,不然一些類似更新(apt/yum)可能無法正常運作
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

當然還可以擋掉一些討厭的網域區段或者mac address,這樣就完成了基本的INPUT Chain的部分
初學者可能常會想問,我知道service的名字或者套件的名字,但我怎麼知道他用的是tcp或者udp,還有走的port number呢?要用google去查嗎?其實大多知名的服務都不假外求,只要察看/etc/services這個檔案裡面就有了

以Fedora而言,完成之後記得把檔案寫到/etc/sysconfig/iptables這個檔案內,這樣下次開機他就會自動啟動了