如何重命名 samba4 域中的用户?

pQd*_*pQd 3 samba4

如何在基于 samba4 的域中更改用户的登录名?

我试过阅读 samba-tool 手册页,但它似乎没有显示我可以使用的任何内容。

rda*_*rda 6

假设我们使用 Ubuntu 并且 Samba 4 被配置为 DC(Active Directory 域控制器),并且我们想要使用 nameOld User和 login更改用户olduser。要重命名用户登录名,我们可以使用samba-tool

test-smb:~# samba-tool user edit olduser
Run Code Online (Sandbox Code Playgroud)

这将打开一个显示 LDAP 条目内容的编辑器。更改属性sAMAccountNameuserPrincipalName,保存并退出。您可能还想重命名用户的任何现有主目录。

我们还可以直接编辑 LDAP 条目,而无需使用samba-tool但带有ldb-tools.

安装ldb-tools

apt install ldb-tools
Run Code Online (Sandbox Code Playgroud)

现在我们可以使用ldb-tools( ldbadd, ldbdel, ldbedit, ldbmodify, ldbrename, ldbsearch) 直接搜索或修改 LDAP 数据库。

找到 Samba LDAP 数据库:

如果您安装了 Ubuntu 打包版本samba,则应在/var/lib/samba/private/sam.ldb.

我们先来看看 LDAP 数据库中的那个用户:

搜索数据库:

我们使用ldbsearch以下语法:

ldbsearch -H <database-file> <ldap-filter>
Run Code Online (Sandbox Code Playgroud)

使用 ,<ldap-filter>我们可以指定一个表达式来过滤搜索返回的条目。例如,我们可以使用sAMAccountName=olduser基于登录名属性CN=Old User进行过滤或基于 CN(通用名称)属性进行过滤:

test-smb:~# ldbsearch -H /var/lib/samba/private/sam.ldb 'CN=Old User'
# record 1
dn: CN=Old User,CN=Users,DC=test-smb,DC=example,DC=com
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
cn: Old User
sn: User
givenName: Old
instanceType: 4
whenCreated: 20180904091809.0Z
whenChanged: 20180904091809.0Z
displayName: Old User
uSNCreated: 3841
name: Old User
objectGUID: 038979ea-107d-4c97-85bf-76d1f2326608
badPwdCount: 0
codePage: 0
countryCode: 0
badPasswordTime: 0
lastLogoff: 0
lastLogon: 0
primaryGroupID: 513
objectSid: S-1-5-21-3075026989-1808589244-366107480-1105
accountExpires: 9223372036854775807
logonCount: 0
sAMAccountName: olduser
sAMAccountType: 805306368
userPrincipalName: olduser@test-smb.example.com
objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=test-smb,DC=phys,DC=et
 hz,DC=ch
mail: olduser@test-smb.example.com
loginShell: /bin/bash
pwdLastSet: 131805262894707270
userAccountControl: 512
uSNChanged: 3844
distinguishedName: CN=Old User,CN=Users,DC=test-smb,DC=example,DC=com

...
Run Code Online (Sandbox Code Playgroud)

更改登录名属性

创建一个rename-login.ldif包含以下内容的文本文件 ( ):

dn: CN=Old User,CN=Users,DC=test-smb,DC=phys,DC=ethz,DC=ch
changetype: modify
replace: sAMAccountName
sAMAccountName: newuser
-
replace: userPrincipalName
userPrincipalName: newuser@test-smb.phys.ethz.ch
Run Code Online (Sandbox Code Playgroud)

这将修改属性sAMAccountNameuserPrincipalName

test-smb:~# ldbmodify -H /var/lib/samba/private/sam.ldb rename-login.ldif
Modified 1 records successfully
Run Code Online (Sandbox Code Playgroud)

通过重命名 RDN(相对专有名称)来重命名 LDAP 条目

看起来无法使用 重命名 LDAP 条目samba-tool,我们必须使用ldb-tools

test-smb:~# ldbrename -H /var/lib/samba/private/sam.ldb 'CN=Old User,CN=Users,DC=test-smb,DC=example,DC=com' 'CN=New User,CN=Users,DC=test-smb,DC=example,DC=com'
Renamed 1 record
Run Code Online (Sandbox Code Playgroud)

这也将更改属性cnname,但不会更改其他一些属性,仍然包含下一次搜索显示的旧用户名:

test-smb:~# ldbsearch -H /var/lib/samba/private/sam.ldb 'CN=New User'
# record 1
dn: CN=New User,CN=Users,DC=test-smb,DC=example,DC=com
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
sn: User
givenName: Old
instanceType: 4
whenCreated: 20180904091809.0Z
displayName: Old User
uSNCreated: 3841
objectGUID: 038979ea-107d-4c97-85bf-76d1f2326608
badPwdCount: 0
codePage: 0
countryCode: 0
badPasswordTime: 0
lastLogoff: 0
primaryGroupID: 513
objectSid: S-1-5-21-3075026989-1808589244-366107480-1105
accountExpires: 9223372036854775807
sAMAccountType: 805306368
objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=test-smb,DC=phys,DC=et
 hz,DC=ch
mail: olduser@test-smb.example.com
loginShell: /bin/bash
pwdLastSet: 131805262894707270
userAccountControl: 512
lastLogonTimestamp: 131805264616461980
sAMAccountName: newuser
userPrincipalName: newuser@test-smb.example.com
lastLogon: 131805271152497360
logonCount: 12
cn: New User
name: New User
whenChanged: 20180904100228.0Z
uSNChanged: 3847
distinguishedName: CN=New User,CN=Users,DC=test-smb,DC=example,DC=com
Run Code Online (Sandbox Code Playgroud)

修改其余属性

要更改其他一些属性,例如givenName, displayNameor mail,我们可以使用:

samba-tool user edit newuser
Run Code Online (Sandbox Code Playgroud)

并以交互方式编辑用户或使用另一个ldbmodify如下:

创建一个rename-other-attrs.ldif包含以下内容的文本文件 ( ):

dn: CN=New User,CN=Users,DC=test-smb,DC=phys,DC=ethz,DC=ch
changetype: modify
replace: givenName
givenName: New
-
replace: displayName
displayName: New User
-
replace: mail
mail: newuser@test-smb.example.com
Run Code Online (Sandbox Code Playgroud)

修改 LDAP 条目::

test-smb:~# ldbmodify -H /var/lib/samba/private/sam.ldb rename-other-attrs.ldif
Modified 1 records successfully
Run Code Online (Sandbox Code Playgroud)