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