ecryptfsd

ecryptfs-utils 裡的 ecryptfsd 可以透過 netlink 或 misc 方式與 kernel 的 ecryptfs module 溝通,Ubuntu 有修改過 kernel 的 ecryptfs ,讓 ecryptfsd 以 misc 的方式溝通。
而我,就卡在這裡搞了好久,因為我始終用 kernel 的預設值,也就是 netlink 的方式。
照理來說,netlink 應該也是可以才對,只是在 ecryptfsd 裡有段 code(嚴格來說應該是 libecryptfs.so),在以 sendto 送出封包以後,檢查回傳值,如果大於 0 ,就當作錯誤。你可以查一下 sendto 函式的說明,裡面清楚地寫了,當傳送成功,會回傳 sendto() 所送出的 byte 數。ecryptfsd 以 sendto 送出了 16 bytes,收也收到了 16 bytes,這樣應該是要當作成功,但程式裡卻視為失敗。
我不知道修正這裡以後還會遇到什麼問題,所以我決定很鴕鳥地去改用 ubuntu 的 kernel …

直接設定密碼免提示輸入

用 passwd 設定密碼是免不了要回答提示問題的,有方法可以省掉嗎?
如果可以省掉,在大量設定密碼的情況下會很方便。

方法說穿了很簡單,先用 mkpasswd 產生密碼,再用 usermod 來變更使用者密碼。
以下節錄自 call useradd and passwd through no prompt script – LinuxQuestions.org

#!/bin/bash
## Set a default password and perform a password reset
l_user=$1
if [ "$l_user" != "" ]
then
l_password="Reset"
l_encrypted_pass=$(mkpasswd -s --hash=md5 ${l_password})
echo "/usr/sbin/usermod -p ${l_encrypted_pass} ${l_user}"
fi

感恩啦!本來已經想用 sed/awk 去硬改 passwd/shadow 檔案了說…

TPM 與 ecryptfs

基本都是參考:

另外遇到問題可以參考 IBM 的 troubleshooting,最近 IBM 不知道是網站改版還怎樣,之前留的網址都失聯了,你可以用 ibm ecryptfs troubleshooting 去 google 找。
下面的步驟最好全部以 root 或 sudo 來執行:

  1. 進 BIOS 把 TPM clear 掉
  2. 我的環境正好是用 infineon 的,所以用 modprobe tpm_infineon,一般好像是用 tpm_tis 就行了。
  3. 啟動 trousers:tcsd -f,不用 -f 的話,會掛…這個 daemon 提供 tspi 服務並且與 TPM device 溝通。
  4. 取得 ownership:tpm_takeownership ,這個步驟裡,SRK password 跟其後的 Confirm password 不要輸入!!否則要回到步驟 0 重設。SRK 是 Storage Root Key 的縮寫,不使用密碼保護的原因是為了 ecryptfs 取用方便。
  5. 掛載 ecryptfs:modprobe ecryptfs
  6. 啟動 ecryptfsd
  7. 產生 UUID:ecryptfs-generate-tpm-key -p 1 ,這個 UUID 是提領 key 用的,實際的 key 會透過 PCR 1 的 key 來取得(如果我沒理解錯的話)。

至此,準備工作已經完成,接下來就是操作,這裡我假設 private 是放置要加密的資料的地方:

  1. 先建立:mkdir private
  2. 進行掛載:mount -t ecryptfs private private
  3. 依序回答問題,第一個先選 tspi,第二個問題(cipher)選 aes,第三個問題(key bytes)選 16 bytes,第四個問題(passthrough)選 n,最後問題照預設值。第一個問題是加密方式,你也可以使用其他方式,但這樣就用不到 TPM 了;cipher 跟 key bytes 可以視需要自行調整。這樣就能 mount 上,mount 以後,ecryptfs 會把 UUID 存到 keyring (用 keyctl show 可以看 keyring 內容)裡。

在 private 資料夾裡的操作,基本上不能複寫,只能複製、貼上,但 vim 可編輯。
umount 之前,最好先輸入 mount,把參數記下。
umount 之後,可以直接以參數來掛載,這樣就不用再次回答問題:mount -t ecryptfs -o sig=UUID,ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_passthrough=n private private
參數裡,有個 sig,這個 sig 就是填 UUID,不過你輸入 mount 時,看到的卻不是 UUID,而是一個較短的字串。這字串其實是一個提領 UUID 的鑰匙,ecryptfs 會用這個鑰匙去 keyring 裡(用 keyctl show 可以看到),取出 UUID,再以 UUID 去掛載。keyring 主要存放在 kernel 的某個地方,所以重開機以後就會消失,我還不知道怎麼把 keyring 內容存起來。
好吧,以上就是我這幾天跟 TPM 奮戰的紀錄…

