안전하게 홈 디렉토리 변경


82

에 지정된대로 홈 디렉토리를 안전하게 업데이트하려고하는데 /etc/passwd표준 Linux 유틸리티 인 usermod 및 vipw는 Cygwin에서 제공하지 않습니다.

누구든지 Cygwin에서 이것을 어떻게 변경했는지 말해 줄 수 있습니까?


4
stackoverflow.com/q/1494658/923560 의 중복 질문은 1.7.34로 시작하는 최신 Cygwin 버전에 대한 답변을 제공합니다.
Abdull 2015 년

답변:


96

편집 : 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을 효과적으로 사용 하기를 원할 수도 있습니다. 정말 좋은 조언이 많이 있습니다.


10
도메인에있는 경우 다음 대체 명령을 고려할 수 있습니다. ( -dfor domain) $ mkpasswd -l -d -p "$(cygpath -H)" > /etc/passwd 이것은 저에게 작동하지 않았습니다. 기본적으로 중단되었습니다. 내가이 기계를 사용하는 유일한 사람 때문에, 나는 당신이 도메인에있어 여부를 안전해야이 대안을 사용할 수 있습니다합니다 (이 -c현재 사용자 "입니다) $ mkpasswd -l -c -p "$(cygpath -H)" > /etc/passwd
라이언 Pavlik의

1
이렇게 한 후 .bashrc를 새 .NET에 복사하더라도 .bashrc가 읽히지 않는 것 같습니다 $HOME. 이 문제를 해결하는 방법을 아십니까?
제프

1
출력은 / etc / passwd에 추가 (>>) 해야합니다 (여러 사용자가있는 기업 시나리오의 경우). 이것은 작동했습니다! :)
Andre

1
uname -r을 사용하여 현재 사용중인 cygwin 버전을 확인하십시오.
martin jakubik

19

결국 모든 cygwin 쉘을 종료하고 텍스트 편집기에서 직접 편집했습니다. 여태까지는 그런대로 잘됐다.

참고 : "Documents and Settings"디렉토리에서 공백을 이스케이프하지 마십시오. 항목은 다음과 같습니다.

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

라인은 :캐릭터에서 토큰 화됩니다 .


이것은 UNC 경로에서도 작동합니다. 이전에 HOME 변수로 재정의 한 덕분에
HaveAGuess 2014-06-11

손으로 편집해야하는 것은 무엇입니까? 내 Cygwin에서 홈 디렉토리가 나는 C가되고 싶어요 /cygdrive/c/Users/JoseAngel/AppData/Roaming/SPB_16.6 이유를 모르겠어요 : / 사용자 / MyName로 /

16

내가 찾은 가장 간단한 대답은 / home을 Windows Home / UserProfile 디렉토리에 대한 소프트 링크로 만드는 것입니다.

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

현재 Windows 버전에서 HOME 디렉토리에 대한 적절한 위치를 얻을 수 있으므로 cygpath를 사용했습니다. 내 상자에 cygpath -H반환/cygdrive/c/Users


한동안이 작업을 수행 한 후 한 가지 단점이 있습니다. setup.exe를 사용하여 cygwin을 업데이트 할 때마다 실행해야합니다. 큰 문제는 아니지만 기억해야 할 것.
M Smith

이것이 최고의 답변입니다. cygwin이 기본적으로 기본값이 아닌 이유가 궁금 cygwin -H합니다. 가장 합리적인 위치이며 Windows 7 이후 경로에도 공간이 없습니다.
dashesy

다른 메모에서 이것은 작동하지 않습니다. 갑자기 심볼릭 링크를 무시하기로 결정했습니다!
dashesy

설치를 다시 실행할 때 다시 적용해야합니다. 그것이 나에게 실패한 유일한 시간입니다. 아직 불구 창 (10)에 그것을 시도하지 않은
M 스미스

Windows 10에서 예상대로 작동합니다. cygwin을 업데이트 할 때마다 다시 적용해야합니다.
M Smith

8

