2014/03/13

Freeradius 設定作 eap 認證

eap 認證

eap 認證有兩點要注意
  1. freeradius 必須有伺服器憑證
  2. 被認證端的根憑證必須在 trusted ca

信任的 ca 設定

/etc/raddb/eap.conf
eap{
    tls {
        CA_file = ${cadir}/ca.pem
    }
}

測試

安裝 eapol_test 需用 root 權限
wget http://hostap.epitest.fi/releases/wpa_supplicant-0.5.10.tar.gz
tar xvf wpa_supplicant-0.5.10.tar.gz
cd wpa_supplicant-0.5.10/
cp defconfig .config
make eapol_test
cp eaplo_test /usr/bin
測試用 config 檔 /tmp/eapol_test.conf.peap
network={
  eap=PEAP
  eapol_flags=0
  key_mgmt=IEEE8021X
  identity="myid"
  password="mypw"
  ca_cert="/etc/raddb/certs/ca.pem"
  phase2="auth=MSCHAPV2"
  anonymous_identity="anonymous"
}
執行測試
eapol_test -c /tmp/eapol_test.conf.peap -a127.0.0.1 -p1812 -stesting123 -r1
傳回結果,看到 SUCCESS 表示認證連結成功
... ... ... ... 省略 ... ... ... ...
EAP: deinitialize previously used EAP method (25, PEAP) at EAP deinit
ENGINE: engine deinit
MPPE keys OK: 1  mismatch: 0
SUCCESS
標籤: (Edit tags)

2014/02/06

修正 sourceforge 裡面 igmpproxy 在 pppx 連線下 (例如 pppoe) 無法運作的問題

igmpproxy 透過 config 檔設定 interface 是 upstream 或是 downstream,然後由 ifvc.c 裡面的 buildIfVc() 來建立各 interface 的資訊。buildIfVc() 建立資訊的方式是去蒐集各 interface 的 ip 資訊,然而 p-t-p 的 ip 資訊會拿到近端 ip/32,導致無法成功運行 igmpproxy 該做的事情。所以需要更改程式,讓他取得遠端的 ip 而不是近端的 ip 才能正常運作。

需增加的程式如下(紅色部份):
            if ( ioctl( Sock, SIOCGIFFLAGS, &IfReq ) < 0 )
                my_log( LOG_ERR, errno, "ioctl SIOCGIFFLAGS" );

            IfDescEp->Flags = IfReq.ifr_flags;

            // aimwang: when pppx get dstaddr for use
            if (0x10d1 == IfDescEp->Flags)    // when pppx
            {
                if ( ioctl( Sock, SIOCGIFDSTADDR, &IfReq ) < 0 )    // get dstaddr
                    my_log(LOG_ERR, errno, "ioctl SIOCGIFDSTADDR for %s", IfReq.ifr_name);
                addr = ((struct sockaddr_in *)&IfReq.ifr_dstaddr)->sin_addr.s_addr;    // rewrite addr
                subnet = addr & mask;    // recalc subnet
            }

            // Insert the verified subnet as an allowed net...
            IfDescEp->allowednets = (struct SubnetList *)malloc(sizeof(struct SubnetList));
            if(IfDescEp->allowednets == NULL) my_log(LOG_ERR, 0, "Out of memory !");

這樣就能取得遠端 ip 來進行 igmpproxy 該有的行為

2013/10/25

IDA pro 直接更改 asm 程式碼的方法

IDA pro 是一套很好用的反組譯程式,但是他把很重要的直接更改指令功能藏起來了,不能直接更改就只能看程式怎麼跑而已。如果有需要修改程式的話,只要
編輯 cfg/idagui.cfg
把 DISPLAY_PATCH_SUBMENU    = NO
改成 DISPLAY_PATCH_SUBMENU    = YES
這樣 edit/patch 就會出現,就能直接改程式碼了

2013/10/24

替 VMWare 採用 LVM 的系統擴充硬碟空間

前提:你的 HOST 硬碟要夠大

第一步:擴展虛擬機器的硬碟空間

  • 因為 LVM 只能使用 Primary Partition,一顆硬碟只能開四個,所以如果已經用掉四個 Primary Partition,請再增加一顆新的虛擬硬碟。

第二步:建立新的 LVM partition

  1. 執行 fdisk -l 查看目前的 partition 建立狀況
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1   *           1          13      104391   83  Linux
    /dev/sda2              14        1305    10377990   8e  Linux LVM
  2. 執行 fdisk /dev/sda (如果是第二顆硬碟要把 sda 改成 sdb,第三顆是 sdc,以此類推)
  3. 輸入  n   add a new partition
  4. 輸入 p primary partition
  5. 如果已經有三個 primary partition,就沒得選只能建立第四個,否則看是要建立第幾個 primary partition 輸入其數字,如本例要輸入 3
  6. 輸入 t change a partition's system id
  7. 輸入剛才建立好的 partition 編號,如本例是 3 
  8. 輸入 8e Linux LVM
  9. 輸入 w write table to disk and exit
  10. 執行 partprobe 免重開機立即套用 fdisk 的變更
  11. 執行 pvcreate /dev/sda3 建立實體 LVM (sda3 是剛才建立的 partition,請視情況改變)

第三步:把新的 LVM partition 加入現有 LVM Group

  1. 執行 lvs 檢視現有的 LVM 狀況
      LV       VG         Attr   LSize   Origin Snap%  Move Log Copy%
      LogVol00 VolGroup00 -wi-ao  10.37G
    留意 
    LogVol00 跟 VolGroup00
  2. 執行 vgextend VolGroup00 /dev/sda3 其中 VolGroup00 是要擴充的 LVM Group,sda3 是剛剛建立的 LVM partition
  3. 執行 vgdisplay 檢視 LVM Group 的狀況
    --- Volume group ---
    ... ... 中間省略 ... ...
    Free  PE / Size       110 / 10.00 GB
    留意 PE 的值 110 ,後面會用到
  4. 執行 lvresize -l +110 /dev/VolGroup00/LogVol00 其中 110 是剛才的 PE,VolGroup00 跟 LogVol00 用第一個指令查出來的
  5. 執行 resize2fs -p /dev/VolGroup00/LogVol00 變更 filesystem 的紀錄,變更後 df -h 才會看到新的容量。

第四步:開心使用新容量繼續剛剛因為容量不足而扼腕的工作

2013/06/27

Debian 讓 root 能跑 chromium

編輯 /etc/chromium/default
CHROMIUM_FLAGS 增加 --user-data-dir

存檔後就能用 root 打開 chromium