目的:总结Linux应用进程开发过程中碰到棘手问题时的分析方法及解决过程
背景:项目中的samba经过裁减后使用,导致出现以下一系列问题,之前对samba进程源码也是一无所知
问题:
1.mac系统不能访问samba,后来发现密码大写就能访问,涉及NTLM和LM口令验证
2.改成user模式后,失去权限控制
3.改好权限控制后,mac中点击无权限目录没反应,导致所有目录都无法访问
4.mac客户端开始连接server的时候速度很慢难以接受
5.同一个PC上多个username无法访问samba
分析:
问题1———
samba采用share控制模式并加入权限控制,在windows系统中访问时,点击每个目录才要求输入用户名和密码,工作也正常。在mac系统中连接samba时,首先就要求输入用户名和密码,但是始终连接不上去。
碰到这个问题首先在samba进程中加入打印代码进行跟踪,运行时发现console全无打印,没有打印怎么跟踪,又如何调试。还没开始就好像要打住了,没办法只能从main开始密密麻麻的加打印,再运行终于看到打印并终止于某个地方,这才发现该处将打印设备的文件描述符close掉了,打开即可。
回来定位问题,samba源码文件太多,找到auth目录及其他相关目录下的可疑权限验证文件,依次加打印,经过多次测试发现在
函数password_ok处总是密码验证失败导致mac系统无法登录,而win7却正常通过密码验证。接着去了解samba兼容的
LanManager和Windows NT口令加密相关知识,了解samba本身的密码验证原理。(插述:client端连接server时首先会进行一个简单的协商交互,server会产生一个随机值返回给client;client接着用密码的散列口令值作一些处理形成密钥