현재 사용자의 경우 다음이 나를 위해 일했습니다.

  1. Cygwin을 닫습니다.
  2. HOME Windows 사용자 환경 변수를 설정합니다.
  3. Cygwin을 시작하십시오.
  4. "mkpasswd -c -p"$ (cygpath -H) "> / etc / passwd"를 실행하십시오.
  5. Cygwin을 다시 시작하십시오.

인수없이 ssh-keygen을 실행하여 작동 함을 확인했습니다. 이 변경 후 앱은 이제 기본적으로 키를 / home / user 대신 / cygdrive / c / Users / user에 저장합니다.

HOME 설정이 필요한지 모르겠지만 여기 비공식 Cygwin 지원을위한 Tortoise의 공식 문서를 사용하여 Cygwin으로 TortoiseGit을 설정하는 지침에 따라 수행했습니다 . . ssh-keygen이 홈 디렉토리 변경을 인식하기에 충분하지 않지만 HOME을 설정하는 것만으로는 충분하지 않습니다.

또한이 문제에 대한 Cygwin의 공식 문서는 여기 에서 찾을 수 있습니다 .

64 비트 Cygwin v1.7.35를 사용하는 Windows 7에서 확인되었습니다.


Cygwin 1.7.35+의 경우 /etc/nsswitch.conf에 찬성하여 mkpasswd를 사용하지 않는 것이 좋습니다.
Christopher

4

항상 컴퓨터 속성에서 HOME을 사용자 별 환경 변수로 설정합니다.


회사 네트워크 드라이브로 설정되어 있으므로 피하려고합니다. 그래도 작동 할 것 같습니다.
sblundy

6
이것은 ssh에서는 작동하지 않으며, 명시 적으로 HOME을 무시하고 항상 / etc / passwd를 사용합니다. cygwin.com/faq/faq-nochunks.html#faq.setup.home의 마지막 문장을 참조하십시오 .
studgeek 2011 년

3

홈 디렉토리 경로에 공백이있어 발생하는 문제를 방지하려면 Windows 'Profiles'디렉토리의 약식을 사용하십시오 /cygdrive/c/DOCUME~1/user. 즉 .

다음 명령을 입력하여이를 수행 할 수 있습니다.

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

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이 다른 프로그램의 기존 환경 변수를 방해하지 않도록합니다. HOME=%~dp0..\..\doc\unixdoc / unix 하위 디렉토리에서 HOME을 두 개의 디렉토리 위로 설정합니다. 그런 다음 .... \ doc \ unix.bashrc에 PATH="/bin:/usr/local/bin:/usr/X11R6/bin:/usr/bin". Console2를start /wait %CD%\bin\bash 사용하고 있기 때문에 bash를 시작 하는 데 사용하지 않았 으므로 추가 cmd 창이 필요하지 않습니다.


2

Windows 환경 변수 사용 : HOME

이것은 영구적이고 휴대가 불가능하며 네트워크가 아닌 솔루션에 적합합니다. 즉, Windows에서 영구적으로 HOME 환경 변수를 설정합니다.

참고 이 영향을주지 않습니다 SSH 또는 텔넷 항상 참조 세션 / etc / passwd에를

ref : Cygwin- 내 HOME 환경 변수 설정은 내가 원하는 것이 아닙니다.

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

참고 : 백분율 기호 앞의 캐럿 ^ %

등록 파일 가져 오기

이 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

Regedit에서 아래 :

의 경우 현재 사용자 :

HKEY_CURRENT_USER\Environment

들어 새로운 사용자 :

HKU\.DEFAULT\Environment

만들기 HOME 새로운으로 확장 가능한 문자열 값 (* REG_EXPAND_SZ *)를하고에 넣어 %의 USERPROFILE의 %


이 답변의 기반이 된 정보는 더 이상 최신 정보가 아닙니다. REF : 링크도 나뉩니다. 나는 이것을 집에서 시도하지 않을 것입니다.
크리스토퍼

2

원래 대답 에 의해 크리스토퍼 에서 다른 곳

