ホームディレクトリを安全に変更する


82

で指定されているようにホームディレクトリを安全に更新しようとしていますが/etc/passwd、そのための標準のLinuxユーティリティ(usermodとvipw)はCygwinによって提供されていません。

Cygwinでこれをどのように変更したか誰か教えてもらえますか?


4
stackoverflow.com/q/1494658/923560にある重複した質問は、1.7.34以降の最近のCygwinバージョンに対する回答を提供します。
アブダル2015

回答:


96

編集: Cygwinの最近のバージョン(1.7.34以降)については、この新しい質問を参照してください。

sblundyの答えのように、いつでも手作業で編集できます。

ただし、これを「公式」な方法で実行する場合は、cygwin固有のmkpasswdコマンドを使用します。以下は、次の公式ドキュメントの抜粋mkpasswdです。

たとえば、次のコマンドは次のとおりです。

例3.11。代替ホームルートの使用

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

ローカルユーザーのホームディレクトリをWindowsの「プロファイル」ディレクトリに配置します。

Cygwinユーティリティのドキュメントページ(を含むmkpasswd)には、他にも非常に便利なコマンドがたくさんあります。cygpath上記の例での使用は、これらのcygwin固有のツールのもう1つです。

その間、WindowsでのCygwinの効果的な使用に関するドキュメントも読むことをお勧めします。本当に良いアドバイスがたくさんあります。


10
ドメインを使用している場合は、次の代替コマンドを検討してください:(-dドメインの場合) $ mkpasswd -l -d -p "$(cygpath -H)" > /etc/passwd これは私には機能しませんでした-基本的にハングしました。このマシンを使用しているのは私だけなので、この代替手段を使用できます。これは、ドメインを使用しているかどうかに関係なく安全です(-c「現在のユーザー」用です) $ mkpasswd -l -c -p "$(cygpath -H)" > /etc/passwd
Ryan Pavlik 2012

1
これを行った後、新しい.bashrcにコピーしても、.bashrcが読み取られないようです$HOME。これを修正する方法はありますか?
ジェフ

1
出力は/ etc / passwdに追加(>>)する必要があります(複数のユーザーがいる企業シナリオの場合)。これはうまくいきました!:)
アンドレ

1
uname -rを使用して、現在使用しているcygwinバージョンを確認します
martin jakubik 2017年

19

最終的に、すべてのcygwinシェルを終了し、テキストエディターで手動で編集しました。ここまでは順調ですね。

注:「ドキュメントと設定」ディレクトリのスペースをエスケープしないでください。エントリは次のようになります

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

行は:文字でトークン化されます。


これはUNCパスでも機能します。以前はHOME変数でオーバーライドされていました
HaveAGuess 2014年

手作業で何を編集する必要がありますか?cygwinのホームディレクトリが/cygdrive/c/Users/JoseAngel/AppData/Roaming/SPB_16.6である理由がわかりません。C:/ Users / MyName /にしたいと思います

16

私が見つけた最も簡単な答えは、/ homeをWindowsのHome / UserProfileディレクトリへのソフトリンクにすることです。

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

現在のバージョンのWindowsでHOMEディレクトリの適切な場所を取得するため、cygpathを使用しました。私の箱にcygpath -H戻る/cygdrive/c/Users


これをしばらく行った後、1つの欠点があります。setup.exeを使用してcygwinを更新するたびに実行する必要があります。大したことではありませんが、覚えておくべきことがあります。
M・スミス

これが最良の答えです。なぜcygwinがデフォルトでデフォルトにならないのだろうかcygwin -H。これは最も賢明な場所であり、Windows 7以降、そのパスにもスペースがありません。
ダッシュ2015

別の注意点として、これは機能しません。突然、シンボリックリンクを無視することにしました!
ダッシュ2015

セットアップを再度実行するときに、再適用する必要があります。それが私にとって失敗した唯一の時です。私はまだ
M Smith

Windows10では期待どおりに動作します。cygwinを更新するたびに再適用する必要があります。
M・スミス

8

