2012年9月6日 星期四

限制 PulseAudio 的「非授權」聲音轉送

前文 "利用 PulseAudio 將聲音轉送到另一台電腦" 說明設定電腦聲耳在電腦間轉送的步驟,但是,不需經認證的程序就可以轉送聲音。若這兩台電腦不是自己專用的,任意轉送音效可是會嚇到別人,也可能會嚇到自己。

PulseAudio 這組套件,提供幾種簡單的認證程序,可避免未經允許的聲音轉送。在 Fedora 中的相關設定說明如下:

一、設定認證的相關模組、設定檔

PulseAudio 中與設定認證有相關的模組,有這四個:
module-esound-protocol-unix
module-native-protocol-unix
module-esound-protocol-tcp
module-native-protocol-tcp
後兩個的設定過程比較簡單,所以待會的設定步驟以這兩個模組為主。

設定認證的檔案有兩個:
/etc/pulse/default.pa :系統層級的設定檔,通常安裝 PulseAudio 時,就已設定妥當。維持預設內容、不需修改。
~/.pulse/default.pa :使用者級的設定檔,要額外設定模組時,再修改。否則維持原狀。(某些系統預設無此檔案)
認證密鑰檔有兩個,
~/.esd_auth :供 module-esound-protocol-{unix, tcp} 連線認證用
~/.pulse-cookie :供 module-native-protocol-{unix, tcp} 連線認證用

二、方法(一):使用「網路位址」認證

在「受音端」電腦中,編輯 "~/.pulse/default.pa " 這個檔案,此檔案位為使用者的「家目錄」(~/)中的一隱藏目錄(.pulse)之下,以 gedit 為例,
[SiB@Celeron-D ~]$ gedit ~/.pulse/default.pa
鍵入如下三列命令:
.include /etc/pulse/default.pa
load-module module-esound-protocol-tcp auth-ip-acl=127.0.0.1;192.168.10.0/24
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.10.0/24
其中,第一列命令是引入「系統層級的設定檔」,建立預設音效系統。第二、三列是限制開放「本地電腦」(網路位址:127.0.0.1)及「子網」(子網段:192.168.10.1 ~ 192.168.10.254)。兩個網路以上時,以「 ; 」間隔之。
    將設定檔儲存,再下命令重啟 PulseAudio 服務即可,
[SiB@Celeron-D ~]$ pulseaudio --kill
[SiB@Celeron-D ~]$ pulseaudio --start

註一:這些操作、設定皆在「受音端」電腦,在本機使用者的帳號下進行。「音源端」的設定參考之前的發文
註二:若要限制單一「遠端電腦」時,則網路位址要完整指定,例:192.168.10.17/32。

三、方法(二):使用「認證密鑰」認證

將「受音端」的使用者「家目錄」下的認證檔:".esd_auth" 及 ".pulse-cookie" 複製到「音源端」的使用者「家目錄」下。接著,再下命令重啟「音源端」的 PulseAudio 服務即可,
[SiB@Core-i7 ~]$ pulseaudio --kill
[SiB@Core-i7 ~]$ pulseaudio --start

註:這些操作、設定皆在「音源端」電腦,在本機使用者的帳號下進行。「受音端」的設定參考之前的發文

四、兩種「認證機制」的比較

「網路位址」優點:設定兩台電腦間的聲音轉送,設定簡單、直接。
缺點:當「音源端」有多位使用者時,無法分別設定使用權限。
「認證密鑰」優點:可設定至「個別」使用者的使用權限。
缺點:同一「音源端」電腦的多位使用者,都可使用時較麻煩。

注意:同時設定兩種認證時,請小心認證重疊的設定。即:「網路位址」認證的範圍較「認證密鑰」認證寬鬆。

五、使用經驗分享

以筆者的使用經驗,使用「認證密鑰」的在同一部「音源端」有多個「使用者」,而欲將聲音轉送至不同「使用者」所在的電腦時,其適用性較用「網路位址」來得方便。

已測試版本:

  • Fedora: (14 => 14), (17 → 14)

參考資料:

沒有留言:

張貼留言

感謝你耐心看完本文,歡迎留下任何指正、建議,筆者會儘快回應。(English is also welcome.)