代码之家  ›  专栏  ›  技术社区  ›  sblundy

安全更改主目录

  •  82
  • sblundy  · 技术社区  · 16 年前

    我正在尝试安全地更新主目录,如中指定的 /etc/passwd , 但是没有提供标准的Linux实用程序usermod和vipw。 由CygWin。

    有人能告诉我他们是怎么在塞格温改变的吗?

    11 回复  |  直到 8 年前
        1
  •  96
  •   Community miroxlav    7 年前

    编辑: 有关Cygwin(1.7.34及更高版本)的最新版本,请参见 this newer question .

    就像斯布隆迪的答案一样,你总是可以手工编辑。

    但是如果你想用“官方”的方式来做,就用Cygwin特有的 mkpasswd 命令。以下是有关 mkpasswd :

    例如,此命令:

    例3.11。使用备用主根目录

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

    将本地用户的主目录放在Windows“配置文件”目录中。

    上面描述了一系列其他非常有用的命令 Cygwin Utilities 文件页(包括 麦克斯帕德 )使用 cygpath 在上面的示例中是这些Cygwin特定工具中的另一个。

    当你在那里的时候,你可能还想读 Using Cygwin Effectively with Windows 文档。有很多很好的建议。

        2
  •  19
  •   Zombo    11 年前

    最后我退出了所有的cygwin shell,并在一个文本编辑器中手工编辑它。到目前为止,一切都很好。

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

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

    线路标记在 : 性格。

        3
  •  16
  •   Christopher    8 年前

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

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

    我使用了cygpath,因为它将在当前版本的Windows上获得主目录的正确位置。在我的盒子上 cygpath -H 收益率 /cygdrive/c/Users

        4
  •  8
  •   Samuel    9 年前

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

    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。

    我不知道是否需要设置家,但我还是按照关于使用Tortoise的官方文档为非官方的Cygwin支持设置TortoiseGit的说明进行了设置。 here . 但是,单独设置home不足以让ssh keygen识别home目录的更改。

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

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

        5
  •  4
  •   JesperE    16 年前

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

        6
  •  3
  •   Zombo    11 年前

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

    您可以通过键入以下命令来完成此操作:

    mkpasswd -l -p "$(cygpath $(cygpath -dH))" > /etc/passwd
    
        7
  •  2
  •   Myer    13 年前

    我喜欢保持我的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 在doc/unix子目录中将home设置为两个目录。然后在….\doc\unix.bashrc中,我包括 PATH="/bin:/usr/local/bin:/usr/X11R6/bin:/usr/bin" . 我没有使用 start /wait %CD%\bin\bash 因为我正在使用 Console2 ,所以我不需要额外的命令窗口。

        8
  •  2
  •   wyrdR    12 年前

    使用Windows环境变量:HOME

    这对我来说是一个永久的、不可移植的、非网络解决方案;也就是说,在Windows中永久地设置home环境变量。

    注释 这不影响 远程登录 总是引用的会话 /ETC/PASSWD

    ref: Setting up Cygwin- My HOME environment variable is not what I want.

    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^%
    

    注: 插入物^ 之前 百分率符号%

    导入文件

    导入此注册表文件( 现在的 用户):

    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
    

    创造 作为一个新的 可扩展字符串值 (*Reg_展开_sz*)并放入 %用户配置文件%

        9
  •  2
  •   Community miroxlav    7 年前

    原件 answer 通过 Christopher elsewhere

    CygWin 1.7.34 +

    对于那些使用 CygWin 1.7.34 或更高版本的cygwin支持配置如何在 /etc/nsswitch.conf . 这在Cygwin用户指南部分有详细说明:

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

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

    这个 /等/nsswitch.conf 文件的 db_home: 设置定义cygwin如何获取用户的主目录。的默认设置 DB住宅:

    db_home: /home/%U
    

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

    • %u cygwin用户名(小写u)。
    • %U Windows用户名(大写U)。
    • %D Netbios样式的Windows域。
    • %H POSIX样式的Windows主目录。注意,对于 DB住宅: 设置,这只在前面的斜线之后才有意义,如 db_home: /%H/cygwin
    • %_ 由于使用空格和制表符分隔架构,因此必须将文件名中的空格指定为 %% (这是一个下划线)。
    • %% 百分之一字符。

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

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

    2. cygwin 仅适用于广告:用户的主目录设置为cygwinuser辅助类的cygwinome属性中给定的posix路径。也见 the section called “The cygwin schema” .

    3. unix 仅适用于广告:用户的主目录设置为posixaccount辅助类的unixhomedirectory属性中给定的posix路径。也见 the section called “The unix schema” .

    4. desc 用户的主目录设置为sam或ad中用户描述属性中home=…”xml类似设置中给定的posix路径。有关详细描述,请参阅“描述模式”部分。

    下面将使用户在cygwin中的主目录与用于Windows主目录的主目录相同。

    db_home: windows
    

    Cygwin 1.7.33或更早版本

    对于那些使用 CygWin 1.7.33 或更早,更新至 the latest version Cygwin 并移除之前使用的 /ETC/PASSWD /ETC /组 文件,然后参见上面的步骤。

    否则,请遵循下面这些旧步骤。

    首先,为home设置一个指向用户配置文件的Windows环境变量:

    1. 正常开放 系统 控制面板
    2. 先进的 标签点击 环境变量 (朝向底部)
    3. 在“用户变量”区域中,单击“新建_
    4. 输入变量名 HOME
    5. 输入变量值 %用户配置文件%
    6. 在所有打开的对话框中单击“确定”以应用此新设置

    现在我们要更新cygwin /ETC/PASSWD Windows文件 %HOME% 我们刚刚创建的变量。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包含域用户,而 -l 只输出本地计算机用户。如果您在工作中使用的是从Windows域控制器获取用户信息的PC,这一点很重要。

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

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

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

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

        10
  •  1
  •   kitingChris    8 年前
    cd /home
    rm -rf chris
    ln -s /cygdrive/z chris
    

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

        11
  •  0
  •   Pablo Halpern    10 年前

    我直接编辑了我的/etc/passwd文件(确保没有其他文件可以访问它),并将所有对/home的引用更改为be/users(在Windows7上)。我发现,为了使一切正常工作,我必须删除/home目录中的任何目录(或将它们移动到适当的其他位置)。否则,Cygwin将发展出一种分裂的个性,例如,“bash-l”将从/home/pablo开始,而$home将是/users/pablo,而emacs则相反。一旦我删除了/home/pablo,一切正常。

    推荐文章