Active-Directory

帶有 Active Directory 的 Samba - 共享是只讀的,NT_STATUS_MEDIA_WRITE_PROTECTED

  • June 26, 2017

我設置了一個似乎可以工作的 samba 伺服器,但是所有共享似乎都以只讀方式導出。該機器稱為“lx”。當我在 lx 上時,我可以執行以下命令:

froh@lx:~$ smbclient //lx/export -UAdministrator 
Enter Administrator's password:  
Domain=[CUSTOMER] OS=[Unix] Server=[Samba 3.5.4] 
smb: \> mkdir wrzlbrmpf 
NT_STATUS_MEDIA_WRITE_PROTECTED making remote directory \wrzlbrmpf
smb: \> ls
 .                                   D        0  Fri Dec  3 19:04:20 2010
 ..                                  D        0  Sun Nov 28 01:32:37 2010
 zork                                D        0  Fri Dec  3 18:53:33 2010
 bar                                 D        0  Sun Nov 28 23:52:43 2010
 ork                                          1  Fri Dec  3 18:53:02 2010
 foo                                          1  Sun Nov 28 23:52:41 2010
 gaga                                D        0  Fri Dec  3 19:04:20 2010

我該如何解決這個問題?


我做了什麼:

首先,我設置了全新安裝的 Ubuntu 10.10 x64。

其次,我讓 kerberos 使用以下 krb5.conf 文件:

[libdefaults]
       ticket_lifetime = 24000
       clock_skew = 300
       default_realm = CUSTOMER.LOCAL

[realms]
   CUSTOMER.LOCAL = {
       kdc = SB4.customer.local:88
       admin_server = SB4.customer.local:464
       default_domain = CUSTOMER.LOCAL
   }


[domain_realm]
       .customer.local = CUSTOMER.LOCAL
       customer.local = CUSTOMER.LOCAL

#[login]
#       krb4_convert = true
#       krb4_get_tickets = false

我還在 nsswitch.conf 中添加了 winbind 到 group、passwd 和 shadow。

看似 Kerberos 有效:

root@lx:~# net ads testjoin Join is OK root@lx:~# wbinfo -a ‘Administrator%MYSECRETPASSWORD’ 明文密碼認證成功 挑戰/響應密碼認證成功

wbinfo -u 和 wbinfo -g 還分別輸出使用者列表和組列表。我注意到域帳戶不包括域並且它們是德語(如在域伺服器 SBS 2003 上)。所以我在 wbinfo -u 的輸出中得到一個“Domänenbenutzer”,而不是“CUSTOMER+Domain User”或類似的東西。

我不確定我對 PAM 配置做了什麼,但這是我目前擁有的:

root@lx:/etc/pam.d# cat samba 
@include common-auth
@include common-account
@include common-session-noninteractive
root@lx:/etc/pam.d# grep -ve '^#' common-auth 

auth    [success=3 default=ignore]      pam_krb5.so minimum_uid=1000
auth    [success=2 default=ignore]      pam_unix.so nullok_secure try_first_pass
auth    [success=1 default=ignore]      pam_winbind.so krb5_auth krb5_ccache_type=FILE cached_login try_first_pass
auth    requisite                       pam_deny.so
auth    required                        pam_permit.so
root@lx:/etc/pam.d# grep -ve '^#' common-account 

account [success=2 new_authtok_reqd=done default=ignore]        pam_unix.so 
account [success=1 new_authtok_reqd=done default=ignore]        pam_winbind.so 
account requisite                       pam_deny.so
account required                        pam_permit.so
account required                        pam_krb5.so minimum_uid=1000
root@lx:/etc/pam.d# grep -ve '^#' common-session-noninteractive 

session [default=1]                     pam_permit.so
session requisite                       pam_deny.so
session required                        pam_permit.so
session optional                        pam_krb5.so minimum_uid=1000
session required        pam_unix.so 
session optional                        pam_winbind.so 

在某個時候,我將 linux 盒子加入了 AD 域。

在(手動)在 linux 機器上創建主目錄後,我可以使用 Adminstrator 使用者使用從 AD 獲取的密碼登錄。

現在我使用以下設置執行 samba:

[global]
       netbios name = LX
       realm = CUSTOMER.LOCAL
       workgroup = CUSTOMER
       security = ADS
       encrypt passwords = yes
       password server = 192.168.20.244     #IP des Domain Controllers
       os level = 0
       socket options = TCP_NODELAY SO_RCVBUF=16384 SO_SNDBUF=16384
       idmap uid = 10000-20000
       idmap gid = 10000-20000
       winbind enum users = Yes
       winbind enum groups = Yes
       preferred master = no
       winbind separator = +
       dns proxy = no
       wins proxy = no
#       client NTLMv2 auth = Yes
       log level = 2
       logfile = /var/log/samba/log.smbd.%U
       template homedir = /home/%U
       template shell = /bin/bash

[export]
       path = /mnt/sdc1/export
       read only = No
       public = Yes

目前我不在乎導出是導出給每個人還是只導出給一個使用者,我想在我開始擺弄身份驗證設置之前看到有人寫到那個目錄。(誰可以訪問它)。

如前所述,從 smbclient 訪問共享會導致此 NT_STATUS_MEDIA_WRITE_PROTECTED 。

從 Windows 訪問它會顯示看起來正確的 ACL(使用者可以寫入) - 但它不起作用,我只能讀取文件而不是寫入。

要導出的目錄如下所示:

root@lx:/etc/pam.d# ls -ld /mnt/
drwxr-xr-x 5 root root 4096 2010-11-28 01:29 /mnt/
root@lx:/etc/pam.d# ls -ld /mnt/sdc1/
drwxr-xr-x 4 froh froh 4096 2010-11-28 01:32 /mnt/sdc1/
root@lx:/etc/pam.d# ls -ld /mnt/sdc1/export/
drwxrwxrwx+ 5 administrator domänen-admins 4096 2010-12-03 19:04 /mnt/sdc1/export/
root@lx:/etc/pam.d# getfacl /mnt/
getfacl: Entferne führende '/' von absoluten Pfadnamen
# file: mnt/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

root@lx:/etc/pam.d# getfacl /mnt/sdc1/
getfacl: Entferne führende '/' von absoluten Pfadnamen
# file: mnt/sdc1/
# owner: froh
# group: froh
user::rwx
group::r-x
other::r-x

root@lx:/etc/pam.d# getfacl /mnt/sdc1/export/
getfacl: Entferne führende '/' von absoluten Pfadnamen
# file: mnt/sdc1/export/
# owner: administrator
# group: domänen-admins
user::rwx
group::rwx
group:domänen-admins:rwx
mask::rwx
other::rwx
default:user::rwx
default:group::rwx
default:group:domänen-admins:rwx
default:mask::rwx
default:other::rwx

天哪,我在看什麼?我瞎了眼看什麼?

我剛剛花費了大量的時間來調試我的伺服器,並且已經意識到共享和共享的目錄不能具有相同的名稱。

我不知道為什麼。我希望其他人在他們的過程中比我更早地偶然發現這一點。

如果共享名為“export”以外的其他名稱,則共享可以正常工作。非常奇怪,這花了我很長時間才弄清楚。因此,如果我將其共享為“exportt”(dobule-t),則它是可讀寫的,如果我將其共享為“export”,則它是只讀的。

一個問題仍然存在,是“導出”一些神奇的共享名稱嗎?

引用自:https://serverfault.com/questions/214279