現在のユーザーの場合、次のことがうまくいきました。

  1. Cygwinを閉じます。
  2. HOMEWindowsユーザー環境変数を設定します。
  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を設定する手順に従って行いました。。ただし、HOMEを単独で設定するだけでは、ssh-keygenがホームディレクトリの変更を認識するのに十分ではありませんでした。

また、この問題に関するCygwinの公式ドキュメントはここにあります。

64ビットのCygwinv1.7.35を使用するWindows7で確認済み。


Cygwin 1.7.35+の場合、/ etc / nsswitch.confを優先してmkpasswdの使用は推奨されません
Christopher

4

コンピューターのプロパティで、常にHOMEをユーザー固有の環境変数として設定しています。


企業ネットワークドライブに設定されているため、これを回避しようとしています。それでもうまくいくようです。
sblundy 2008年

6
これはsshでは機能しないことに注意してください。明示的にHOMEを無視し、常に/ etc / passwdを使用します。cygwin.com/faq/faq-nochunks.html#faq.setup.homeの最後の文を参照してください。
studgeek 2011

3

ホームディレクトリへのパスにスペースがあることによって引き起こされる問題を回避するには、Windowsの「プロファイル」ディレクトリの短縮形を使用します/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\unixHOMEをdoc / unixサブディレクトリの2つのディレクトリに設定します。次に、.... \ doc \ unix.bashrcにPATH="/bin:/usr/local/bin:/usr/X11R6/bin:/usr/bin"。を含めます。私が使用していなかったstart /wait %CD%\bin\bash私が使用していますので、bashのを開始するためにコンソール2を、私は、追加のcmdウィンドウを必要としないので、。


2

Windows環境変数の使用:HOME

これは、永続的で、移植性がなく、ネットワーク以外のソリューションで機能します。つまり、WindowsでHOME環境変数を永続的に設定します。

これは、常に/ etc / passwdを参照するsshまたはtelnetセッションには影響しないことに注意しください。

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では、以下の下にあります。

以下の場合、現在のユーザー:

HKEY_CURRENT_USER\Environment

以下のための新しいユーザー:

HKU\.DEFAULT\Environment

HOMEを新しい拡張可能な文字列値(* REG_EXPAND_SZ *)として作成し、%USERPROFILE%に入れます


この回答がどのような情報に基づいていたとしても、それはもはや最新のものではありません。REF:リンクも壊れています。私は家でこれを試しません。
クリストファー

2

他の場所からのクリストファーによる元の回答

Cygwin 1.7.34+

Cygwin 1.7.34以降を使用している場合、Cygwinは、ホームディレクトリ、ログインシェル、およびgecos情報をで取得する方法の構成をサポートしています/etc/nsswitch.conf。これについては、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_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文字が使用されるため、ファイル名のスペースは%_(アンダースコア)として指定する必要があります。
  • %% パーセント文字。

パスの代わりに、事前定義されている4つの名前付きパススキーマのいずれかを指定できます。

  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のユーザーのdescription属性のhome = "..." XMLに似た設定で指定されたPOSIXパスに設定されます。詳細な説明については、「descスキーマ」というセクションを参照してください。

以下は、CygwinのユーザーのホームディレクトリをWindowsのホームディレクトリに使用されるものと同じにします。

db_home: windows

Cygwin1.7.33以前

Cygwin 1.7.33以前を使用している場合は、最新バージョンのCygwinに更新し以前に使用したもの/etc/passwd/etc/groupファイルは、その後、上記の手順を参照してください。

それ以外の場合は、以下の古い手順に従ってください。

まず、ユーザープロファイルを指すHOMEのWindows環境変数を設定します。

  1. コントロールパネルでシステムを開く
  2. 高度なタブをクリックし環境変数(下方向への)
  3. [ユーザー変数]領域で、[新規...]をクリックします
  4. 変数名に次のように入力します HOME
  5. 変数値に次のように入力します %USERPROFILE%
  6. 開いているすべてのダイアログボックスで[OK]をクリックして、この新しい設定を適用します

次に/etc/passwd%HOME%作成したWindows変数で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を終了し、再起動します。HOMEパスが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.