Samba 使用 PAM 做認証?

這個版面主要討論 debian 在 server 端的應用問題, server 種類繁多..舉凡 Web Server 、 File Server、 DHCP Server..等等。

版主: 阿信

Samba 使用 PAM 做認証?

文章Tetralet » 週五 7月 25, 2003 3:08 am

這是百年老問題了,
但是我還是弄不出來...

使用環境:Debian Woody 3.0

安裝套件:samba、libpam-smbpass

修改 /etc/samba/smb.conf:
代碼: 選擇全部
encrypt passwords = false
obey pam restrictions = no


修改 /etc/pam.d/samba:
代碼: 選擇全部
auth            required        pam_smbpass.so nodelay
account         required        pam_smbpass.so nodelay
session         required        pam_smbpass.so nodelay
password        required        pam_smbpass.so nodelay


設定 Windows 98 使用 Plain Text 來進行認証。


可是不管我怎麼試,
Windows 98 還是無法使用 Linux 的密碼來存取 Samba Server 上所分享的資源,
必須要用 Samba 的密碼才行...

請問到底少了什麼步驟,
才能讓 Samba 使用 Linux 的密碼來進行認証呢?
時間並不能治療我心中的疼痛
南方的春天說什麼也溫暖不了我冰冷的血

誦唱大復活咒文,今天的 Tetralet 又在唧唧喳喳了 重生!
Tetralet
俺是博士
俺是博士
 
文章: 3078
註冊時間: 週四 11月 28, 2002 3:02 pm

re:Samba 使用 PAM 做認証?

文章阿信 » 週五 7月 25, 2003 2:59 pm

Tetralet兄好像誤會了pam_smbpass的用法了。(不知道小弟有無說錯,錯了還請原諒...:-))

smb_passwd的用法不是用在認證的,所以不管怎麼嘗試,是沒辦法直接讀取/etc/passwd和/etc/shadow來做認證。

如果有閱讀samba-doc中的pam文件的話,他會告訴你可以使用pam_pwdb.so,然後將/etc/pam.d/samba改成如下

auth required /lib/security/pam_pwdb.so nullok nodelay shadow audit
account required /lib/security/pam_pwdb.so audit nodelay
session required /lib/security/pam_pwdb.so nodelay
password required /lib/security/pam_pwdb.so shadow md5

這樣samba就會到/etc/passwd,和/etc/shadow做帳號的認證。

但很不巧的,Debian上面找不到pam_pwdb.so,因為pam_pwdb.so的Maintainer是 Redhat,也就是說用redhat才能實現,故debian是沒有包的。

所以又回到問題的原點,那我們開始來思考一下pam_smbpass.so的用途。

從package info中可以看到是拿來做 "sync" 的動作,也就是說,今天samba依然要有smbpasswd這個密碼檔,但只要透過 pam_smbpass.so 的話,那就可以將系統中的 /etc/shadow 密碼做同步化的動作,那未來只要有人更動了 Linux 系統中的密碼,那samba就會自動同步了。

ok!!!

既然知道方法了,那就開始設定。

1:修改/etc/pam.d/samba

auth required pam_unix.so
account required pam_unix.so
password requisite pam_unix.so
password required pam_smbpass.so smbconf=/etc/samba/smb.conf
session required pam_unix.so

2:修改/etc/samba.smb.conf
encrypt passwords = false
obey pam restrictions = no

然後先產生smbpasswd:dpkg-reconfigure samba
在create samba password file中選 yes

這樣就完成了,可以做個簡單的測試,可以先用一個帳號登入samba share,然後用ssh登入改系統密碼,重新開機,在進入samba的話,密碼已經改變了。

Tetralet兄,這樣的作法雖然跟你的理念不太一樣,但小弟卻是可行的,可以嘗試看看,祝成功... :-)

關於pam_pwdb.so的資訊可以看這邊http://ftp.kernel.org/pub/linux/libs/pam/Linux-PAM-html/pam-6.html#ss6.19
頭像
阿信
版面大總管
版面大總管
 
文章: 4756
註冊時間: 週二 9月 03, 2002 11:58 pm
來自: 台灣 - 嘉義

re:Samba 使用 PAM 做認証?

文章Tetralet » 週五 7月 25, 2003 6:33 pm

天哪!回覆了那麼長長的一篇,
光打那麼多字一定很辛苦吧?
實在是

 非~常~感~動~~~

:w_20: :w_25: :w_28: :w_30: :w_34: :w_35: :w_39: :w_42:

阿信 寫:Tetralet兄好像誤會了pam_smbpass的用法了。(不知道小弟有無說錯,錯了還請原諒...:-))


我當時的確是想不透...

阿信 寫:smb_passwd的用法不是用在認證的,所以不管怎麼嘗試,是沒辦法直接讀取/etc/passwd和/etc/shadow來做認證。


