我正在尝试安全更新/etc/passwd
中指定的主目录,
但是没有提供标准的Linux utils - usermod和vipw
由Cygwin。
有人能告诉我他们是如何在Cygwin中改变这一点的吗?
答案 0 :(得分:96)
编辑:对于最新版本的Cygwin(1.7.34及更高版本),请参阅this newer question。
与sblundy的回答一样,您可以随时编辑。
但如果您想以“官方”方式执行此操作,请使用特定于cygwin的mkpasswd
命令。以下是mkpasswd
上官方文档的摘要:
例如,这个命令:
示例3.11。使用备用主目录
$ mkpasswd -l -p "$(cygpath -H)" > /etc/passwd
会将本地用户的主目录放在Windows“个人档案”目录中。
Cygwin Utilities文档页面(包括mkpasswd
)中描述了许多其他非常有用的命令。在上面的示例中使用cygpath
是这些特定于cygwin的工具中的另一个。
当你在这里时,你可能还想阅读Using Cygwin Effectively with Windows文档。有很多非常好的建议。
答案 1 :(得分:19)
我最终退出了所有的cygwin shell并在文本编辑器中手动编辑。到目前为止,非常好。
注意:不要转义“Documents and Settings”目录中的空格。该条目看起来像
user:...:/cygdrive/c/Documents and Settings/user:/bin/bash
该行在:
字符上被标记化。
答案 2 :(得分:16)
我找到的最简单的答案是让/ home成为Windows Home / UserProfile目录的软链接
cd /
mv home oldhome
ln -s "$(cygpath -H)" home
我使用了cygpath,因为它将获得当前版本Windows上HOME目录的正确位置。在我的方框cygpath -H
上返回/cygdrive/c/Users
答案 3 :(得分:8)
对于当前用户,以下内容对我有用:
我通过运行ssh-keygen确认它没有任何参数。进行此更改后,应用程序现在默认将密钥保存到/ cygdrive / c / Users / user而不是/ home / user。
我不知道是否需要设置HOME,但无论如何我都按照使用Tortoise官方文档为Cygwin设置TortoiseGit的说明做了非官方的Cygwin支持here。单独设置HOME虽然不足以让ssh-keygen识别主目录更改。
另请注意,可以找到Cygwin关于此问题的官方文档here。
使用64位Cygwin v1.7.35在Windows 7中确认。
答案 4 :(得分:4)
我总是在计算机属性中将HOME设置为用户特定的环境变量。
答案 5 :(得分:3)
为避免因在主目录的路径中留有空格而导致的问题,请使用Windows“个人档案”目录的简短格式 - 即/cygdrive/c/DOCUME~1/user
。
您可以通过输入以下命令来执行此操作:
mkpasswd -l -p "$(cygpath $(cygpath -dH))" > /etc/passwd
答案 6 :(得分: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 / unix子目录中将HOME设置为两个目录。然后在.... \ doc \ unix.bashrc中,我包含PATH="/bin:/usr/local/bin:/usr/X11R6/bin:/usr/bin"
。
我没有使用start /wait %CD%\bin\bash
来启动bash,因为我使用Console2,所以我不需要额外的cmd窗口。
答案 7 :(得分:2)
这适用于永久性,非便携式,非网络解决方案;即在Windows中永久设置HOME环境变量。
注意这不会影响总是引用 / etc / passwd 的 ssh 或 telnet 会话
ref: Setting up Cygwin- My HOME environment variable is not what I want.
对于当前用户(需要为每个用户运行一次)::
reg add HKCU\Environment /v HOME /t REG_EXPAND_SZ /d ^%USERPROFILE^%
new 用户:
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
new 用户:
HKU\.DEFAULT\Environment
将 HOME 创建为新的可扩展字符串值(* REG_EXPAND_SZ *)并输入%USERPROFILE%
答案 8 :(得分:2)
来自answer 的Christopher的原始elsewhere
对于使用 Cygwin 1.7.34 或更高版本的用户,Cygwin支持在/etc/nsswitch.conf
中配置如何获取主目录,登录shell和gecos信息。这在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
/etc/nsswitch.conf
文件的db_home:
设置定义了Cygwin如何获取用户的主目录。 db_home:
的默认设置为
db_home: /home/%U
因此,默认情况下,Cygwin只将主目录设置为/home/$USERNAME
。您可以更改它,但指向您想要的任何其他自定义路径。支持的通配符是:
%u
Cygwin用户名('小写u)。%U
Windows用户名(即大写的U)。%D
NetBIOS风格的Windows域。%H
POSIX风格的Windows主目录。请注意,对于db_home:
设置,这仅在前一个斜杠之后才有意义,如db_home: /%H/cygwin
%_
由于空格和TAB字符用于分隔架构,因此文件名中的空格必须为%_
(这是下划线)。%%
一个百分之百的角色。您可以指定预定义的四个命名路径架构中的一个来代替路径。
windows
用户的主目录设置为用作Windows主目录的同一目录,通常与%USERPROFILE%
或C:\Users\$USERNAME
一致。当然,Windows目录由Cygwin转换为POSIX风格。
cygwin
仅限AD:用户的主目录设置为cygwinUser辅助类的cygwinHome属性中给出的POSIX路径。另请参阅the section called “The cygwin schema”。
unix
仅限AD:用户的主目录设置为posixAccount辅助类的unixHomeDirectory属性中给出的POSIX路径。另请参阅the section called “The unix schema”。
desc
用户的主目录设置为home =" ..."中给出的POSIX路径。 SAM或AD中用户的描述属性中的类似XML的设置。有关详细说明,请参阅“desc架构”一节。
以下内容将使用户在Cygwin中的主目录与用于Windows主目录的目录相同。
db_home: windows
对于使用 Cygwin 1.7.33 或更早版本的用户,请更新为the latest version Cygwin并删除以前使用的/etc/passwd
和/etc/group
文件,然后查看上述步骤。
否则,请按照以下旧步骤进行操作。
首先,为HOME设置一个指向用户配置文件的Windows环境变量:
HOME
%USERPROFILE%
现在我们将使用刚刚创建的Windows /etc/passwd
变量更新Cygwin %HOME%
文件。通过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
仅输出LOCAL机器用户。如果您在从Windows域控制器获取用户信息的工作中使用PC,这一点非常重要。
现在,您也可以对组执行相同操作,但除非您将使用属于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
答案 9 :(得分:1)
cd /home
rm -rf chris
ln -s /cygdrive/z chris
我不确定它是否是最安全的解决方案,但它是一个可行的解决方案对我有用;)
答案 10 :(得分:0)
我直接编辑了我的/ etc / passwd文件(确保没有其他内容可以访问它),并将/ home的所有引用更改为/ Users(在Windows 7上)。我发现,为了使一切正常工作,我必须删除/ home目录中的任何目录(或将它们移动到适当的其他位置)。否则,cygwin会产生分裂的个性,例如,'bash -l'将从/ home / Pablo开始,但$ HOME将是/ Users / Pablo,而emacs似乎会反过来。删除/ home / Pablo后,一切正常。
答案 11 :(得分:0)
启动cygwin时,我只需要进入C:\Users\username
。因此,我刚刚添加到.bashrc
和.profile
cd ${HOMEPATH}
如果您更喜欢使用~/.
而不是$HOMEPATH
,还可以添加以下内容:
export HOME=${HOMEPATH}
这样,我不会打扰cygwin的安装。