amr 轉 mp3

環境:Ubuntu 8.10

  1. 安裝必要的套件:
    sudo apt-get install amrnb sox lame
  2. 輸入以下指令:
    amrnb-decoder file.amr file.raw # 先轉成 raw 檔
    sox -r 8000 -w -c 1 -s file.raw -r 16000 -w -c 1 file.wav # 再轉為 wav
    lame babycry.wav babycry.mp3 # 最後轉為 mp3
    

整理一下,把它作成 script:

#!/bin/bash
# amr2mp3.sh
FILE=`basename $1 .amr`  # remove .amr
amrnb-decoder $1 $FILE.raw
sox -r 8000 -w -c 1 -s $FILE.raw -r 16000 -w -c 1 $FILE.wav
lame $FILE.wav $FILE.mp3
rm -f $FILE.raw $FILE.wav
exit 0

收工。

參考自Aquarionics 的 blog:How to convert AMR files to MP3

pam_smbpass.so

安裝 samba 以後,讓 samba 密碼跟 linux 密碼一致的好方法,先安裝 libpam-smbpass,然後執行 sudo pam-auth-update,把 SMB password synchronization 選起來即可。以後改密碼時,samba 密碼也會自動被更改。
對了,我的 linux 是 ubuntu 8.10,samba security level 是 user,安裝以後有先利用 smbpasswd -a 把必要的使用者加進去。

javascript + gtk = seed

昨天在這兒:Building desktop Linux applications with JavaScript看到的,現在可以用 JavaScript 來寫 GTK Application 了,如果以後再支援 DOM、selector與類似 XUL 語法(GLADE?)的話,應該會吸引一堆會 javascript + html 的人來用吧~
不過話說回來,XUL 好像也沒非常風行啊~
該專案的官方網站在:Seed
Anyway, 如果你想試試的話,已經有人打包了 for Ubuntu 的 package 了,位置在這裡:PPA for Orange Owners
詳細安裝方法,文章裡都寫的很清楚,這裡就不再贅述了。

registry-tools

由於太座的大意,使得 NB 中了 USB 病毒,而小紅傘解不掉。我知道進 Linux 以後就能把 USB 病毒埋的檔案砍掉,但砍了再砍,重開機進 Windows 以後,病毒還是繼續作怪,看來,病毒還是有埋我不知道的暗樁。
Registry 裡面有兩個機碼 Run 跟 RunOnce,在每次開機、登入時,都會去執行這裡有指定的程式。
本來不奢求 Linux 有工具可以存取 Windows Registry 的,沒想到用 apt-cache 一找,還真的有,這個套件叫做 registry-tools。
套件提供了 regshell、regpatch、regdiff、regtree 這幾個工具,可以讓你存取 Windows Registry。
但 Windows Registry 檔案在哪裡呢?Windows 2000 以後,HKEY_CURRENT_USER 改放到使用者的 Home 目錄下,也就是 c:\documents and settings\your_name\ntuser.dat
所以只要進 Linux,把 Windows 分割區掛載起來,用 regshell -f ntuser.dat 開啟以後就可以對 Registry 操作了。
regshell 的命令列介面也不難,基本上就是 cd、ls、rm 這幾個,用 help 可以看詳細的指令列表,這裡不多說了。
總之切到 Software\Microsoft\Windows\CurrentVersion\Run 跟 Software\Microsoft\Windows\CurrentVersion\RunOnce 下把一些奇怪的項目刪掉以後,就大功告成了。

envyng

如果你用 nVidia 或 ATi 的顯示卡的話,用 envyng 可以很快的搞定一切設定。
早知道有這麼好用的 script ,當初設定 ATi 顯卡時,就不用那麼累了。
我唯一踩到的地雷是把 LANG 設為 C,導致 envyng 執行時,出現錯誤,要記得使用 utf-8,例如:export LANG=en_US.utf-8

sudo /etc/init.d/gdm stop
sudo apt-get install envyng-core
sudo envyng -t
sudo nvidia-xconfig
sudo /etc/init.d/gdm start

參考來源:[ubuntu] [SOLVED] Intrepid Nvidia driver issue. Boots to text – Ubuntu Forums