web-dev-qa-db-ja.com

Samba 4:ドメインに参加しましたが、すべてのユーザーが誰にもマッピングされておらず、Windowsクライアントから共有にアクセスできません

私は、Debian/Jessie Samba 4.2.14をADメンバーとして実行しています。 ADCはWindows2008R2サーバーです。参加は問題なく働いた。

# net ads testjoin
Join is OK

wbinfo -uwbinfo -gは完全に機能し、期待どおりにADのユーザーとグループのリストを提供します。 wbinfo -i <user>も機能します:

# wbinfo -i TESTAD\\testuser
TESTAD\testuser:*:4294967295:4294967295:testuser:/home/TESTAD/testuser:/bin/false

編集:ここで何かが間違っています。wbinfo -iは、@ TheSkunkが述べたように、2 ^ 32 -1であるID 4294967295にすべてのユーザーとグループをマップするためです。

編集2:wbinfo --sid-to-uid TESTAD\\testuserは失敗します。確かに、いくつかのidmapパラメータを明示的に設定する必要があります(デフォルトではまったく機能しないようです)が、どうやって?

編集3:次の2行をsmb.confに追加しました。

idmap config * : backend = tdb
idmap config * : range = 10000-30000

そして今、ẁbinfo-i TESTDOMAIN\testuserreports a valid id, and a different one for each and every user. However I still have the same problems (all users mapping to nobody,id andgetent`はADユーザーを知らないなど)。

ただし、getent passwd TESTAD\\testuserは失敗します。

# getent passwd TESTAD\\testuser
# echo $? 
2

私はsmbclientを使用して、任意のADアカウントでサーバーに接続できます

# smbclient //srv1/data -U TESTAD\\testuser
Enter TESTAD\testuser's password: 
Domain=[TESTAD] OS=[Windows 6.1] Server=[Samba 4.2.14-Debian]
smb: \> ls
  .                                   D        0  Fri Feb 17 16:23:04 2017
  ..                                  D        0  Wed Feb  1 16:47:02 2017
  test.txt                            N        5  Fri Feb 17 14:38:21 2017
  popo                                D        0  Fri Feb 17 16:23:04 2017

                117125466112 blocks of size 1024. 117052392484 blocks available
smb: \> 

ただし、接続はnobody/nogroupにマップされ、作成されたファイルはnobodyも所有します。 Windowsマシンは、ADアカウントを使用して接続できません。ただし、smbpasswd -a <user>を使用してローカルアカウントを作成すると、そのアカウントを使用して接続できます。ただし、アカウントもローカルに存在しますが、接続パラメーター、ファイルなどはすべてnobodyにマッピングされます。

これが現在のsmb.confです(可能な限りデフォルトに近い):

[global]
        workgroup = TESTAD
        realm = TESTAD.lan
        server role = member server
        security = ADS
        map to guest = Bad User
        obey pam restrictions = Yes
        pam password change = Yes
        passwd program = /usr/bin/passwd %u
        passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
        unix password sync = Yes
        syslog = 0
        log file = /var/log/samba/log.%m
        max log size = 1000
        dns proxy = No
        usershare allow guests = Yes
        panic action = /usr/share/samba/panic-action %d
        idmap config * : backend = tdb
        inherit permissions = Yes
        inherit acls = Yes


[DATA]
        path = /mnt/raid/
        read only = No
        guest ok = Yes

ここに/etc/nsswitch.confがあります(私はシャドウから 'winbinddを追加および削除しようとしましたが、まったく変更されていません):

# cat /etc/nsswitch.conf 
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat winbind
group:          compat winbind
shadow:         compat winbind
gshadow:        files

hosts:          files mdns4_minimal [NOTFOUND=return] dns wins
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

認証がwinbindを通過しないように見える理由がわかりません。私は必死になっています、何かアイデアはありますか?

1
wazoox

中心的な問題であるパッケージが見つからないことがわかりました。残念ながら、これを正しく行うのは簡単ではありません。これが最終的な動作構成です(samba.orgのRowland Pennyに感謝)。

必要なパッケージがすべてインストールされていることを確認します(欠落しているのはlibnss-winbindでした)。

apt-get install samba acl attr quota fam winbind libpam-winbind \
libpam-krb5 libnss-winbind krb5-config krb5-user ntp dnsutils ldb-tools

サービスを停止します

service smbd stop
service nmbd stop
service winbind stop

適切なsmb.conf(特にidmapパラメータ)を設定します:

[global]
    workgroup = TESTAD
    security = ADS
    realm = TESTAD.LAN

    dedicated keytab file = /etc/krb5.keytab
    kerberos method = secrets and keytab
    server string = Data %h

    winbind use default domain = yes
    winbind expand groups = 4
    winbind nss info = rfc2307
    winbind refresh tickets = Yes
    winbind offline logon = yes
    winbind normalize names = Yes

    ## map ids outside of domain to tdb files.
    idmap config *:backend = tdb
    idmap config *:range = 2000-9999
    ## map ids from the domain  the ranges may not overlap !
    idmap config TESTAD : backend = rid
    idmap config TESTAD : range = 10000-999999
    template Shell = /bin/bash
    template homedir = /home/TESTAD/%U

    domain master = no
    local master = no
    preferred master = no
    os level = 20
    map to guest = bad user
    Host msdfs = no

    # user Administrator workaround, without it you are unable to set privileges
    username map = /etc/samba/user.map

    # For ACL support on domain member
    vfs objects = acl_xattr
    map acl inherit = Yes
    store dos attributes = Yes

    # Share Setting Globally
    unix extensions = no
    reset on zero vc = yes
    veto files = /.bash_logout/.bash_profile/.bash_history/.bashrc/
    hide unreadable = yes

    # disable printing completely
    load printers = no
    printing = bsd
    printcap name = /dev/null
    disable spoolss = yes

その構成では、次の行を含む必須の追加の/etc/samba/user.mapファイルがあります。

!root = TESTAD\Administrator TESTAD\administrator Administrator administrator

/etc/krb5.confに適切に入力することを忘れないでください:

[libdefaults]
    default_realm = TESTAD.LAN
    dns_lookup_realm = false
    dns_lookup_kdc = true

注意してください。krb5.confはrootが所有し、全員が読み取り可能でなければなりません(644の権利)。

/etc/nsswitch.confを編集して、winbindをpasswdおよびgroup行に追加します。

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat files winbind
group:          compat files winbind
shadow:         compat files 

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

次にドメインに参加します。

# net ads join -U Administrator
Using short domain name -- TESTAD
Joined 'DEBMEMBER' to dns domain 'TESTAD.example.com'

最後にサービスを開始します。

service smbd start
service nmbd start
service winbind start

getent passwdは今すぐADユーザーと連携する必要があります。

# getent passwd testuser
testuser:*:11107:10513:testuser:/home/TESTAD/testuser:/bin/bash

[〜#〜] caveat [〜#〜]以前は必要なライブラリをインストールせずにADに参加していたため、ユーザーを適切に認証するには、このセットアップ後にシステムを再起動する必要がありました。

4
wazoox

4294967295は2 ^ 32を意味します-これは、winbindデーモンがADからxidを変換するために生成したGIDまたはUIDのカウンターのオーバーフローです。これはゲストマッピングとは関係ありません... idmap config YOUR_DOMAIN:backend = ad 、広告は、情報がローカルに保存されるだけでなく、実行時にすべてのクライアントにレプリケートされ、それらにも保存されることを意味します(ただし、現在のところ、これは見つけるための私の仕事です)。 adは、クライアントが失われた場合、すべてのuid/gidマッピング情報を他の情報に保存したことを意味します。クライアントを復元すると、すべてのマッピングが再び同じになります。問題は、一度このオーバーフローが発生した場合、すべてのクライアントがそれを複製(windbindを実行)し、おそらく(私は現在それを見つけようとしている)DCも複製しているため、簡単に取り除くことができないということです。

ここで私がそのために使用している部分(正常に動作しますが、広告を介したidmapで他の問題があります):

winbind nss info = rfc2307
idmap config * : backend = tbd
idmap config * : range = 1000-2999

idmap config MY_DOMAIN : backend =  ad
idmap config MY_DOMAIN : schema_mode = rfc2307
idmap config MY_DOMAIN : range = 3000-30000
idmap_ldb:use rfc2307 = yes

winbind refresh tickets = yes
winbind use default domain = yes
winbind enum users  = yes
winbind enum groups = yes

winbind cache time = 60  #higher might make you wait long for updates 
2
TheSkunk

私自身がここに上陸したので、いくつかの良い説明を探している間に、この投稿に更新を追加する必要があると思いました...

今後は、LinuxでのActive Directory統合にsssdではなくwinbindを使用することを目指しています。 sssdwinbindのすべての機能を提供するわけではありませんが、NT Lan Manager(NTLM)認証の代わりにKerberos認証を使用します。参照: Red Hat Windows統合ガイド、第4.2章

後者はより安全なプロトコルと見なされているため、NTLM認証の使用を減らしてKerberosを優先します。

そうは言っても、SAMBAファイル共有を次のように構成しました。

  1. realmdsambasssdおよびすべての依存関係をインストールします。多分もっと?
  2. レルムに参加:realm join <domain name>

    このコマンドは、ドメイン資格情報を使用して、マシンをドメインに参加させます。これにより、nsswitch.conf/etc/sssd/sssd.conf/etc/krb5.confが自動的に構成され、/etc/krb5.keytabでマシンのキータブが取得されます。

  3. ファイルシステムが/etc/fstabaclオプションを使用してマウントされていることを確認します。

    UUID=foo-bar-baz /mnt/share ext4 defaults,acl 0 0

  4. Sambaを正しく構成します。非常に多くのオプションがあり、これは少し暗い芸術です。 YMMVですが、私にとってはうまくいきます。 <および>を含むものはすべて、独自のネットワーク用に構成する必要があります。

#/etc/samba/smb.conf
[global]
    # SMB settings
    security = ads
    workgroup = <workgroup>
    netbios name = <server name>
    server string = Samba %v on %L (%h)

    # NMB settings
    local master = no
    dns proxy = no

    # Authentication / Kerberos settings
    realm = <realm / domain name>
    password server = *
    kerberos method = secrets and keytab
    dedicated keytab file = /etc/krb5.keytab
    encrypt passwords = yes
    client use spnego = yes
    client signing = yes

    # ID mapping
    idmap config * : backend = autorid
    idmap config * : range = 1000000-1999999

    # Windows Extended ACLs
    vfs objects = acl_xattr
    map acl inherit = yes
    nt acl support = yes
    # This next one apparently incurs a significant performance hit without
    # additional functionality, but can help compatibility.
    # It adds the DOS Read-only, Archive and Hidden bits to file attributes.
    # store dos attributes = yes

[share]
    comment = <My Share>
    path = </mnt/share>
    valid users = @"<Domain Group>", <domain_user>
    # ... Other share-specific options

  1. ドメインユーザーまたはグループをUnixファイルオブジェクトのグループとして設定します。全員のアクセスを削除します。
> chown root:"Domain Users" /mnt/share
> chmod 770 /mnt/share
  1. うまくいけば、ドメインに参加しているWindows PCからファイル共有にアクセスでき、Windowsフォルダーのプロパティを使用してファイル共有にアクセス許可を設定できるはずです。

(私がしたように)どういうわけかあなたが共有から自分自身をロックした場合、次のLinuxコマンドを使用してWindows権限を表示および変更できます。

# get ACL permissions
> getfacl /mnt/share
# Set This Folder Only access on a share.
> setfacl -m group:"<domain>\<group>":rwx /mnt/share
# Set This Folder, Subdirectories and Files permissions on a folder
> set facl -m default:group:"<domain>\<group>":rwx /mnt/share
1
Alex Leach

エラー「client_input_channel_req:channel 0 rtype exit-status reply 0 "on a new server02、on server01 no。私の場合の解決策は、誤って/etc/samba/smb.confに追加しなかった2行を追加することでした。

テンプレートシェル=/bin/bash

テンプレートホームディレクトリ=/home /%D /%u

これで、ドメインユーザーがserver02にログインしました。

宜しくお願いします。

0
fisheye