安全更改主目录


Answers:


96

编辑:对于Cygwin的最新版本(1.7.34及更高版本),请参见此较新的问题

像sblundy的答案一样,您始终可以手动编辑。

但是,如果您想以“官方”方式进行操作,请使用特定于cygwin的mkpasswd命令。以下是来自的官方文档的摘录mkpasswd

例如,此命令:

示例3.11 使用备用主根

$ mkpasswd -l -p "$(cygpath -H)" > /etc/passwd

会将本地用户的主目录放在Windows的“个人资料”目录中。

Cygwin实用程序文档页面(包括mkpasswd)上介绍了许多其他非常有用的命令。cygpath在以上示例中的使用是这些特定于Cygwin的工具中的另一种。

在阅读本书时,您可能还想阅读“将Cygwin与Windows一起有效使用”文档。有很多非常好的建议。


10
如果您在域中,则可以考虑以下替代命令:(-d对于域) $ mkpasswd -l -d -p "$(cygpath -H)" > /etc/passwd 这对我不起作用-它基本上挂了。由于我是唯一使用此计算机的人,因此我可以使用此替代方法,无论您是否在域上(-c对于“当前用户”) ,这都应该是安全的$ mkpasswd -l -c -p "$(cygpath -H)" > /etc/passwd
Ryan Pavlik

1
完成此操作后,即使我将.bashrc复制到new,它似乎也无法读取$HOME。任何想法如何解决这个问题?
杰夫

1
输出应附加(>>)到/ etc / passwd(对于具有多个用户的公司方案)。这工作!:)
Andre

1
使用uname -r查看您使用的cygwin版本
martin jakubik

19

我最终退出了所有cygwin shell,并在文本编辑器中手动对其进行了编辑。到现在为止还挺好。

注意:不要在“文档和设置”目录中转义空格。条目看起来像

user:...:/cygdrive/c/Documents and Settings/user:/bin/bash

这行标记在:字符上。


这也适用于UNC路径,这要感谢之前用HOME变量覆盖了
HaveAGuess14年

我必须手动编辑什么?我不知道为什么我的cygwin主目录为/cygdrive/c/Users/JoseAngel/AppData/Roaming/SPB_16.6,我希望它成为C:/ Users / MyName /

16

我找到的最简单的答案是使/ home成为Windows Home / UserProfile目录的软链接。

cd /
mv home oldhome
ln -s "$(cygpath -H)" home

我使用cygpath,因为它将在当前版本的Windows上获取HOME目录的正确位置。在我的盒子上cygpath -H退货/cygdrive/c/Users


经过一段时间后,存在一个缺点:每次我使用它们的setup.exe更新cygwin时,都必须运行它。没什么大不了,但要记住一些事情。
M Smith

这是最好的答案。我不知道为什么cygwin默认不cygwin -H默认。这是最明智的位置,并且由于Windows 7也没有路径。
dashesy

另一方面,这是行不通的。它突然决定忽略符号链接!
dashesy

再次运行安装程序时,必须重新应用它。那是我唯一一次失败。我还没有在Windows 10上尝试过
M Smith,

在Windows 10上可以正常工作。每次更新cygwin时,我仍然必须重新应用。
M史密斯

8

对于当前用户,以下对我有用:

  1. 关闭Cygwin。
  2. 设置HOME Windows用户环境变量。
  3. 启动Cygwin。
  4. 运行“ mkpasswd -c -p“ $(cygpath -H)”> / etc / passwd“。
  5. 重新启动Cygwin。

我通过运行不带任何参数的ssh-keygen确认它可以工作。进行此更改后,该应用程序现在默认将密钥保存到/ cygdrive / c / Users / user而不是/ home / user。

我不知道是否需要设置HOME,但是无论如何我还是按照此处的说明使用Torgise的官方文档为Cygwin设置了Cygwin的TortoiseGit,以进行非官方的Cygwin支持。尽管仅设置HOME不足以使ssh-keygen识别主目录更改。

另外,请注意,可以在此处找到有关此问题的Cygwin的官方文档。

