Cygwin 安全地更改主目录

Cygwin 安全地更改主目录,cygwin,etcpasswd,Cygwin,Etcpasswd,我正在尝试按照/etc/passwd中的指定安全地更新主目录, 但是没有提供用于这样做的标准Linux UTIL-usermod和vipw 由Cygwin撰写 有人能告诉我他们是如何在Cygwin中更改的吗?我总是在计算机属性中将HOME设置为用户特定的环境变量。我最终退出了所有Cygwin shell,并在文本编辑器中手动编辑它。到目前为止,一切顺利 注意:不要转义“Documents and Settings”目录中的空格。条目看起来像 user:...:/cygdrive/c/Docume

我正在尝试按照
/etc/passwd
中的指定安全地更新主目录, 但是没有提供用于这样做的标准Linux UTIL-usermod和vipw 由Cygwin撰写


有人能告诉我他们是如何在Cygwin中更改的吗?

我总是在计算机属性中将HOME设置为用户特定的环境变量。

我最终退出了所有Cygwin shell,并在文本编辑器中手动编辑它。到目前为止,一切顺利

注意:不要转义“Documents and Settings”目录中的空格。条目看起来像

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

该行在
字符上标记。

编辑:有关Cygwin(1.7.34及更高版本)的最新版本,请参阅

就像斯布伦迪的回答一样,你总是可以手工编辑

但是,如果您想以“官方”的方式执行,请使用cygwin特定的命令。以下是官方文件中的一个片段:

例如,此命令:

示例3.11。使用备用主根目录

$ mkpasswd -l -p "$(cygpath -H)" > /etc/passwd
将本地用户的主目录放在Windows的“配置文件”目录中

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


当您进行此操作时,您可能还想阅读文档。这里有很多非常好的建议。

为了避免主目录路径中有空格所导致的问题,请使用Windows“Profiles”目录的缩写形式,即
/cygdrive/c/DOCUME~1/user

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

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

我喜欢让我的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,因为我正在使用,所以我不需要额外的cmd窗口。

我找到的最简单的答案是将/home作为指向Windows home/UserProfile目录的软链接

cd /
mv home oldhome
ln -s "$(cygpath -H)" home
我使用cygpath,因为它将在当前版本的Windows上获得主目录的正确位置。在我的对话框中,使用Windows环境变量:HOME返回
/cygdrive/c/Users

这对我来说是一个永久的、不可移植的、非网络的解决方案;i、 e.在Windows中永久设置主环境变量

注意这不会影响总是引用/etc/passwd的ssh或telnet会话

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

对于新用户:

注意:插入符号^

导入注册表文件 导入此注册表文件(当前用户):

对于新用户:

REGEDIT 在Regedit中,在下面:

对于当前用户:

对于新用户:


创建HOME作为新的可扩展字符串值(*REG_EXPAND_SZ*)并放入%USERPROFILE%我直接编辑了我的/etc/passwd文件(确保没有其他人会访问它),并将所有对/HOME的引用更改为/Users(在Windows 7上)。我发现,为了使一切正常工作,我必须删除/home目录中的任何目录(或将它们移动到适当的其他位置)。否则,cygwin将发展出一种分裂的个性,例如,'bash-l'将以/home/Pablo开头,而$home将是/Users/Pablo,emacs则似乎相反。一旦我删除了/home/Pablo,一切都正常。

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

  • 关闭Cygwin
  • 设置HOME Windows用户环境变量
  • 启动Cygwin
  • 运行“mkpasswd-c-p”$(cygpath-H)>/etc/passwd”
  • 重新启动Cygwin
  • 我通过在没有任何参数的情况下运行ssh-keygen来确认它是有效的。进行此更改后,应用程序现在默认将密钥保存到/cygdrive/c/Users/user,而不是/home/user

    我不知道是否需要回家,但我还是按照与Cygwin建立陆龟注册的说明,使用陆龟的官方文件为非官方的Cygwin提供支持。但是,单独设置HOME不足以让ssh-keygen识别主目录更改

    另外,请注意,可以找到Cygwin关于这个问题的官方文档

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

    cd /home
    rm -rf chris
    ln -s /cygdrive/z chris
    
    我不确定这是否是最安全的解决方案,但这是一个对我有效的可能解决方案;)

    原件由

    Cygwin 1.7.34+ 对于那些使用Cygwin 1.7.34或更高版本的用户,Cygwin支持在
    /etc/nsswitch.conf
    中配置如何获取主目录、登录shell和gecos信息。这在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\u home:
    的默认设置为

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

    • %u
      Cygwin用户名(小写u)
    • %U
      Windows用户名(大写U)
    • 
      
      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
      
      HKEY_CURRENT_USER\Environment
      
      HKU\.DEFAULT\Environment
      
      cd /home
      rm -rf chris
      ln -s /cygdrive/z chris
      
      [[ -f /etc/passwd ]] && mv /etc/passwd /etc/passwd.bak
      [[ -f /etc/group ]] && mv /etc/group /etc/group.bak
      
      db_home: /home/%U
      
      db_home: windows
      
      cp /etc/passwd /etc/passwd.bak
      mkpasswd -l -p $(cygpath -H)  > /etc/passwd 
      mkpasswd -d -p $(cygpath -H)  >> /etc/passwd 
      
      cp /etc/group /etc/group.bak
      mkgroup -l > /etc/group 
      mkgroup -d >> /etc/group