其實我們可以經由修改 /etc/samba.smb.conf 來讓 Samba 使用 /etc/passwd 來進行認証,
方法是修改 /etc/samba/smb.conf:

代碼: 選擇全部
encrypt passwords = false
obey pam restrictions = no


而 /etc/pam.d/samba 則保持原樣不要動它,
之後設定 Windows Client 使用 Plain Text 來進行認証即可。


這也就是上一篇阿信兄所提的做法。


使用這個做法時,
Samba 會使用 /etc/passwd 來進行認証,
所以使用者可以在使用 passwd 變更密碼後用新的密碼登入 Samba,
並且我們可以觀察一下,
這個做法下不管密碼怎麼變,
絕對不會動到 /etc/samba/smbpasswd 這個檔案,
因為它和 /etc/passwd 之間並不會進行同步的作業。

不過這樣子就必須設定 Windows Client 要使用 Plain Text 來進行認証,
我想這並不是一個好方法。

阿信 寫:從package info中可以看到是拿來做 "sync" 的動作,也就是說,今天samba依然要有smbpasswd這個密碼檔,但只要透過 pam_smbpass.so 的話,那就可以將系統中的 /etc/shadow 密碼做同步化的動作,那未來只要有人更動了 Linux 系統中的密碼,那samba就會自動同步了。


我那時一直在想,pam_smbpass.so 到底是如何做到這一點的呢?
它既不是一個 Daemon,
也不可能把 /etc/shadow 的密碼解碼後再寫入 /etc/samba/smbpasswd 中。

而在 Package Info 中提到的:
代碼: 選擇全部
Unlike other solutions, it does this without requiring users to change their existing passwords or login to Samba using cleartext passwords.

它並不用要求 Windows Client 使用 Plain Text 來進行認証,
更是讓我百思不得其解。

後來想了很久,
我想,應該是在使用者用 passwd 來變更密碼的同時,
也同時將新的密碼寫入 smbpasswd 中。

所以,答案就揭曉了!


其實正確的做法是去修改 /etc/pam.d/passwd,
改成像以下這個樣子:

代碼: 選擇全部
password   required   pam_unix.so nullok obscure min=4 max=8 md5
password   sufficient pam_smbpass.so audit use_first_pass


而 /etc/samba/smb.conf 則保持原樣不要去修改它:

代碼: 選擇全部
encrypt passwords = true
obey pam restrictions = no


/etc/pam.d/samba 也是一樣不用去動它。

這樣子使用者用 passwd 來變更密碼的同時,
也會同時將新的密碼寫入 smbpasswd 中了。
而這也就是讓 /etc/samba/smbpasswd 和 /etc/passwd 之間保持同步的方法。

經過一些小小的測試,
使用 passwd 來變更 Linux 密碼時,
果然 Linux 的密碼和 Samba 的密碼真的可以保持同步!

不過使用 smbpasswd 來變更 Samba 密碼時,
並不會修改到 Linux 的密碼,
因為此時 Samba 並不使用 PAM 來處理密碼的變更。


多謝 阿信兄 的指點我才能想出真正的解決方法。
非常感謝!! ^_^
時間並不能治療我心中的疼痛
南方的春天說什麼也溫暖不了我冰冷的血

誦唱大復活咒文,今天的 Tetralet 又在唧唧喳喳了 重生!
Tetralet
俺是博士
俺是博士
 
文章: 3078
註冊時間: 週四 11月 28, 2002 3:02 pm

re:Samba 使用 PAM 做認証?

文章阿信 » 週五 7月 25, 2003 7:02 pm

:w_28: :w_28: :w_28: ...

Tetralet兄果然厲害,研究的夠徹底,敬佩敬佩... ;-)

原來小弟的想法有錯誤,還野人獻曝,實在丟人阿...:y2_01:

而這個方式小弟都沒想過,看來這一篇一定要收錄到精華區才是阿... :y2_03:

至於用smbpasswd來更改密碼的問題,我想應該不用care,因為smbpasswd並非suid程式,所以user根本不能修改密碼,所以...forget it...:-)

感謝Tetralet兄特別的測試與總結,小弟又受惠了... :w_20:
頭像
阿信
版面大總管
版面大總管
 
文章: 4756
註冊時間: 週二 9月 03, 2002 11:58 pm
來自: 台灣 - 嘉義

re:Samba 使用 PAM 做認証?

文章Tetralet » 週五 7月 25, 2003 7:32 pm

修正一下...

Tetralet 寫:不過使用 smbpasswd 來變更 Samba 密碼時,
並不會修改到 Linux 的密碼,
因為此時 Samba 並不使用 PAM 來處理密碼的變更。


我試過了,
如果在 /etc/samba/smb.conf 中加入了

代碼: 選擇全部
unix password sync = yes


