Hier ist das Verfahren, das ich befolgt habe:
Installieren Sie eine neue Kopie von macOS Mojave auf einem APFS-Volume
Führen Sie die Erstkonfiguration des Betriebssystems durch und erstellen Sie beim ersten Start den Benutzer „admin“. Weisen Sie eine statische IP aus dem privaten Netzwerk 192.168.168.0/24 zu. Verwenden Sie einen DNS-Server, der sich in einem privaten Netzwerk befindet. Stellen Sie sicher, dass die IP in einen FQDN („test.mydomain.com“) aufgelöst wird und umgekehrt.
Wählen Sie „myshare“ und klicken Sie auf die Schaltfläche „Optionen“, um sicherzustellen, dass die SMB-Freigabe dafür aktiviert ist
Versuchen Sie, sich von einem Client-Computer innerhalb desselben Subnetzes über smb://test.mydomain.com/myshare oder alternativ smb://192.168.168.X/myshare mit den Anmeldeinformationen „admin“ oder „testuser“ mit dem Dateiserver zu verbinden
Im letzten Schritt schlägt die Verbindung sowohl für die Konten „admin“ als auch „testuser“ fehl. Wenn ich Open Directory ausschalte, kann ich mich mit dem Benutzer „admin“ verbinden. Neustarts in irgendeiner Phase des Verfahrens machen keinen Unterschied.
Warum kann ich nicht auf SMB zugreifen, wenn Open Directory aktiviert ist?
Hier sind die opendirectoryd-Protokolleinträge von der Erstellung des OD-Masters (Schritt 5): https://pastebin.com/uQm8b8NM
Hier sind die opendirectoryd- und smbd-Protokolleinträge vom Anmeldeversuch (Schritt 14): https://pastebin.com/U2RS3LYC & https://pastebin.com/7bFNfd8V
Das Problem ist, dass die ACLs nicht im lokalen Verzeichnis für SMB und AFP eingerichtet sind. Diese wurden früher in den älteren Server-Apps erstellt, die die Dateifreigabe enthielten. Ich habe ein AppleScript geschrieben, das sich um all das kümmert. Es erstellt die entsprechenden ACL-Gruppen im Verzeichnis (/Local/Default/Groups/com.apple.access_smb und com.apple.access_afp) und fügt dann alle Benutzer hinzu. Das Skript ist unten. Ich habe es heute zusammengeworfen, um genau dieses Problem zu lösen. Hoffentlich hilft es anderen.
-- Script to sort out ACLs for file sharing
set savedDelimiters to AppleScript's text item delimiters
display alert "Setup File Sharing ACLs" message "This script will set up the appropriate ACLs in the local directory to allow users to connect to file sharing on a macOS 10.14 server with OpenDirectory.
WARNING: Changes will be made to your local directory. Administrator privileges are required (you will be prompted for a password).
USE AT YOUR OWN RISK!
Set for all users, or only a single user?" buttons {"Cancel", "All Users", "Single User"} default button "Single User" cancel button "Cancel"
if button returned of result = "All Users" then
set progress description to "Loading User List..."
-- Load all directory users from the server
-- (identified by UserShell value of '/bin/bash'; most likely to be normal users)
-- The delimiter is horrible, but it's the only way to do it
set delimiter to tab & tab & "UserShell = (" & return & " \"/bin/bash\"" & return & ")"
set AppleScript's text item delimiters to {delimiter & return, delimiter}
set users to every text item of (do shell script "dscl /LDAPv3/127.0.0.1 search /Users UserShell \"/bin/bash\"")
else if button returned of result = "Single User" then
repeat
set username to the text returned of (display dialog "Enter Username:" default answer "" with icon note)
if username is "" then
display alert "Please enter username, or click cancel to end"
else
exit repeat
end if
end repeat
-- Add blank element to end, as this happens with output from dscl above
set users to {username, ""}
end if
-- Create the SMB & AFP ACL groups if necessary (this may be the first user)
createACLGroup("afp", 250)
createACLGroup("smb", 110)
-- Go through all the users now
set total to (length of users) - 1
set progress total steps to total
set progress description to "Adding Users to ACLs..."
set current to 0
repeat with idx from 1 to total
-- Need to use indexed repeat because of issue with missing username in list from dscl
set username to item idx of users
try
set progress completed steps to current
set progress additional description to "User " & (current + 1) & " of " & total & " (" & username & ")"
-- Now, check to see if the user is already in the file sharing lists
set AppleScript's text item delimiters to {" "} -- Split words, not letters!
set currList to every text item of (do shell script "dscl /Local/Default read Groups/com.apple.access_smb GroupMembership")
if username is in currList and length of users is 1 then
-- Only alert if in single user mode
display alert "Username already set up"
else
-- Go ahead and set it up
-- Firstly, get the user's GeneratedUID from the LDAP directory
set isError to false
try
set guid to second item of (every text item of (do shell script "dscl /LDAPv3/127.0.0.1 read Users/" & username & " GeneratedUID"))
on error
display alert "Error" message "User " & username & " is not a directory user"
set isError to true
end try
if not isError then
-- Add the user to the group
addUserToACL("afp", username, guid)
addUserToACL("smb", username, guid)
end if
end if
set current to current + 1
on error
-- Likely an empty username from the delimiters tokenising the list from dscl
end try
end repeat
set current to total
display alert "Process completed!"
set AppleScript's text item delimiters to savedDelimiters
on createACLGroup(acltype, groupid)
try
do shell script "dscl /Local/Default read Groups/com.apple.access_smb"
on error
-- Doesn't exist, so we need to create it!
do shell script "dscl /Local/Default create Groups/com.apple.access_" & acltype with administrator privileges
do shell script "dscl /Local/Default create Groups/com.apple.access_" & acltype & " RealName \"" & changeCaseOfText(acltype, "upper") & " ACL\"" with administrator privileges
do shell script "dscl /Local/Default create Groups/com.apple.access_" & acltype & " PrimaryGroupID " & groupid with administrator privileges
end try
end createACLGroup
on addUserToACL(acltype, username, guid)
do shell script "dscl /Local/Default append Groups/com.apple.access_" & acltype & " GroupMembership " & username with administrator privileges
do shell script "dscl /Local/Default append Groups/com.apple.access_" & acltype & " GroupMembers " & guid with administrator privileges
end addUserToACL
on changeCaseOfText(theText, theCaseToSwitchTo)
if theCaseToSwitchTo contains "lower" then
set theComparisonCharacters to "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
set theSourceCharacters to "abcdefghijklmnopqrstuvwxyz"
else if theCaseToSwitchTo contains "upper" then
set theComparisonCharacters to "abcdefghijklmnopqrstuvwxyz"
set theSourceCharacters to "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
else
return theText
end if
set theAlteredText to ""
repeat with aCharacter in theText
set theOffset to offset of aCharacter in theComparisonCharacters
if theOffset is not 0 then
set theAlteredText to (theAlteredText & character theOffset of theSourceCharacters) as string
else
set theAlteredText to (theAlteredText & aCharacter) as string
end if
end repeat
return theAlteredText
end changeCaseOfText
Schau dir diesen Artikel an:
https://support.apple.com/en-ca/HT210659
Der Artikel erläutert, wie Sie SMB-NTLMv2 als Authentifizierungsmechanismus aktivieren, damit sich jeder Client beim Server authentifizieren kann.
Andernfalls muss der Client an Open Directory gebunden sein und Kerberos verwenden, um auf die Freigabe zuzugreifen.
Installieren Sie High Sierra mit Server App 5.6 neu und es funktioniert.
Ortwin Gentz