windows xp 安装好openssh后,不能正常启动,/var/empty must be owned by root and not group or world-writable

本文讲述了作者在Windows XP环境中使用Cygwin的OpenSSH遇到的问题,涉及`/var/empty`权限调整,root用户映射为SYSTEM,以及用户添加的过程。最终解决了`/var/emptymustbeownedbyrootandnotgrouporworld-writable`错误。

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

电脑突然坏了,把备用老机重新拿出来使用,本来是直接上debian的,不过要上一下微信和 QQ ,查一下居然都能在 xp 上运行,那就弄个 xp 系统吧,没办法,老机的 cpu 连虚拟化都不支持,直接干吧。

啥软件都弄好后,直接上 vnc 了,但是,有时候 xp 会卡死,这时啥都做不了,就算接上了键鼠,还是得等,一动不动。这时候,我就想到了,不如加一个远程命令行好了。然后就选中了 openssh ,它还有一个 sftp 功能,打算也把它挂上。老主板即使是后端 usb 也只有 usb 1.0 ,速度慢得可怜。网卡却是一百兆的,用网络传输快上不少。

安装好 cygwin 的 openssh 后,发现启动不了,在命令行使用 net start opensshd,显示 OpenSSH Server 服务无法启动。 NET HELPMSG 3534 获得更多帮助。

在计算机管理-》服务里面启动,则显示 本地计算机上的 OpenSSH Server 服务启动后又停止了。

来来回回好几次,心情郁闷。我想起这个 cygwin 是个超级精简的 linux 环境,然后进去 OpenSSH 的目录,查看了一下目录,发现有个 var 的目录,多年来使用 linux 的直觉告诉我,里面好像有一个 log 目录。果不其然,目录里面有 OpenSSHd.log ,打开一看,里面写着 /var/empty must be owned by root and not group or world-writable.

现在方向有了,是这个 empty 目录只能 root 拥有,不能有组和不能写入。使用chown root /var/empty -R。却告诉我,root 这个用户不存在。根据经验,打开了 /etc 目录,查看下面的 passwd 目录,是真的没有 root 的字样,那就mkpasswd -U root ,新建一个 root 用户就是。然后 chown root /var/empty -R ,chmod 700 /var/empty -R这次没有报错,我想,这次肯定行了吧。

然后输入 net start opensshd ,却还是无法启动。我直接郁闷了,这咋还不行呢。

然后我回去查看 passwd 目录, root 用户是新建出来了,但是怎么还会出错呢,那可能表明的是,在 cygwin 这个系统里面 root 并不是指 linux 环境里面的 root 。

然后没办法了,干脆对着这个用户表撞吧, root 作为必要的用户,肯定有一个在里面的。

于是,按自己的理解, root 作为管理员,改为 Administrator 拥有,不行;

改为当前用户,不行;

改为 LOCAL SERVICE ,不行;

NETWORK SERVICE 也不行。

当前就剩下 SYSTEM、Guest、sshd 这几个怎么都不见得会是 root 吧……

输入 SYSTEM 后,居然显示服务启动成功。哈哈,不枉我调试了那么久,还真行了。问题完美解决,接下来开个 sftp 服务器就 ok 。

总结:

在winxp 下,cygwin 这个环境的openssh /var/empty must be owned by root and not group or world-writable. 这个错误,需要自己把 /var/empty 调成 root 拥有,700的权限,不属于任何组。

在这个环境当中, root 用户映射成了 SYSTEM 用户,把以上都弄好后,启用就没有问题了。

若把本地用户当作 ssh 的用户,需要使用mkpasswd -l -u 进行用户的添加。在客户端直接输入帐户密码就可以使用。这样一来,就算画面卡死了, ssh 把卡死的程序关掉了也行,直接重启也行,可以更加灵活地使用。