在Windows 7中使用64位Cygwin v1.7.35确认。


对于Cygwin 1.7.35+,建议不要使用mkpasswd来支持/etc/nsswitch.conf
Christopher


3

为了避免由于主目录路径中空格引起的问题,请使用Windows“配置文件”目录的缩写形式-即/cygdrive/c/DOCUME~1/user

您可以通过键入以下命令来执行此操作:

mkpasswd -l -p "$(cygpath $(cygpath -dH))" > /etc/passwd

2

我想使cygwin安装与笔式驱动器和另一台计算机保持同步,因此我讨厌对主目录进行硬编码。我使用以下cygwin.bat:

echo off
SETLOCAL
set SHELL=\\bin\\bash
set HOME=%~dp0..\..\doc\unix
bin\bash --login -i
ENDLOCAL

SETLOCAL和ENDLOCAL确保SHELL和HOME不会破坏其他程序的现有env变量。HOME=%~dp0..\..\doc\unix将HOME设置为doc / unix子目录中的两个目录。然后在.... \ doc \ unix.bashrc中,我包括PATH="/bin:/usr/local/bin:/usr/X11R6/bin:/usr/bin"。我没有start /wait %CD%\bin\bash启动bash,因为我使用的是Console2,因此不需要其他的cmd窗口。


2

使用Windows环境变量:HOME

这对我来说是一个永久的,不可移植的,非网络的解决方案;即在Windows中永久设置HOME Environment变量。

请注意,这不会影响始终引用/ etc / passwd的sshtelnet会话

参考:设置Cygwin-我的HOME环境变量不是我想要的。

CMD

对于当前用户(需要每个用户运行一次)::

reg add HKCU\Environment /v HOME /t REG_EXPAND_SZ /d ^%USERPROFILE^%

对于用户:

reg add HKU\.DEFAULT\Environment /v HOME /t REG_EXPAND_SZ /d ^%USERPROFILE^%

注意:百分号%之前的Carets ^

导入注册表文件

导入此reg文件(当前用户):

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Environment]
"HOME"=hex(2):25,00,55,00,53,00,45,00,52,00,50,00,52,00,4f,00,46,00,49,00,4c,\
  00,45,00,25,00,00,00

对于用户:

Windows Registry Editor Version 5.00

[HKU\.DEFAULT\Environment]
"HOME"=hex(2):25,00,55,00,53,00,45,00,52,00,50,00,52,00,4f,00,46,00,49,00,4c,\
  00,45,00,25,00,00,00

注册

在Regedit中,在:

对于当前用户:

HKEY_CURRENT_USER\Environment

对于用户:

HKU\.DEFAULT\Environment

HOME创建为新的可扩展字符串值(* REG_EXPAND_SZ *),然后放入%USERPROFILE%


无论此答案基于什么信息,它都不再是最新的。该裁判:链接也被打破。我不会在家里尝试。
Christopher

2

原来答案克里斯托弗其他地方

Cygwin 1.7.34+

对于使用Cygwin 1.7.34或更高版本的用户,Cygwin支持在中配置如何获取主目录,登录Shell和gecos信息/etc/nsswitch.conf。《 Cygwin用户指南》部分中对此进行了详细说明:

如果您以前创建了/etc/passwd/etc/group文件,则要删除这些文件或文件,并使用新的Windows安全模型到POSIX映射配置Cygwin。

[[ -f /etc/passwd ]] && mv /etc/passwd /etc/passwd.bak
[[ -f /etc/group ]] && mv /etc/group /etc/group.bak

/etc/nsswitch.conf文件的db_home:设置定义的Cygwin如何获取用户的主目录。默认设置为db_home:IS

db_home: /home/%U

因此,默认情况下,Cygwin只是将主目录设置为/home/$USERNAME。您可以更改它,以指向所需的任何其他自定义路径。支持的通配符为:

  • %u Cygwin用户名(小写的u)。
  • %U Windows用户名(大写U)。
  • %D NetBIOS风格的Windows域。
  • %HPOSIX样式的Windows主目录。请注意,对于db_home:设置,这仅在前面的斜杠之后才有意义,例如db_home: /%H/cygwin
  • %_由于使用空格和TAB字符分隔模式,因此文件名中的空格必须为%_(这是下划线)。
  • %% 百分比字符。