那麼使用 smbpasswd 來變更 Samba 密碼時,
smbpasswd 也會同時修改 Linux 的密碼。

這樣一來不管是用 passwd 或是 smbpasswd 都可以讓 /etc/samba/smbpasswd 和 /etc/passwd 之間保持同步了。


不過 smbpasswd 並非 suid 程式,
那它是怎麼樣做到的呀?
該不會是它自行呼叫了 passwd 程式???
時間並不能治療我心中的疼痛
南方的春天說什麼也溫暖不了我冰冷的血

誦唱大復活咒文,今天的 Tetralet 又在唧唧喳喳了 重生!
Tetralet
俺是博士
俺是博士
 
文章: 3078
註冊時間: 週四 11月 28, 2002 3:02 pm

re:Samba 使用 PAM 做認証?

文章阿信 » 週五 7月 25, 2003 9:36 pm

asho@SeXyDebian:~$ smbpasswd
Old SMB password:
New SMB password:
Retype new SMB password:
machine 127.0.0.1 rejected the password change: Error was : RAP86: The specified password is invalid.
Failed to change password for asho

就算我密碼打對了,依然無法變更。但用root卻可以。
頭像
阿信
版面大總管
版面大總管
 
文章: 4756
註冊時間: 週二 9月 03, 2002 11:58 pm
來自: 台灣 - 嘉義

re:Samba 使用 PAM 做認証?

文章Tetralet » 週六 7月 26, 2003 6:45 am

我想,
先用 root 來重新設置使用者的密碼,
讓該使用者的 Linux 密碼和 Samba 的密碼能夠同步,
接下來該使用者應該就可以自己來設定密碼了。

因為我猜 pam_smbpass.so 在變更 Samba 密碼時,
會以 Linux 的舊密碼當作 Samba 的舊密碼來進行驗証,
如果兩者沒有事先同步可能會出問題。
時間並不能治療我心中的疼痛
南方的春天說什麼也溫暖不了我冰冷的血

誦唱大復活咒文,今天的 Tetralet 又在唧唧喳喳了 重生!
Tetralet
俺是博士
俺是博士
 
文章: 3078
註冊時間: 週四 11月 28, 2002 3:02 pm

re:Samba 使用 PAM 做認証?

文章阿信 » 週六 7月 26, 2003 9:05 am

小弟猜的啦...

當勾選了sync password這個選項後,他就會呼叫password program和password chat。

而smb.conf中,password program是/usr/bin/passwd,然後就只會用到shadow檔案的認證,而不會用到smbpasswd...

當然這只是猜的啦,明天回來小弟再來trace看看他的流程... :-)

另外,小弟之前post方法是只有產生smbpasswd的帳號而已,但都沒有用root設定samba密碼窩,所以皆是用pam_smbpass.so來做sync的動作。
頭像
阿信
版面大總管
版面大總管
 
文章: 4756
註冊時間: 週二 9月 03, 2002 11:58 pm
來自: 台灣 - 嘉義

re:Samba 使用 PAM 做認証?

文章Tetralet » 週六 7月 26, 2003 12:23 pm

阿信 寫:當然這只是猜的啦,明天回來小弟再來trace看看他的流程... :-)


請教一下阿信兄想要如何去 trace 呢?
看 Source Code ?
時間並不能治療我心中的疼痛
南方的春天說什麼也溫暖不了我冰冷的血

誦唱大復活咒文,今天的 Tetralet 又在唧唧喳喳了 重生!
Tetralet
俺是博士
俺是博士
 
文章: 3078
註冊時間: 週四 11月 28, 2002 3:02 pm

re:Samba 使用 PAM 做認証?

文章阿信 » 週六 7月 26, 2003 12:33 pm

小弟可能會搭配strace來找passwd這個程式以及找smbpasswd

Source code除非不得已才會想看.... :-)
頭像
阿信
版面大總管
版面大總管
 
文章: 4756
註冊時間: 週二 9月 03, 2002 11:58 pm
來自: 台灣 - 嘉義

re:Samba 使用 PAM 做認証?

文章Tetralet » 週六 7月 26, 2003 1:39 pm

阿信 寫:小弟可能會搭配strace來找passwd這個程式以及找smbpasswd

Source code除非不得已才會想看.... :-)


strace??

又是新鮮的東西。
找機會來玩玩看!
時間並不能治療我心中的疼痛
南方的春天說什麼也溫暖不了我冰冷的血

誦唱大復活咒文,今天的 Tetralet 又在唧唧喳喳了 重生!
Tetralet
俺是博士
俺是博士
 
文章: 3078
註冊時間: 週四 11月 28, 2002 3:02 pm

re:Samba 使用 PAM 做認証?

文章阿信 » 週三 7月 30, 2003 3:05 pm