<think>根据用户提供的引用内容,问题是在构建RPM包时出现空`debugfiles.list`文件的错误。具体错误信息为: ``` error: Empty %files file /jenkins/workspace/xxxx/output/rpmbuild/BUILD/xxxx/debugsourcefiles.list ``` 引用[3]中提到,这个问题与生成debuginfo包有关。默认情况下,RPM构建会生成debuginfo包,而出现空文件错误可能是因为没有需要包含在debuginfo包中的文件,或者构建过程中没有生成调试信息。 解决方案是禁止生成debuginfo包。可以通过在用户级或系统级RPM配置中添加宏定义来实现。 ### 解决方案步骤 1. **创建或修改用户级RPM宏配置文件** 在用户的主目录下创建`.rpmmacros`文件(如果不存在),并添加以下内容: ```bash echo &#39;%debug_package %{nil}&#39; >> ~/.rpmmacros ``` 这行配置会禁止生成debuginfo包。 2. **如果用户级配置无效,尝试系统级配置** 编辑系统级RPM宏配置文件(通常位于`/usr/lib/rpm/macros`),添加相同的宏定义: ```bash echo &#39;%debug_package %{nil}&#39; | sudo tee -a /usr/lib/rpm/macros ``` 注意:修改系统级配置可能会影响其他用户的RPM构建,建议优先使用用户级配置。 3. **重新执行RPM构建命令** 配置完成后,重新运行构建命令: ```bash rpmbuild -ba ~/rpmbuild/SPECS/openssh.spec ``` ### 注意事项 - 禁止生成debuginfo包后,将不会产生`debuginfo`和`debugsource`包,这可能会影响后续的调试工作。如果确实需要调试信息,应检查构建过程中是否生成了调试符号(例如,确保编译时使用了`-g`选项)。 - 如果构建环境是持续集成(如Jenkins),建议在构建脚本中添加上述配置命令。 ### 示例:修改后的构建过程 ```bash # 创建用户级宏配置 echo &#39;%debug_package %{nil}&#39; >> ~/.rpmmacros # 确保构建环境已设置 export TOPDIR=$HOME/rpmbuild # 重新执行构建 rpmbuild -ba $TOPDIR/SPECS/openssh.spec ``` ### 验证 构建完成后,检查输出目录(`~/rpmbuild/RPMS`和`~/rpmbuild/SRPMS`)中是否生成了预期的RPM包,且不再出现空文件错误。 --- §§相关问题§§ 1. 如何保留调试信息但避免空debugfiles.list错误? 2. RPM构建中如何自定义debuginfo包的生成? 3. openEuler系统中如何安装最新的RPM构建工具?</think>### 解决 openEuler 上 OpenSSH 10.0 RPM 构建时出现空 %files 文件的错误 根据引用[1]和[3]的描述,这个错误是由于 RPM 构建系统默认尝试生成 debuginfo 包但找不到调试文件导致的。以下是完整的解决方案: #### 解决方案步骤 1. **禁用 debuginfo 包生成** ```bash # 创建或修改用户级 RPM 宏配置 echo &#39;%debug_package %{nil}&#39; >> ~/.rpmmacros # 验证配置 cat ~/.rpmmacros ``` 这将完全禁用 debuginfo 包的生成(推荐方案) 2. **如果仍需调试包,确保生成调试信息** 在 spec 文件中添加编译选项: ```spec %global debug_package %{nil} # 推荐放在文件顶部 %build # 添加 -g 编译选项生成调试信息 CFLAGS="$CFLAGS -g" ./configure --prefix=/usr ... make %{?_smp_mflags} ``` 3. **清理构建环境后重试** ```bash # 清理旧构建 rm -rf ~/rpmbuild/BUILD/* rpmbuild -ba ~/rpmbuild/SPECS/openssh.spec ``` #### 完整示例:修改后的 openssh.spec ```spec Name: openssh Version: 10.0 Release: 1%{?dist} # 禁用 debug 包 ↓ %global debug_package %{nil} %build CFLAGS="$RPM_OPT_FLAGS -g" ./configure \ --prefix=/usr \ --sysconfdir=/etc/ssh \ --with-pam \ --with-zlib \ --with-ssl-engine make %{?_smp_mflags} %install make install DESTDIR=%{buildroot} # 确保 %files 部分包含必要文件 %files %defattr(-,root,root,-) /usr/bin/* /usr/sbin/sshd /etc/ssh/sshd_config ``` #### 验证成功构建 构建成功后输出应显示: ``` 已写至:/root/rpmbuild/RPMS/x86_64/openssh-10.0-1.x86_64.rpm 已写至:/root/rpmbuild/SRPMS/openssh-10.0-1.src.rpm ``` **注意**:不再出现 `debugsourcefiles.list` 相关错误 #### 安装验证 ```bash # 安装生成的 RPM sudo rpm -Uvh --force ~/rpmbuild/RPMS/x86_64/openssh-10.0*.rpm # 验证版本 sshd -V # 应显示:OpenSSH_10.0 ``` --- ### 关键点说明 1. **问题根源**:RPM 默认配置尝试生成 debuginfo 包(引用[3]),但 OpenSSH 构建可能未生成所需调试文件 2. **解决方案选择**: - 生产环境:完全禁用 `%debug_package %{nil}`(推荐) - 开发环境:添加 `-g` 编译选项生成调试信息 3. **配置优先级**: - `~/.rpmmacros` 用户级配置优先于系统级 `/usr/lib/rpm/macros` - spec 文件中的 `%global debug_package %{nil}` 优先级最高 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值