可以代替路径指定预定义的四个命名路径模式之一。

  1. windows用户的主目录设置为与Windows主目录相同的目录,通常是%USERPROFILE%或的形式C:\Users\$USERNAME。当然,Cygwin将Windows目录转换为POSIX样式。

  2. cygwin仅限AD:用户的主目录设置为cygwinUser辅助类的cygwinHome属性中给定的POSIX路径。另请参见“ cygwin模式”一节

  3. unix仅限AD:用户的主目录设置为posixAccount辅助类的unixHomeDirectory属性中给定的POSIX路径。另请参见“ Unix模式”一节

  4. desc用户的主目录设置为SAMIX或AD中用户描述属性中XML相似的home =“ ...” XML设置中提供的POSIX路径。有关详细说明,请参见“ desc模式”一节。

以下内容将使Cygwin中用户的主目录与Windows主目录使用的主目录相同。

db_home: windows

Cygwin 1.7.33或更早版本

对于使用这些Cygwin的33年7月1日或更早的版本,更新到最新版本的Cygwin,并删除以前使用/etc/passwd/etc/group文件,再看看上面的步骤。

否则,请按照以下这些较旧的步骤进行操作。

首先,为HOME设置一个Windows环境变量,该变量指向您的用户个人资料:

  1. 控制面板上打开系统
  2. 在“高级”选项卡上,单击“环境变量”(朝下)
  3. 在“用户变量”区域中,单击“新建...”。
  4. 输入变量名称 HOME
  5. 对于变量值,请输入 %USERPROFILE%
  6. 在所有打开的对话框中单击“确定”以应用此新设置

现在,我们将/etc/passwd使用%HOME%刚刚创建的Windows变量更新Cygwin文件。Shell登录和远程登录通过ssh依赖于/etc/passwd告诉他们用户$HOME路径的位置。

在Cygwin bash命令提示符下,键入以下内容:

cp /etc/passwd /etc/passwd.bak
mkpasswd -l -p $(cygpath -H)  > /etc/passwd 
mkpasswd -d -p $(cygpath -H)  >> /etc/passwd 

-d开关告诉mkpasswd包括DOMAIN用户,而-l只输出本地机器用户。如果您在工作中使用PC且从Windows域控制器获取用户信息的情况下,这一点很重要。

现在,您也可以对组执行相同的操作,尽管没有必要,除非您将使用Windows域中的计算机。Cygwin从Windows帐户数据库中读取组信息,但是/etc/group如果您的计算机经常与其域控制器断开连接,则可以添加文件。

在Cygwin bash提示符下,键入以下内容:

cp /etc/group /etc/group.bak
mkgroup -l > /etc/group 
mkgroup -d >> /etc/group 

现在,退出Cygwin并重新启动。您应该发现您的HOME路径指向与Windows用户配置文件相同的位置-即/cygdrive/c/Users/username


1
cd /home
rm -rf chris
ln -s /cygdrive/z chris

我不太确定这是否是最安全的解决方案,但它可能对我有用;)


0

我直接编辑了/ etc / passwd文件(确保没有其他东西可以访问它),并将对/ home的所有引用更改为/ Users(在Windows 7上)。我发现,为了使所有内容都能正常工作,我必须删除/ home目录中的任何目录(或将它们移至相应的其他位置)。否则,cygwin将发展出一种分裂的个性,例如,“ bash -l”将以/ home / Pablo开头,而$ HOME将是/ Users / Pablo,而emacs则相反。删除/ home / Pablo后,一切正常。


0

C:\Users\username当我启动cygwin时,我只需要进入。所以,我刚刚添加到.bashrc.profile

cd ${HOMEPATH}

如果您希望使用~/.而不是$HOMEPATH,也可以添加以下内容:

export HOME=${HOMEPATH}

这样我就不会打扰cygwin的安装。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.