Cygwin SSH(Windows 7)的目录权限

15

我是Linux的粉丝,但由于Linux中糟糕的Intel无线驱动程序,我不得不转向Windows 7。我在Windows上安装了Cygwin,并希望配置SSH以远程连接到我的笔记本电脑。

我通过Google搜索找到了安装Win 7上OpenSSH服务器的信息,但在运行ssh-host-config时出现以下错误:

bala@bala-PC ~
$ ssh-host-config
yes
*** Info: 创建默认的/etc/ssh_config文件
*** Query: 覆盖现有的/etc/sshd_config文件吗?(yes/no) yes
*** Info: 创建默认的/etc/sshd_config文件
*** Info: 自OpenSSH 3.3开始,默认情况下启用特权分离。
*** Info: 但是,这需要一个名为“sshd”的非特权帐户。
*** Info: 有关特权分离的更多信息,请阅读/usr/share/doc/openssh/README.privsep。
*** Query: 是否应使用特权分离?(yes/no) no
*** Info: 正在更新/etc/sshd_config文件
*** Warning: 以下功能需要管理员特权!
*** Query: 是否要将sshd安装为服务? *** Query: (如果已经安装为服务,则说“no”)(yes/no) yes *** Query: 输入守护进程的CYGWIN值:[] *** Info: 在Windows Server 2003、Windows Vista及更高版本中, *** Info: SYSTEM帐户无法将setuid设置为其他用户——这是一个能力 *** Info: sshd需要。你需要有或创建一个特权帐户。 *** Info: 此脚本将帮助您完成此操作。
*** Warning: 所有者和管理员需要 *** Warning: 对/var/run的.w.权限。 *** Warning: 这是当前的权限和ACL: *** Warning: drwxr-xr-x 1 bala None 0 2010-01-17 22:34 /var/run *** Warning: # file: /var/run *** Warning: # owner: bala *** Warning: # group: None
*** 警告: 用户权限为rwx *** 警告: 组权限为r-x *** 警告: 其他用户权限为r-x *** 警告: 掩码为rwx *** 警告: *** 警告: 请更改/var/run的用户和/或组所有权, 权限或ACL。 *** 错误: /var/run目录存在问题。正在退出。

该文件夹的权限显示为只读(仅适用于此文件夹),已勾选灰色。我尝试取消勾选,但再次打开属性后,框又被勾选上了。有没有方法可以更改此文件夹的权限?


2
这与Windows UAC有关吗?如果您使用管理员运行Cygwin,会发生什么? - Tommy
我实际上在我的机器上禁用了UAC。即使使用“以管理员身份运行”,这种情况仍会发生。 - Boolean
这个问题应该发在SuperUser上吗?它与编程无关。 - Catchwa
我其实是一名开发者,而不是管理员。 - Boolean
1
以防其他人遇到这个古老的cygwin + sshd问题寻找故障排除提示:你应该去其他地方看看。回答“Query: Should privilege separation be used? (yes/no) no”(并将sshd运行为服务的选项设置为“yes”)意味着任何尝试使其工作的努力都可能是徒劳的。首先:我不知道为什么你不使用特权分离;其次,如果你不使用,我猜测这个选项在不同版本/配置的Windows上可能没有得到很好的测试/支持/文档化。 - michael
9个回答

8
抱歉挖掘这样一个老帖子,但每当我谷歌这个特定的问题时,这个问题总是出现。
几个月后,我终于找到了解决方案。当我设置cygwin时,我的用户和组帐户没有正确地在cygwin中创建。主要的方法是运行:
mkpasswd -l > /etc/passwd
mkgroup -l > /etc/group

如果您正在使用域用户和密码进行登录,可以执行以下操作:

mkpasswd -l -d > /etc/passwd 
mkgroup -l -d > /etc/group

如果你像我一样拥有一个非常庞大的网络,你可能不太需要那么多。另一种选择是仅使用本地用户和组以及当前登录的用户:

mkpasswd -l > /etc/passwd
mkpasswd -c >> /etc/passwd
mkgroup -l > /etc/group
mkgroup -c >> /etc/group

在我做了这个操作后,我终于能够成功运行ssh-host-config来创建服务。


嗨,Matthew,我尝试了这些选项,但仍然不允许我提供“空密码”。 - Pranav Kaushik
3
自从Cygwin 1.7.35版本开始,此建议已过时。现在默认获取用户名/组信息的方式是从本机Windows数据库中获取,根据您的系统是否在Windows域上,使用SAM或AD数据库。除非您有非常特殊的需要可以通过/etc文件覆盖SAM/AD,否则现在根本不应该有这些文件了。请参阅Cygwin用户指南的第3章 - Warren Young

5
我在Windows 7 x64上运行cygwin 1.7和sshd。我不记得在运行sshd_config时遇到过这个错误,但我刚刚查看了我的/var/run目录,它被设置为777。
在cygwin shell中尝试以下命令:chmod 777 /var/run

