Samba3 は、ユーザーには S-1-22-1 の範囲、グループには S-1-22-2 の範囲の SID を使用します。たとえば、S-1-22-1-1-10042 は uid 10042 を持つ UNIX ユーザーです。 Windows アカウントのこの機能と同様に、そのような SID を「myunixaccount」のような名前にマップできるようにしたいと考えています。マッピング:
SecurityIdentifier sid = ...; // For instance from FileSystemAccessRule.
name = sid.Translate(typeof(NTAccount)).Value;
Windows 自体はこのマッピングを行うことができますが、マッピング アルゴリズムを見つけることができないようです。
追加: 環境の説明
Convert SID to Username in C# で提案されたソリューションをテストしました。役に立ちませんでした。したがって、いくつかの追加の環境の説明:
- W7 Professional、x86 を実行するドメインまたはスタンドアロンに参加している Windows PC。
- Samba ベースのドライブにあるファイル。Samba はドメインの AD コントローラーに対して認証を行います。
- Samba バージョン: 4.0.3、Linux 2.6.18-238、x64 で実行。
- Samba 用の PAM、対話型セッションなど。
- AD コントローラは W2012 であり、ディレクトリにデフォルトの UNIX 拡張属性がいくつかあり、UID などのマッピングを許可します。
- .NET Framework ライブラリ 4.5.2。
- ldap.conf:
piece of ldap.conf
nss_base_passwd=OU=nl,OU=xxx,dc=yyy,dc=local?sub(objectCategory=user)
nss_map_objectclass posixAccount User
nss_map_objectclass shadowAccount User
nss_map_attribute uid sAMAccountName
nss_map_attribute uidNumber uidNumber
nss_map_attribute gidNumber gidNumber
nss_map_attribute cn sAMAccountName
nss_map_attribute uniqueMember member
nss_map_attribute userPassword msSFUPassword
nss_map_attribute homeDirectory unixHomeDirectory
nss_map_attribute loginShell loginShell
nss_map_attribute gecos cn
nss_map_objectclass posixGroup Group
nss_map_attribute shadowLastChange pwdLastSet
Windows 認証を使用した UNIX での対話型ログオンは正常に機能します。Samba 共有の dito。ドメインで PC を使用する場合、資格情報は要求されません。
一部のサンプルでは、ユーザー gle3 (1 で強調表示) もドメインに存在しますが、SID が異なります。ここで使用される SID は、S-1-22-1-1-10001 などの Samba SID です。
(2) では、使用されている passwd 構成にユーザーが存在することがわかります。もちろん、次の結果は得られません: grep gle3 /etc/passwd
、エントリはリモート サーバーから使用されるためです。リモート サーバーは、gle3 のユーザー SID を UNIX uid 10001 およびデフォルト グループ 10003 にマップします。
(3) では、既定のグループが存在しないことがわかります。これが、アクセス許可がそれを名前に解決できない理由です。
明らかに、Windows は何らかの方法でファイル サーバーに「これらの SID のデータを提供してください」と尋ね、Samba ファイル サーバーは何らかの方法で応答します。その最後のものの名前。