Tetralet兄,小弟測試了一下你的方法,但卻是失敗的... :-(

不知倒是那邊不對,先post一下我的環境

Debian woody

#smb.conf

security = user
encrypt passwords = true
obey pam restrictions = no

# 產生 smbpasswd
cat /etc/passwd |mksmbpasswd > /etc/samba/smbpasswd

# /etc/pam.d/samba
auth required pam_unix.so nullok
account required pam_unix.so
session required pam_unix.so
password required pam_unix.so

# /etc/pam.d/passwd
password required pam_unix.so nullok obscure min=4 max=8 md5
password sufficient pam_smbpass.so audit use_first_pass

client PC是 WinXP,但總是無法登入,用smbclient測試是說 Bad Password...

目前還不知道什麼原因,還請Tetralet兄幫忙debug一下,謝謝。
頭像
阿信
版面大總管
版面大總管
 
文章: 4756
註冊時間: 週二 9月 03, 2002 11:58 pm
來自: 台灣 - 嘉義

re:Samba 使用 PAM 做認証?

文章Tetralet » 週三 7月 30, 2003 4:21 pm

首先,為了讓 Windows XP 能順利加入網域,
必須要讓 root 能登入 Samba 才行。

修改 /etc/samba/smb.conf,將 invalid users = root 給註解起來:

代碼: 選擇全部
;   invalid users = root



再來,以下列命令在 /etc/passwd 和 /etc/samba/smbpasswd 中加入 Windows XP 的電腦帳號(Netbios Name):

代碼: 選擇全部
adduser --no-create-home --disabled-password --disabled-login --force-badname NetbiosName$
smbpasswd -a -m NetbiosName$


注意在 adduser 未端的 $ 符號。
同時在 smbpasswd 中這個 $ 符號則可有可無。


接下來很可能是阿信兄忽略的地方:

在 Windows XP Professional 加入網域之前,
要先在 Registry 中修改:

代碼: 選擇全部
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters]
"requiresignorseal"=dword:00000000


修改完畢後必須將 Windows XP Professional 重新開機使其生效。

然後以 root 的帳號密碼應該就可以順利加入 Samba 網域了。


請您試試看!


至於 smbclient 說 Bad Password...
這個我等會再試試看,
因為 Samba 的環境我已經砍掉了...
時間並不能治療我心中的疼痛
南方的春天說什麼也溫暖不了我冰冷的血

誦唱大復活咒文,今天的 Tetralet 又在唧唧喳喳了 重生!
Tetralet
俺是博士
俺是博士
 
文章: 3078
註冊時間: 週四 11月 28, 2002 3:02 pm

re:Samba 使用 PAM 做認証?

文章Tetralet » 週三 7月 30, 2003 5:30 pm

阿信 寫:#smb.conf

security = user
encrypt passwords = true
obey pam restrictions = no


我的 obey pam restrictions 的預設值為 yes,
我沒有去動它。

在這裡並請再加上
代碼: 選擇全部
   unix password sync = true



阿信 寫:# /etc/pam.d/samba
auth required pam_unix.so nullok
account required pam_unix.so
session required pam_unix.so
password required pam_unix.so


/etc/pam.d/samba 不用去動它沒有關係。

還有,
請千萬別忘了替 root 設定 Samba 的密碼!


請您再試試看!
時間並不能治療我心中的疼痛
南方的春天說什麼也溫暖不了我冰冷的血

誦唱大復活咒文,今天的 Tetralet 又在唧唧喳喳了 重生!
Tetralet
俺是博士
俺是博士
 
文章: 3078
註冊時間: 週四 11月 28, 2002 3:02 pm

re:Samba 使用 PAM 做認証?

文章阿信 » 週三 7月 30, 2003 6:19 pm

hmm...謝謝Tetralet兄的提醒... :-D

小弟思考了一下這兩個作法的利弊,一個是小弟提出的,也就是plain password,另一個是Tetralet兄的方式。

小弟沒有實際test Tetralet兄的方法,因為在測試之前弟想到別的問題而讓我重新考慮一下兩者的評估。

這兩個辦法對windows client而言,似乎都要更動到registry的方式,所以比較麻煩。

而弟的方式是取消加密,讓pam來處理,而Tetralet兄是必須(?)啟動root帳號和加入windows端的netbios name(如果有新的client可能又要手動加入)。

以上應該都不是管理者想碰的,畢竟會有安全性的考量,似乎沒有兩全其美的方式。

目前小弟考慮的有無辦法是可加密,且無須用到root,且無須管client端的PC,以帳號密碼為主。

等一下繼續研究 Pam 與 Samba是否都不能加密,小弟來trace一下client端輸入密碼是否真的會變成明碼好了。
頭像
阿信
版面大總管
版面大總管
 
文章: 4756
註冊時間: 週二 9月 03, 2002 11:58 pm
來自: 台灣 - 嘉義

下一頁

回到 debian server

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客

cron