N8000访问指定guest参数的cifs共享需输入用户名和密码案例分析

发布时间:  2013-08-28 浏览次数:  331 下载次数:  0
问题描述
如果normal共享指定了guest参数,则允许匿名访问,即用户访问共享不需要输入用户名和密码。但某局点客户反映使用windows客户端访问指定了guest参数的normal共享,要求输入用户名和密码。
告警信息
访问状态如图
处理过程
问题出现的原因是N8000本地有和windows登录名称相同的用户存在,因此可以通过如下方式解决。
1、 如果N8000采用域认证方式
(1) 在N8000上删除该本地用户。
(2) 使用域用户身份访问cifs共享。
2、 如果N8000采用本地认证方式
(1) 切换windows客户端的登录账户。
(2) 使用本地用户身份访问cifs共享。
根因
1、 模拟用户场景
(1) 创建normal共享并指定guest参数。
spc004b012.CIFS> share show
ShareName     FileSystem  ShareOptions
fsty1       fsty1  owner=root,group=root,fs_mode=1777,rw,guest,oplocks,no_full_acl,inherit permissions=yes
(2) 在windows客户端访问共享fsty1,不指定使用其他用户名进行连接,即匿名访问。

(3) 访问共享成功。

2、查看日志信息,分析访问CIFS共享中windows客户端与N8000交互过程。
(1)客户端使用用户f90006434访问cifs共享。其中f90006434是当前windows客户端登录所使用的用户。
[2012/01/08 12:57:16.344451,  3] auth/auth.c:216(check_ntlm_password)
  check_ntlm_password:  Checking password for unmapped user [CHINA]\[f90006434]@[F90006434] with the new password interface
[2012/01/08 12:57:16.344506,  3] auth/auth.c:219(check_ntlm_password)
  check_ntlm_password:  mapped user is: [SPC004B012]\[f90006434]@[F90006434]
(2)N8000在本地用户中查找f90006434是否存在。
[2012/01/08 12:57:16.344611,  3] auth/auth_sam.c:399(check_sam_security)
  check_sam_security: Couldn't find user 'f90006434' in passdb.
[2012/01/08 12:57:16.344634,  3] auth/auth_winbind.c:54(check_winbind_security)
  check_winbind_security: Not using winbind, requested domain [SPC004B012] was for this SAM.
[2012/01/08 12:57:16.344652,  2] auth/auth.c:314(check_ntlm_password)
  check_ntlm_password:  Authentication for user [f90006434] -> [f90006434] FAILED with error NT_STATUS_NO_SUCH_USER
(3)在本地用户中没有找到f90006434用户,转换使用nobody用户来连接共享资源。
[2012/01/08 12:57:16.348658,  1] smbd/service.c:1070(make_connection_snum)
  f90006434 (::ffff:129.88.1.204) connect to service _fsty1$ initially as user nobody (uid=65534, gid=65533) (pid 20005)
[2012/01/08 12:57:17.644415,  0] smbd/dfree.c:126(sys_disk_free)
  disk_free: sys_popen() failed for command /opt/VRTSnasgw/scripts/dfree.sh "SPC004B012" "f90006434" .. Error was : No child processes
通过分析可以看出,在windows客户端访问cifs共享时,如果不指定使用其他用户名进行连接,则会使用客户端当前登陆账户来访问共享。然后会有一个用户认证的过程,首先是在本地用户中查找该用户是否存在,如果不存在则使用nobody用户来登陆。
如果本地用户中存在该用户,又是如何处理的呢?
3、创建本地用户f90006434后访问共享
(1)在N8000添加本地用户f90006434。
spc004b012.CIFS> local user add f90006434
Input password for f90006434.
Enter password: ******
Re-enter password: ******
Adding USER : f90006434
Success: User f90006434 created successfully
(2)在windows客户端访问共享fsty1,也不指定使用其他用户名进行连接。此时要求输入密码,现象和问题描述一致。

(3)查看日志信息。
[2012/01/08 13:21:52.484853,  3] auth/auth.c:219(check_ntlm_password)
  check_ntlm_password:  mapped user is: [SPC004B012]\[]@[F90006434]
……
[2012/01/08 13:21:52.499255,  3] auth/auth_winbind.c:54(check_winbind_security)
  check_winbind_security: Not using winbind, requested domain [SPC004B012] was for this SAM.
[2012/01/08 13:21:52.499275,  2] auth/auth.c:314(check_ntlm_password)
  check_ntlm_password:  Authentication for user [f90006434] -> [f90006434] FAILED with error NT_STATUS_WRONG_PASSWORD
通过日志信息可以看出,访问共享使用的用户仍是f90006434,但由于密码错误,用户认证失败。也就是说,若在N8000本地用户中含有windows客户端登录用户,那么即使开放了guset,N8000也会要求输入密码。

建议与总结
当windows客户端访问共享时不指定使用其他用户名进行连接,则会默认以当前登录用户去尝试连接共享。如果N8000本地没有上述用户存在,若开放了guset,samba则会自动使用nobody用户访问共享。但是在N8000本地有和windows登录用户名称相同的情况下,即使开放了guset,N8000也会要求输入密码。
由于这是windows和samba的机制决定的,因此只能通过资料的形式来规避。一线工作人员及管理员应合理分配账户,尽量规避N8000本地和windows登录用户名相同的情况出现。

END