私は、Debian/Jessie Samba 4.2.14をADメンバーとして実行しています。 ADCはWindows2008R2サーバーです。参加は問題なく働いた。
# net ads testjoin
Join is OK
wbinfo -u
とwbinfo -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 and
getent`は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を通過しないように見える理由がわかりません。私は必死になっています、何かアイデアはありますか?
中心的な問題であるパッケージが見つからないことがわかりました。残念ながら、これを正しく行うのは簡単ではありません。これが最終的な動作構成です(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に参加していたため、ユーザーを適切に認証するには、このセットアップ後にシステムを再起動する必要がありました。
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
私自身がここに上陸したので、いくつかの良い説明を探している間に、この投稿に更新を追加する必要があると思いました...
今後は、LinuxでのActive Directory統合にsssd
ではなくwinbind
を使用することを目指しています。 sssd
はwinbind
のすべての機能を提供するわけではありませんが、NT Lan Manager(NTLM)認証の代わりにKerberos認証を使用します。参照: Red Hat Windows統合ガイド、第4.2章
後者はより安全なプロトコルと見なされているため、NTLM認証の使用を減らしてKerberosを優先します。
そうは言っても、SAMBAファイル共有を次のように構成しました。
realmd
、samba
、sssd
およびすべての依存関係をインストールします。多分もっと?レルムに参加:realm join <domain name>
このコマンドは、ドメイン資格情報を使用して、マシンをドメインに参加させます。これにより、nsswitch.conf
、/etc/sssd/sssd.conf
、/etc/krb5.conf
が自動的に構成され、/etc/krb5.keytab
でマシンのキータブが取得されます。
ファイルシステムが/etc/fstab
のacl
オプションを使用してマウントされていることを確認します。
UUID=foo-bar-baz /mnt/share ext4 defaults,acl 0 0
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
> chown root:"Domain Users" /mnt/share
> chmod 770 /mnt/share
(私がしたように)どういうわけかあなたが共有から自分自身をロックした場合、次の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
エラー「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にログインしました。
宜しくお願いします。