Samba 与 Active Directory - 共享为只读,NT_STATUS_MEDIA_WRITE_PROTECTED

Samba 与 Active Directory - 共享为只读,NT_STATUS_MEDIA_WRITE_PROTECTED

我设置了一个似乎可以工作的 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

我还将 winbind 添加到 nsswitch.conf 中的组、密码和阴影中。

看起来 Kerberos 是有效的:

root@lx:~# net ads testjoin 加入成功 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 机器上(手动)创建主目录后,我可以使用从 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

天啊,我到底忽略了什么?我到底有多盲目,看不到什么?

答案1

我刚刚花了大量的时间来调试我的服务器,并意识到共享和被共享的目录不能有相同的名称。

我不知道为什么。我希望其他人能比我更早地发现这一点。

答案2

如果共享的名称不是“export”,则共享可以正常工作。很奇怪,我花了很长时间才弄清楚。因此,如果我将其共享为“exportt”(dobule-t),则它是可读写的,如果我将其共享为“export”,则它是只读的。

剩下的一个问题是,“导出”是某种神奇的共享名称吗?

答案3

我还记录了共享名称和目录名称不能相同,否则尽管有权限,共享仍将可见且只读。当将共享名称修改为不同于目录(或磁盘)名称时,它将变为可写,前提是它和用户具有正确的权限。

我发现在 Ubuntu 中安装的 NTFS 磁盘和文件夹之前使用相同的共享名称在 NTFS 下共享时也存在此问题。Win 和 Linux 共享工具在创建时都默认使用目录或磁盘名称作为其共享名称,因此默认情况下冲突是内置的。只需在 Linux 共享名称中添加一个字符即可使其可写。

如果磁盘或目录不是 NTFS 或虽然是 NTFS 但从未共享过,则情况可能正确也可能不正确。在 Ubuntu 中安装时,似乎会保留以前使用的 NTFS 共享名称,而 Linux 通过将共享设为只读来处理冲突。

在 Ubuntu 中,只需将名为 \My Music 的 NTFS 目录共享重命名为 \My Muzak 即可使该目录可写。

相关内容