web-dev-qa-db-ja.com

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

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

Cygwinでこれをどのように変更したか教えてください。

82
sblundy

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

注:「Documents and Settings」ディレクトリ内のスペースをエスケープしないでください。エントリは次のようになります

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

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

19
sblundy

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

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

しかし、「公式」な方法でやりたい場合は、cygwin固有の mkpasswd コマンドを使用します。以下は mkpasswd に関する公式ドキュメントの抜粋です。

たとえば、次のコマンド:

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

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

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

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

あなたがそれをしている間に、おそらく WindowsでCygwinを効果的に使用する のドキュメントも読みたいでしょう。本当に良いアドバイスがたくさんあります。

96
netjeff

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

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

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

16
M Smith

現在のユーザーの場合、以下が私のために働いた:

  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でTortoiseGitをセットアップする手順に従って、非公式のCygwinサポートに関するTortoiseの公式ドキュメントを使用して行いました here 。ただし、ssh-keygenがホームディレクトリの変更を認識するには、HOMEを単独で設定するだけでは不十分でした。

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

64ビットCygwin v1.7.35を使用してWindows 7で確認済み。

8
Samuel

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

4
JesperE

ホームディレクトリへのパスにスペースがあることによる問題を回避するには、Windowsの「プロファイル」ディレクトリの短い形式を使用します-/cygdrive/c/DOCUME~1/user

これを行うには、次のコマンドを入力します。

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

私は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は、doc/unixサブディレクトリ内で、HOMEを2つ上のディレクトリに設定します。次に....\doc\unix.bashrcにPATH="/bin:/usr/local/bin:/usr/X11R6/bin:/usr/bin"を含めます。 Console2 を使用しているため、bashの開始にstart /wait %CD%\bin\bashを使用しなかったため、追加のcmdウィンドウは必要ありません。

2
P. Myer Nore

Windows環境変数の使用:HOME

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

これはsshまたはtelnet/ etc/passwdを常に参照するセッション

参照:Cygwinのセットアップ-私のHOME環境変数は私が望むものではありません。

CMD

currentユーザーの場合(ユーザーごとに1回実行する必要があります)::

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

注:キャレット^beforeパーセント記号%

インポートREGファイル

このregファイルをインポートします(currentユーザー):

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

newユーザーの場合:

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で、以下を実行します。

currentユーザーの場合:

HKEY_CURRENT_USER\Environment

newユーザーの場合:

HKU\.DEFAULT\Environment

[〜#〜] home [〜#〜]を新しいとして展開可能な文字列値(* REG_EXPAND_SZ *)と入力%USERPROFILE%

2
wyrdR

オリジナル answer by Christopher from elsewhere

Cygwin 1.7.34+

Cygwin 1.7.34以降を使用する場合Cygwinは、/etc/nsswitch.confでホームディレクトリ、ログインシェル、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_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文字はスキーマを区切るために使用されるため、ファイル名のスペースは%_(アンダースコア)として指定する必要があります。
  • %%パーセント文字。

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

  1. windowsユーザーのホームディレクトリは、Windowsホームディレクトリとして使用されるのと同じディレクトリに設定されます。通常は、%USERPROFILE%またはC:\Users\$USERNAMEの行に沿ったものです。もちろん、WindowsディレクトリはCygwinによってPOSIXスタイルに変換されます。

  2. cygwin ADのみ:ユーザーのホームディレクトリは、cygwinUser補助クラスのcygwinHome属性で指定されたPOSIXパスに設定されます。 「The cygwin schema」と呼ばれるセクション も参照してください。

  3. unix ADのみ:ユーザーのホームディレクトリは、posixAccount補助クラスのunixHomeDirectory属性で指定されたPOSIXパスに設定されます。 「Unixスキーマ」と呼ばれるセクション も参照してください。

  4. descユーザーのホームディレクトリは、SAMまたはADのユーザーの説明属性のhome = "..." XMLに類似した設定で指定されたPOSIXパスに設定されます。詳細については、「ディスクスキーマ」というセクションを参照してください。

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

db_home: windows

Cygwin 1.7.33以前

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

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

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

  1. コントロールパネルシステムを開きます
  2. Advancedタブで、Environment Variables(下部に向かって)をクリックします
  3. [ユーザー変数]領域で[新規…]をクリックします
  4. 変数名にHOMEと入力します
  5. 変数値に%USERPROFILE%と入力します
  6. 開いているすべてのダイアログボックスで[OK]をクリックして、この新しい設定を適用します。

次に、作成したばかりの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を指していることがわかります。

2
Christopher
cd /home
rm -rf chris
ln -s /cygdrive/z chris

それが最も安全な解決策であるかどうかは確かではありませんが、それは私のために働く可能性のある解決策です;)

1
kitingChris

/ etc/passwdファイルを直接編集し(他に何もアクセスしていないことを確認して)、/ homeへのすべての参照を/ Usersに変更しました(Windows 7)。すべてが正しく機能するためには、/ homeディレクトリ内のディレクトリを削除する(または適切な他の場所に移動する)必要があることがわかりました。それ以外の場合、cygwinは、たとえば 'bash -l'が/ home/Pabloで始まるが、$ HOMEが/ Users/Pabloであり、emacsがその逆を行うように見える、分割されたパーソナリティを開発します。/home/Pabloを削除すると、すべて正常に機能しました。

0
Pablo Halpern

Cygwinを起動するときは、C:\Users\usernameにいる必要がありました。そこで、.bashrc.profileに追加しました

cd ${HOMEPATH}

~/.の代わりに$HOMEPATHを使用する場合は、次を追加することもできます。

export HOME=${HOMEPATH}

このようにして、cygwinのインストールを邪魔しません。

0
user123456789