에 지정된대로 홈 디렉토리를 안전하게 업데이트하려고하는데 /etc/passwd
표준 Linux 유틸리티 인 usermod 및 vipw는 Cygwin에서 제공하지 않습니다.
누구든지 Cygwin에서 이것을 어떻게 변경했는지 말해 줄 수 있습니까?
에 지정된대로 홈 디렉토리를 안전하게 업데이트하려고하는데 /etc/passwd
표준 Linux 유틸리티 인 usermod 및 vipw는 Cygwin에서 제공하지 않습니다.
누구든지 Cygwin에서 이것을 어떻게 변경했는지 말해 줄 수 있습니까?
답변:
편집 : Cygwin (1.7.34 이상)의 최신 버전에 대해서는 이 최신 질문을 참조하십시오 .
sblundy의 답변처럼 언제든지 직접 편집 할 수 있습니다.
그러나 "공식적인"방식으로 수행하려면 cygwin 특정 mkpasswd
명령을 사용하십시오 . 다음은에 대한 공식 문서의 일부입니다 mkpasswd
.
예를 들어 다음 명령은 다음과 같습니다.
예제 3.11. 대체 홈 루트 사용
$ mkpasswd -l -p "$(cygpath -H)" > /etc/passwd
로컬 사용자의 홈 디렉토리를 Windows 'Profiles'디렉토리에 넣습니다.
Cygwin 유틸리티 문서 페이지 (포함 mkpasswd
) 에 설명 된 다른 정말 유용한 명령 이 많이 있습니다 . cygpath
위의 예에서 의 사용은 이러한 cygwin 관련 도구 중 하나입니다.
여기에있는 동안 Windows 문서에서 Cygwin을 효과적으로 사용 하기를 원할 수도 있습니다. 정말 좋은 조언이 많이 있습니다.
-d
for domain) $ mkpasswd -l -d -p "$(cygpath -H)" > /etc/passwd
이것은 저에게 작동하지 않았습니다. 기본적으로 중단되었습니다. 내가이 기계를 사용하는 유일한 사람 때문에, 나는 당신이 도메인에있어 여부를 안전해야이 대안을 사용할 수 있습니다합니다 (이 -c
현재 사용자 "입니다) $ mkpasswd -l -c -p "$(cygpath -H)" > /etc/passwd
$HOME
. 이 문제를 해결하는 방법을 아십니까?
결국 모든 cygwin 쉘을 종료하고 텍스트 편집기에서 직접 편집했습니다. 여태까지는 그런대로 잘됐다.
참고 : "Documents and Settings"디렉토리에서 공백을 이스케이프하지 마십시오. 항목은 다음과 같습니다.
user:...:/cygdrive/c/Documents and Settings/user:/bin/bash
라인은 :
캐릭터에서 토큰 화됩니다 .
내가 찾은 가장 간단한 대답은 / home을 Windows Home / UserProfile 디렉토리에 대한 소프트 링크로 만드는 것입니다.
cd /
mv home oldhome
ln -s "$(cygpath -H)" home
현재 Windows 버전에서 HOME 디렉토리에 대한 적절한 위치를 얻을 수 있으므로 cygpath를 사용했습니다. 내 상자에 cygpath -H
반환/cygdrive/c/Users
cygwin -H
합니다. 가장 합리적인 위치이며 Windows 7 이후 경로에도 공간이 없습니다.
현재 사용자의 경우 다음이 나를 위해 일했습니다.
인수없이 ssh-keygen을 실행하여 작동 함을 확인했습니다. 이 변경 후 앱은 이제 기본적으로 키를 / home / user 대신 / cygdrive / c / Users / user에 저장합니다.
HOME 설정이 필요한지 모르겠지만 여기 비공식 Cygwin 지원을위한 Tortoise의 공식 문서를 사용하여 Cygwin으로 TortoiseGit을 설정하는 지침에 따라 수행했습니다 . . ssh-keygen이 홈 디렉토리 변경을 인식하기에 충분하지 않지만 HOME을 설정하는 것만으로는 충분하지 않습니다.
또한이 문제에 대한 Cygwin의 공식 문서는 여기 에서 찾을 수 있습니다 .
64 비트 Cygwin v1.7.35를 사용하는 Windows 7에서 확인되었습니다.
항상 컴퓨터 속성에서 HOME을 사용자 별 환경 변수로 설정합니다.
저는 cygwin 설치를 펜 드라이브와 다른 컴퓨터에 동기화하는 것을 좋아하므로 홈 디렉토리를 하드 코딩하는 것을 싫어합니다. 다음 cygwin.bat를 사용합니다.
echo off
SETLOCAL
set SHELL=\\bin\\bash
set HOME=%~dp0..\..\doc\unix
bin\bash --login -i
ENDLOCAL
SETLOCAL 및 ENDLOCAL은 SHELL 및 HOME이 다른 프로그램의 기존 환경 변수를 방해하지 않도록합니다. HOME=%~dp0..\..\doc\unix
doc / unix 하위 디렉토리에서 HOME을 두 개의 디렉토리 위로 설정합니다. 그런 다음 .... \ doc \ unix.bashrc에 PATH="/bin:/usr/local/bin:/usr/X11R6/bin:/usr/bin"
. Console2를start /wait %CD%\bin\bash
사용하고 있기 때문에 bash를 시작 하는 데 사용하지 않았 으므로 추가 cmd 창이 필요하지 않습니다.
이것은 영구적이고 휴대가 불가능하며 네트워크가 아닌 솔루션에 적합합니다. 즉, Windows에서 영구적으로 HOME 환경 변수를 설정합니다.
참고 이 영향을주지 않습니다 SSH 또는 텔넷 항상 참조 세션 / etc / passwd에를
ref : Cygwin- 내 HOME 환경 변수 설정은 내가 원하는 것이 아닙니다.
들어 현재 사용자 (요구 한 번 사용자별로 실행) ::
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^%
참고 : 백분율 기호 앞의 캐럿 ^ %
이 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의 %
Cygwin 1.7.34 이상을 사용하는 경우 Cygwin은 .NET에서 홈 디렉토리, 로그인 셸 및 gecos 정보를 가져 오는 방법을 구성하는 것을 지원합니다 /etc/nsswitch.conf
. 이것은 Cygwin 사용자 가이드 섹션에 자세히 설명되어 있습니다.
이전에 /etc/passwd
또는 /etc/group
파일을 만든 경우 이를 제거하고 POSIX 매핑에 대한 새로운 Windows 보안 모델을 사용하여 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:
은 다음과 같습니다.
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 경로로 설정됩니다. "cygwin 스키마"섹션을 참조하십시오 .
unix
AD 전용 : 사용자의 홈 디렉토리가 posixAccount 보조 클래스의 unixHomeDirectory 속성에 제공된 POSIX 경로로 설정됩니다. "Unix 스키마"섹션을 참조하십시오 .
desc
사용자의 홈 디렉토리는 SAM 또는 AD의 사용자 설명 속성에있는 home = "..."XML 유사 설정에 지정된 POSIX 경로로 설정됩니다. 자세한 설명은 "desc 스키마"섹션을 참조하십시오.
다음은 Cygwin의 사용자 홈 디렉토리를 Windows 홈 디렉토리에 사용 된 것과 동일하게 만듭니다.
db_home: windows
사용하는 사람들을 위해 Cygwin에서 1.7.33 거나 이전 업데이트 최신 버전의 Cygwin 제거 이전에 사용 /etc/passwd
하고 /etc/group
파일이 다음 위의 단계를 참조하십시오.
그렇지 않으면 아래의 이전 단계를 따르십시오.
먼저 사용자 프로필을 가리키는 HOME에 대한 Windows 환경 변수를 설정합니다.
HOME
%USERPROFILE%
이제 방금 만든 /etc/passwd
Windows %HOME%
변수로 Cygwin 파일 을 업데이트 하겠습니다. 를 통한 셸 로그인 및 원격 로그인 은 사용자 경로 의 위치를 알려주 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/group
컴퓨터가 도메인 컨트롤러에서 자주 연결이 끊어지는 경우 파일을 추가 할 수 있습니다 .
Cygwin bash 프롬프트에서 다음을 입력하십시오.
cp /etc/group /etc/group.bak
mkgroup -l > /etc/group
mkgroup -d >> /etc/group
이제 Cygwin을 종료하고 다시 시작하십시오. 홈 경로가 Windows 사용자 프로필과 동일한 위치를 가리켜 야합니다./cygdrive/c/Users/username
cd /home
rm -rf chris
ln -s /cygdrive/z chris
나는 그것이 가장 안전한 해결책인지 확실하지 않지만 그것은 나를 위해 일하는 가능한 해결책입니다.)
내 / etc / passwd 파일을 직접 편집하고 (다른 사람이 액세스하지 않도록 확인) / home에 대한 모든 참조를 / Users (Windows 7에서)로 변경했습니다. 모든 것이 제대로 작동하려면 / home 디렉토리의 모든 디렉토리를 삭제해야합니다 (또는 적절한 다른 위치로 이동해야 함). 그렇지 않으면 cygwin은 분할 성격을 개발할 것입니다. 예를 들어 'bash -l'은 / home / Pablo에서 시작하지만 $ HOME은 / Users / Pablo이고 emacs는 그 반대를 수행하는 것처럼 보입니다. / home / Pablo를 삭제하면 모든 것이 잘 작동했습니다.
나는 C:\Users\username
cygwin을 시작할 때만 있어야했습니다 . 그래서 방금 추가 .bashrc
하고.profile
cd ${HOMEPATH}
~/.
대신 사용하려는 경우 $HOMEPATH
다음을 추가 할 수도 있습니다.
export HOME=${HOMEPATH}
이렇게하면 cygwin 설치를 방해하지 않습니다.