samba报错“Failed to open /etc/secrets.tdb”

这篇博客介绍了作者在跟踪一个samba无法启动的bug时,发现错误提示'Failed to open /etc/secrets.tdb'。通过检查配置文件、使用strace跟踪和深入代码分析,确定问题可能源于Linux内核未配置'Enable POSIX file locking API'选项。在Linux Kernel v2.6.36中启用该选项后,解决了samba的问题。
部署运行你感兴趣的模型镜像

这几天在跟踪一个bug,跟踪了几天仍没有定位出原因。

描述一下bug的几个现象:

1.smbd/nmbd进程无法启动,启动后就退出;

2.简单查看发现运行”/sbin/smbpasswd -a admin admin“时,就会报出如下错误:

/mnt/rwfs/etc # /sbin/smbpasswd -a admin admin
tdb(unnamed): tdb_open_ex: failed to get global lock on /etc/secrets.tdb: Permission denied
Failed to open /etc/secrets.tdb
tdb(unnamed): tdb_open_ex: failed to get global lock on /etc/secrets.tdb: Permission denied
Failed to open /etc/secrets.tdb
tdb(unnamed): tdb_open_ex: failed to get global lock on /etc/secrets.tdb: Permission denied
Failed to open /etc/secrets.tdb
pdb_generate_sam_sid: Failed to store generated machine SID.
PANIC: Could not generate a machine SID

Aborted

也就是说这个错误影响了samba的功能;


根据问题现象和以往对samba的经验,我计划从以下几个部分入手:

1.移植到其他平台,查看samba本身是否有错误。(因为我新开发的平台是mips,手边恰好也有另一个mips平台的产品,我就直接搬上去了。samba没报错,可以用)

2.检查配置文件,包括smb.conf,smbpassword,group等,内容、权限等问题。(发现secrets.tdb内容为空,smbpassword也为空)

3.strace(我比较爱用)跟踪,发现问题出在open()前后,好吧,既然如此,只能进入代码去看了!

跟踪命令如下:
./strace -f  /sbin/smbpasswd -a admin admin
截取重点信息如下:
open("/lib/valid.dat", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
7564  geteuid()                         = 0
7564  getuid()                          = 0
7564  open("/etc/secrets.tdb", O_RDWR|O_CREAT|O_LARGEFILE, 0600) = 4
7564 <span style="color:#FF0000;"> fcntl64(4, F_SETLKW64, {type=F_WRLCK, whence=SEEK_SET, start=0, len=1}, 0x7ff7aa78) = -1 EACCES (Permission denied)</span>
7564  write(1, "tdb(unnamed): tdb_open_ex: faile"..., 92) = 92
7564  close(4) 

嘿嘿,发现了,问题原因可能出在“fcntl64失败”。这个函数的具体用法找谷哥/度娘,这里不解释;

总之跟踪到最后找到“正解“,编译kernel时未配置file lock”有可能导致这个问题,查看/linux/fs下的lock和fcntl是否有编译,一看果然没有编译。勾选配置;

 Linux Kernel v2.6.36 Configuration

File systems---->

 [*] Enable POSIX file locking API


这里简单说明一下这个选项:

The Linux kernel configuration item CONFIG_FILE_LOCKING:

  • prompt: Enable POSIX file locking API
  • type: bool
  • depends on: CONFIG_EXPERT
  • defined in fs/Kconfig
  • found in Linux kernels: 2.6.28–2.6.39, 3.0–3.12, 3.12+HEAD  (重点哦!)

This option enables standard file locking support, required for filesystems like NFS and for the flock() system call. Disabling this option saves about 11k.

OK,刚好我kernel是2.6.36,在以前的版本如kernel2.6.21这个配置是不可选择的,也就是系统默认打开的。我想从2.6.28开始这个配置打开了。我并没想清楚kernel小组为什么要这么做呢?这是个疑问。这个配置知道就好,我觉得也没必要深究,有时间可以研究一下为什么要这么修改!


总之,如果你的需求中需要对device或文件写操作,一定要勾选此配置,换句话说只要配置文件系统这个选项就勾上,算是标配吧!


您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

### 命令作用 `sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak` 命令是一个 Linux 系统下的复制命令。`sudo` 用于以超级用户权限执行命令,因为 `/etc/samba/smb.conf` 是 Samba 服务的配置文件,通常需要管理员权限才能操作。`cp` 是复制(copy)命令,该命令将 `/etc/samba/smb.conf` 文件复制到 `/etc/samba/smb.conf.bak`。这里的 `.bak` 是备份(backup)文件的常见扩展名,因此该命令的主要作用是对 Samba 服务的配置文件进行备份。 ### 使用场景 - **配置修改前备份**:当需要对 `/etc/samba/smb.conf` 文件进行修改时,例如调整共享文件夹的权限、添加新的共享目录等操作之前,先执行该命令进行备份。这样在修改配置文件后,如果出现问题导致 Samba 服务无法正常工作,可以将备份文件 `/etc/samba/smb.conf.bak` 复制回 `/etc/samba/smb.conf`,恢复到修改前的状态。 - **系统升级或软件更新**:在对 Samba 软件进行升级或者对操作系统进行更新时,可能会对 `/etc/samba/smb.conf` 文件产生影响。为了防止升级或更新过程中配置文件被损坏或覆盖,在操作之前进行备份。 ### 可能遇到的问题及解决办法 - **权限问题**:如果没有使用 `sudo` 以管理员权限执行该命令,可能会出现权限不足的错误。解决办法是在命令前加上 `sudo`,确保以超级用户权限执行。 - **磁盘空间不足**:如果 `/etc/samba` 所在的磁盘分区空间不足,可能无法完成复制操作。可以通过 `df -h` 命令查看磁盘使用情况,清理磁盘空间或者更换分区。 - **文件不存在**:如果 `/etc/samba/smb.conf` 文件不存在,会提示文件找不到的错误。需要检查 Samba 服务是否正确安装,配置文件是否被意外删除。 ### 代码示例 ```bash # 备份 Samba 配置文件 sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak # 检查备份文件是否存在 ls -l /etc/samba/smb.conf.bak # 如果修改配置文件后出现问题,恢复备份 sudo cp /etc/samba/smb.conf.bak /etc/samba/smb.conf ```
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值