Cygwin 1.7.34 이상

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 도메인.
  • %HPOSIX 스타일의 Windows 홈 디렉토리. 그 참고에 대한 db_home:설정, 이것은 단지에서와 같이 선행 슬래시 후 감지 권리를 만든다db_home: /%H/cygwin
  • %_스키마를 구분하는 데 공백과 TAB 문자가 사용되므로 파일 이름에 공백을 %_(밑줄)로 지정해야합니다.
  • %% 백분율 문자입니다.

경로 대신 미리 정의 된 네 개의 명명 된 경로 스키마 중 하나를 지정할 수 있습니다.

  1. windows사용자의 홈 디렉토리는 Windows 홈 디렉토리로 사용되는 것과 동일한 디렉토리로 설정됩니다. 일반적으로 %USERPROFILE%또는 라인을 따라 C:\Users\$USERNAME있습니다. 물론 Windows 디렉토리는 Cygwin에 의해 POSIX 스타일로 변환됩니다.

  2. cygwinAD 전용 : 사용자의 홈 디렉토리는 cygwinUser 보조 클래스의 cygwinHome 속성에 제공된 POSIX 경로로 설정됩니다. "cygwin 스키마"섹션을 참조하십시오 .

  3. unixAD 전용 : 사용자의 홈 디렉토리가 posixAccount 보조 클래스의 unixHomeDirectory 속성에 제공된 POSIX 경로로 설정됩니다. "Unix 스키마"섹션을 참조하십시오 .

  4. desc사용자의 홈 디렉토리는 SAM 또는 AD의 사용자 설명 속성에있는 home = "..."XML 유사 설정에 지정된 POSIX 경로로 설정됩니다. 자세한 설명은 "desc 스키마"섹션을 참조하십시오.

다음은 Cygwin의 사용자 홈 디렉토리를 Windows 홈 디렉토리에 사용 된 것과 동일하게 만듭니다.

db_home: windows

Cygwin 1.7.33 이하

사용하는 사람들을 위해 Cygwin에서 1.7.33 거나 이전 업데이트 최신 버전의 Cygwin 제거 이전에 사용 /etc/passwd하고 /etc/group파일이 다음 위의 단계를 참조하십시오.

그렇지 않으면 아래의 이전 단계를 따르십시오.

먼저 사용자 프로필을 가리키는 HOME에 대한 Windows 환경 변수를 설정합니다.

  1. 제어판 에서 시스템 열기
  2. 고급 탭을 클릭하여 환경 변수 (아래쪽으로)를
  3. 사용자 변수 영역에서 "새로 만들기…"를 클릭합니다.
  4. 변수 이름에 다음을 입력하십시오. HOME
  5. 변수 값에 다음을 입력하십시오. %USERPROFILE%
  6. 열려있는 모든 대화 상자에서 확인을 클릭하여이 새 설정을 적용합니다.

이제 방금 만든 /etc/passwdWindows %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


1
cd /home
rm -rf chris
ln -s /cygdrive/z chris

나는 그것이 가장 안전한 해결책인지 확실하지 않지만 그것은 나를 위해 일하는 가능한 해결책입니다.)


0

내 / etc / passwd 파일을 직접 편집하고 (다른 사람이 액세스하지 않도록 확인) / home에 대한 모든 참조를 / Users (Windows 7에서)로 변경했습니다. 모든 것이 제대로 작동하려면 / home 디렉토리의 모든 디렉토리를 삭제해야합니다 (또는 적절한 다른 위치로 이동해야 함). 그렇지 않으면 cygwin은 분할 성격을 개발할 것입니다. 예를 들어 'bash -l'은 / home / Pablo에서 시작하지만 $ HOME은 / Users / Pablo이고 emacs는 그 반대를 수행하는 것처럼 보입니다. / home / Pablo를 삭제하면 모든 것이 잘 작동했습니다.


0

나는 C:\Users\usernamecygwin을 시작할 때만 있어야했습니다 . 그래서 방금 추가 .bashrc하고.profile

cd ${HOMEPATH}

~/.대신 사용하려는 경우 $HOMEPATH다음을 추가 할 수도 있습니다.

export HOME=${HOMEPATH}

이렇게하면 cygwin 설치를 방해하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.