IIS与samba结合使用的问题

在IIS中将samba目录作为网站目录时遇到文件无法访问但目录可访问的问题。分析发现,文件名在IIS请求中被转为大写,而samba配置的case sensitive设为yes导致不匹配。解决方法是将samba的case sensitive设置为no,以匹配IIS的大写请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题

在使用IIS并把samba的目录设置为网站目录的时候,文件不能访问,目录可以访问,文件使用本地的samba挂载目录打开以后,网页就可以访问

问题分析

通过挂载目录可以访问到,说明本身的通信是没有问题的,那么需要通过日志来分析问题

开启samba的日志

log level = 5
log file = /var/log/samba/log.tuine.%m

访问文件得到的日志是

 dbwrap_lock_order_unlock: release lock order 1 for /var/lib/samba/lock/smbXsrv_tcon_global.tdb
[2021/10/25 10:12:34.743888,  5] ../../source3/smbd/filename.c:481(unix_convert)
  unix_convert called on file "NEWIMAGE/A/A.TXT"
[2021/10/25 10:12:34.743896,  5] ../../source3/smbd/filename.c:682(unix_convert)
  unix_convert begin: name = NEWIMAGE/A/A.TXT, dirpath = ., start = NEWIMAGE/A/A.TXT
[2021/10/25 10:12:34.743915,  3] ../../source3/smbd/smb2_server.c:3213(smbd_smb2_request_error_ex)
  smbd_smb2_request_error_ex: smbd_smb2_request_error_ex: idx[1] status[NT_STATUS_OBJECT_PATH_NOT_FOUND] || at ../../source3/smbd/smb2_create.c:296

比较关键的是,文件名称被转换成大写

NT_STATUS_OBJECT_PATH_NOT_FOUND]

对象找不到
排查发现配置里面设置了

case sensitive = yes

我们改成no看下

[2021/10/25 10:15:48.653209,  5] ../../source3/smbd/filename.c:481(unix_convert)
  unix_convert called on file "NEWIMAGE/A/A.TXT"
[2021/10/25 10:15:48.653411,  5] ../../source3/smbd/vfs.c:1368(check_reduced_name)
  check_reduced_name: NEWIMAGE/a/a.txt reduced to /share/NEWIMAGE/a/a.txt
[2021/10/25 10:15:48.653596,  5] ../../lib/dbwrap/dbwrap.c:130(dbwrap_lock_order_lock)
  dbwrap_lock_order_lock: check lock order 1 for /var/lib/samba/lock/smbXsrv_open_global.tdb
[2021/10/25 10:15:48.653657,  5] ../../lib/dbwrap/dbwrap.c:159(dbwrap_lock_order_unlock)
  dbwrap_lock_order_unlock: release lock order 1 for /var/lib/samba/lock/smbXsrv_open_global.tdb
[2021/10/25 10:15:48.653706,  5] ../../source3/smbd/files.c:137(file_new)
  allocated file structure fnum 2517753316 (2 used)

可以看到有一个check_reduced_name,把大写转换成了小写

这个地方的问题是,IIS的请求在后端是大写的请求,而通过samba访问的时候,设置case sensitive = yes,请求也是小写的


  print_impersonation_info: Impersonated user: uid=(1001,1001), gid=(0,1001), cwd=[/share]
[2021/10/25 10:18:44.941729,  3] ../../source3/smbd/smb2_read.c:421(smb2_read_complete)
  smbd_smb2_read: fnum 3131582861, file NEWIMAGE/a/a.txt, length=8 offset=0 read=8

所以这个地方是在samba与IIS结合的时候,这个case sensitive 不能设置为yes,否则找不到文件

背景介绍

case sensitive是samba是否支持区分大小写的,windows是不支持文件区分大小写的,linux是支持区分大小写的,这个地方实际就是告诉后台是否要跟linux一样不区分大小写,默认情况下是auto,也就是等价与no,不区分大小写

默认情况下,是不区分大小写的,那么后台需要经过转换,请求会需要多次,所以为了性能,我们有的时候会把这个开启为case sensitive = yes来避免性能的衰弱,大部分情况使用也没有问题,但是碰上IIS这种请求都转换成大写的情况,就存在异常的问题,找不到文件

所以通过日志可以抓到这个文件访问不到的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

武汉磨磨

打赏是写出更好教程的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值