我也尝试了这个选项。bala@bala-PC ~bala@bala-PC ~ $ chmod 777 /var/runbala@bala-PC ~ $ ls -l /var 总用量 0 drwxr-xr-x 1 bala None 0 2010-01-17 22:34 cache drwxr-xr-x 1 bala None 0 2010-01-17 22:35 cron drwxr-xr-x 1 bala None 0 2010-01-23 11:46 empty drwxr-xr-x 1 bala None 0 2010-01-17 22:34 lib drwxr-xr-x 1 bala None 0 2010-01-17 22:32 log drwxr-xr-x 1 bala None 0 2010-01-17 22:34 run drwxr-xr-x 1 bala None 0 2010-01-17 22:34 tmp -rw-r--r-- 1 bala None 0 2010-01-23 11:44 utmp - Boolean
抱歉,输出似乎格式不正确。我已经尝试了-R 777选项。 - Boolean
2
这对我不起作用。上面的chmod命令是无操作的。 - e40

4
我也曾经遇到过这个问题。 我发现只要我按照以下步骤操作,默认的安装步骤就能正常运行:
  1. 使用“以管理员身份运行”选项以管理员身份启动Cygwin shell。
  2. 禁用UAC。
  3. 关闭实时病毒保护。
一旦完成了这些步骤,可以按照默认的安装步骤进行操作:
  1. 从Cygwin安装程序中安装“openssh”。
  2. 使用“以管理员身份运行”选项以管理员身份启动Cygwin shell。
  3. 从Cygwin shell中运行“ssh-host-config”。
  4. 特权分离:是
  5. 新的本地账户“sshd”:是
  6. 将sshd安装为服务:是
  7. CYGWIN值:ntsec tty
  8. cyg_server的不同名称:否
  9. 创建新的特权用户账户“cyg_server”:是
  10. 设置“cyg_server”密码并妥善保存
  11. net start sshd
之后,在Windows 7专业版和家庭版上似乎都可以正常工作。
如果您已经安装失败了Cygwin sshd,最好进行完全卸载并重新开始。
如果需要的话,下面是Cygwin的卸载说明:http://cygwin.com/faq/faq.html#faq.setup.uninstall-all

3

首先,我需要删除损坏的安装程序:

cygrunsrv --remove sshd
rm -rf /var/log/sshd* /etc/ssh_host* /etc/sshd_config /var/empty

然后按照上述方式生成密码和组:
mkpasswd -l > /etc/passwd
mkgroup -l > /etc/group

接着我执行了以下命令:

ssh-host-config -y
cygrunsrv --start sshd

最终,“setuid failed”消息消失了,登录成功了。

2
在cygwin shell中,确保您是管理员,然后执行以下操作:
takeown /F "C:\cygwin" /R
icacls "C:\cygwin" /grant Everyone:\(F\) /T
icacls "C:\cygwin"
chmod 777 -R "c:\cygwin"

2
这对我来说也是一个无操作。我认为为什么这对我们中的一些人不起作用的答案必须在于/var/run的Windows权限。然而,我所做的所有事情都没有任何效果。我已经删除了/var/run上的所有权限,并创建了一个完全开放的权限。什么也没有。 - e40
这个在win7和cygwin64上运行成功: setfacl -b ~/.ssh/config; chmod 0600 ~/.ssh/config; 来自http://superuser.com/questions/348694/bad-owner-or-permissions-error-using-cygwins-ssh-exe - mosh

1
在Windows资源管理器中,对于文件夹/var

属性。
安全。
添加管理员组并为该文件夹及其子文件夹授予完全控制。

对我有效。

0

我曾经遇到过同样的问题。我相信,我的问题是因为我有一个自定义的/etc/fstab文件,在其中使用“noacl”选项挂载根文件夹。以下是我解决问题的方法:

  1. 将自定义的/etc/fstab文件移开:

     mv /etc/fstab /etc/fstab.bak
    

    或者,您可以编辑/etc/fstab文件并删除noacl选项。

  2. 关闭所有Cygwin bash窗口和任何其他Cygwin进程或服务。如果有任何Cygwin进程正在运行,它将保持旧的/etc/fstab设置。

  3. 启动一个新的Cygwin bash窗口。

  4. 您可能需要运行以下命令。

    chmod +r /etc/passwd
    chmod o+x /var
    chmod +w /var/run
    
  5. 祈求好运,运行ssh-host-config,现在应该没有错误了。

  6. 如果您在第1步中移动了/etc/fstab,则现在可以将其移回来:

     mv /etc/fstab.bak /etc/fstab
    
  7. 如果您在首次安装Cygwin后创建了新用户,请更新/etc/passwd文件,否则这些用户可能无法通过ssh登录:

    mkpasswd -l > /etc/passwd
    
  8. 此外,转到Windows防火墙,并允许C:/cygwin/usr/sbin/sshd.exe和C:/cygwin/usr/sbin/sftp-server.exe


0

只有在我将Cygwin安装在NTFS类型的硬盘上时,我才成功运行了ssh-host-config脚本。当我将Cygwin安装在exFAT类型的闪存驱动器上时,ssh-host-config脚本无法正常工作。


0

对于 Windows 用户,通过右键单击快捷方式并以管理员身份运行「Cygwin 终端」...enter image description here

现在从 Cygwin 终端运行 "ssh-host-config"... 它一定可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接