在 Debian wheezy 上,samba 使用 unix 密码同步密码

在 Debian wheezy 上,samba 使用 unix 密码同步密码

我在我的服务器上安装了 samba,并且试图编写一个脚本来省去添加用户的两个步骤,例如:

adduser username
smbpasswd -a username

我的smb.conf状态:

# This boolean parameter controls whether Samba attempts to sync the Unix
# password with the SMB password when the encrypted SMB password in the
# passdb is changed.
   unix password sync = yes

进一步阅读使我找到了pdbedit手册页,其中指出:

   -a     This option is used to add a user into the database.  This  com-
          mand needs a user name specified with the -u switch. When adding
          a new user, pdbedit will also ask for the password to be used.

          Example: pdbedit -a -u sorce
          new password:
          retype new password

          Note

          pdbedit does not call the unix password syncronisation script if
          unix password sync has been set. It only updates the data in the
          Samba user database.

          If you wish to add a user and synchronise the password that  im-
          mediately, use smbpasswd’s -a option.

所以...现在我决定尝试添加一个用户smbpasswd

第一次尝试,unix 用户仍然不存在:

root@raspberrypi:/home/pi# smbpasswd -a newuser
New SMB password:
Retype new SMB password:
Failed to add entry for user newuser.

第二次尝试,unix 用户存在:

root@raspberrypi:/home/pi# useradd mag
root@raspberrypi:/home/pi# smbpasswd -a mag
New SMB password:
Retype new SMB password:
Added user mag.
# switch to user pi, and try to switch to mag
root@raspberrypi:/home/pi# su pi
pi@raspberrypi ~ $ su mag
Password: 
su: Authentication failure

所以,现在我问自己:

  1. 如何使 samba 密码与 unix 密码同步?
  2. samba 密码存储在哪里?

有人能帮我解答一下吗?

答案1

嗯...缺失的环节是:

 libpam-smbpass

因此,安装此软件包后,它按预期工作。互联网的长期记忆有时只会带来部分信息。因此,为了解决这个问题,我在这里发布了正确的链接,如何将 samba 密码与 unix 密码同步,也是我自己的测试。

root@raspberrypi:/home/pi# passwd mag2
passwd: user 'mag2' does not exist
root@raspberrypi:/home/pi# useradd mag2
root@raspberrypi:/home/pi# echo "mag2:12345" | chpasswd
root@raspberrypi:/home/pi# smbclient -L localhost -U mag2
Enter mag2's password: 
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.6]

    Sharename       Type      Comment
    ---------       ----      -------
    print$          Disk      Printer Drivers
    IPC$            IPC       IPC Service (raspberrypi server)
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.6.6]

    Server               Comment
    ---------            -------
    RASPBERRYPI          raspberrypi server

    Workgroup            Master
    ---------            -------
    WORKGROUP            
root@raspberrypi:/home/pi# su pi
pi@raspberrypi ~ $ su mag2
Password: 
Added user mag2.

mag2@raspberrypi:/home/pi$ 

我希望这对其他人有帮助。

2017年更新:

libpam-smbpass已弃用。看来替代它的是pam_winbindd。您可以安装包libpam-winbind来获取它。但是,这仍然不会将 samba 密码与您的 unix 密码同步。相反,它允许您使用 Windows 身份验证服务器 (AD) 对 unix 进行身份验证。您可以在此处找到相关信息:https://wiki.samba.org/index.php/Setting_up_Samba_as_an_Active_Directory_Domain_Controller

答案2

想对之前的回答发表评论,但由于缺乏声誉点数而无法做到。试图将完整内容放在这个回答上,但做不到,因为它看起来像垃圾邮件。这里完整内容可在 Wayback Machine 上访问,以下是简要版的要点:

Debian Etch 上的 Unix 和 Samba 密码同步

安装以下软件包:

# apt-get install libpam-smbpass smbclient

Unix -> Samba

为了在用户更改其 Unix 密码时更新 Samba 密码,请更改

/etc/pam.d/common-password:来自

password   required   pam_unix.so nullok obscure min=4 max=8 md5

password   requisite**  pam_unix.so nullok obscure min=4 max=8 md5
password   required   pam_smbpass.so nullok use_authtok try_first_pass

将 pam_unix 的“required”更改为“requisite”将确保如果 Unix 密码更改失败,插件的执行将立即结束。

为了实现这一点,用户必须已经拥有 Samba 帐户,并且他们的 Samba 密码必须与他们的 Unix 密码相匹配。由于情况不一定如此,我们必须更改

/etc/pam.d/common-auth:来自

auth    required        pam_unix.so nullok_secure

auth    requisite       pam_unix.so nullok_secure
auth    optional        pam_smbpass.so migrate

如果尚不存在,这将创建一个 Samba 用户,并在用户使用 SSH 或任何其他使用默认系统(common-auth)身份验证的服务登录时将其密码更改为 Unix 密码。

当您使用还没有 Samba 帐户的帐户通过 SSH 登录时,您应该会看到一条消息“已添加用户”。

因为这也会为 root 创建一个 Samba 帐户,所以您可能需要禁用 Samba 中的 root 访问权限(Debian Etch 默认已禁用该功能):

/etc/samba/smb.conf:

invalid users = root

警告:如果用户通过 SSH 或其他服务登录时不使用密码(例如使用公钥/私钥身份验证),则此方法无效。在这种情况下,PAM 将没有创建 Samba 密码所需的纯文本密码。

注意:当您修改 common-password 以要求更新 Samba 密码时,任何当前登录的用户将无法使用“passwd”更改其密码,直到他们重新登录,除非他们已经有一个现有的 Samba 帐户,其密码等于他们的 Unix 密码。

Samba -> Unix

我们指示 Samba 在更改密码时使用 PAM:

/etc/samba/smb.conf:

unix password sync = yes
pam password change = yes

使用 /etc/init.d/samba restart 重新启动 Samba。

通过添加@include common-password 配置 PAM 以支持 Samba 更改密码:

/etc/pam.d/samba:

@include common-auth
@include common-account
@include common-session
@include common-password

这将使用与使用“passwd”相同的机制来更改使用 Samba 时的密码。这意味着在尝试更改 Samba 密码之前,它将要求更新 Unix 密码。

创建新用户

使用 chpasswd 避免错误:

# useradd test
# echo “test:newpass” | chpasswd

相关内容