【问题标题】:Python Samba: user credentials not passed (cli_init_creds)?Python Samba:未通过用户凭据(cli_init_creds)?
【发布时间】:2011-08-22 16:51:46
【问题描述】:

我目前在 Ubuntu 中访问 Windows 打印共享时遇到问题(在工作中,所以我无法访问他们的设置),所以我最终开始研究Gnome 的 'system-config-printer' 是用 Python 编写的,它使用 Python smbc 绑定 Samba。

 

我基本上已经设法将我的问题归结为这段代码,它来自 /usr/share/system-config-printer/pysmb.py,我在 python 命令行 shell 中运行:

import smbc, os 
def do_auth (svr, shr, wg, un, pw):
  return ("myworkdomain.com", "MYWORKUSERNAME", "MYWORKPASSWORD")

ctx = smbc.Context (debug=10, auth_fn=do_auth)
f = ctx.open ("smb://%s/%s" % ("printserver.myworkdomain.com", "PRINTSHARENAME"), os.O_RDWR, 0777)

 

第一个(某种)问题是在执行ctx = smbc.Context... 行时,Python 总是抱怨:

params.c:OpenConfFile() - Unable to open configuration file "/home/MYUSERNAME/.smb/smb.conf":
    No such file or directory

...但也许这不是一个真正的问题? (也许smbc 应该重新创建这个文件?)。

 

当然,最大的问题是我无法连接到共享:在执行f = ctx.open... 行之后,有大量 Samba 通信转储,Windows 服务器似乎正在通话等 - 连接工作以失败:

SPNEGO login failed: Logon failure
cli_init_creds: user  domain myworkdomain.com
 session setup ok
map_errno_from_nt_status: 32 bit codes: code=c0000022
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
smbc.PermissionError: (13, 'Permission denied')

基本上,我对 Samba 知之甚少,无法阅读错误日志的其余部分,但我找到了以下行:

cli_init_creds: user  domain myworkdomain.com

... 非常可疑 - 'user' 看起来好像有一个空字符串 - 尽管我希望它是 'MYWORKUSERNAME',由 'do_auth' 函数指定多于!!

请注意,此故障与我过去使用 cmdline smbclient(请参阅 Obtaining Windows printer share SMB settings (for tsclient/rdesktop on Linux) - Super User)时遇到的 NT_STATUS_LOGON_FAILURE 有点相似,这是通过在命令行上明确指定 Windows 工作组来解决的 - 但是,我无法判断这是否也是 Python 案例中的问题;或者如果相反,这里没有传递用户名(或者完全是第三个)。编辑:这个工作命令行(列出共享)是(关于这个例子):

smbclient -L \\printserver.myworkdomain.com -U MYWORKUSERNAME -W myworkdomain.com

 

提前感谢您的任何建议,
干杯!

【问题讨论】:

    标签: python windows linux authentication samba


    【解决方案1】:

    好的,好吧,我想我终于明白了,感谢 Bug #848065 “system-config-printer cannot authenticate Windows Samba printer, while smbclient can (cli_init_creds)” 中的 cmets - 并审查 newprinter.py(来自 system-config-printer)...

    但首先,有一点概述:

    • 我在 Ubuntu 机器上的本地用户名:MYUSERNAME
    • 工作网络主地址(域):myworkdomain.com
    • 我的工作网账号:MYWORKUSERNAME
    • 我的工作帐户是工作组MYWORKGROUP 的成员,该工作组还有一个子域myworkgroup.myworkdomain.com
    • 工作网络上的打印服务器位于printserver.myworkdomain.com
    • 我要访问的工作打印服务器上的打印机名称(共享)是PRINTSHARENAME

     

    好吧,事实证明上面test.py 脚本中的一行是错误的——而不是:

    return ("myworkdomain.com", "MYWORKUSERNAME", "MYWORKPASSWORD")

    ...应该有:

    return ("MYWORKGROUP", "MYWORKUSERNAME", "MYWORKPASSWORD")

    ...(MYWORKGROUP 大写,Windows 的典型代表)

     

    有趣的是,使用工作组子域不起作用

    return ("myworkgroup.myworkdomain.com", "MYWORKUSERNAME", "MYWORKPASSWORD")

    ... 因为它也会因 'smbc.PermissionError: (13, 'Permission denied')' 而失败(就像原始帖子示例一样)。

     

    解决“权限被拒绝”错误的一种方法是检查日志 - 它显示如下内容:

        DomainNameLen            : 0x000c (12)
        DomainNameMaxLen         : 0x000c (12)
        DomainName               : *
            DomainName               : 'myworkdomain.com'
        UserNameLen              : 0x0004 (4)
        UserNameMaxLen           : 0x0004 (4)
        UserName                 : *
            UserName                 : 'MYWORKUSERNAME'
        WorkstationLen           : 0x0012 (18)
        WorkstationMaxLen        : 0x0012 (18)
        Workstation              : *
            Workstation              : 'MYPC'
    

    ...显然,域名应该是:

            DomainName               : 'MYWORKGROUP'
    

     

    作为参考,这里是来自“工作”设置(使用return ("MYWORKGROUP" ...)的日志的 sn-p:

    ...
    cli_init_creds: user MYWORKUSERNAME domain MYWORKGROUP
     session setup ok
     tconx ok
    ...
    Could not retrieve case sensitivity flag: NT_STATUS_INVALID_DEVICE_REQUEST.
    Server connect ok: //printserver.myworkdomain.com/PRINTSHARENAME: 0xa297768
    Performing aggressive shutdown.
    ...
    smbc_remove_usused_server: 0xa297768 removed.
    Context 0xa276658 successfully freed
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-29
      • 2017-09-30
      • 2021-11-10
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多