Ana dizini güvenle değiştirin


82

/etc/passwdİçinde belirtildiği gibi ana dizini güvenli bir şekilde güncellemeye çalışıyorum , ancak bunu yapmak için standart Linux araçları - usermod ve vipw - Cygwin tarafından sağlanmıyor.

Biri bana bunu Cygwin'de nasıl değiştirdiklerini söyleyebilir mi?


4
Stackoverflow.com/q/1494658/923560 adresindeki yinelenen soru 1.7.34 ile başlayan son Cygwin sürümleri için cevaplar sağlar.
Abdull

Yanıtlar:


96

DÜZENLEME: Cygwin'in son sürümleri (1.7.34 ve sonrası) için bu yeni soruya bakın .

Sblundy'nin cevabı gibi, her zaman elle düzenleme yapabilirsiniz.

Ancak bunu "resmi" yolla yapmak istiyorsanız, cygwin'e özgü mkpasswdkomutu kullanın. Aşağıda resmi belgelerden bir pasaj var mkpasswd:

Örneğin, bu komut:

Örnek 3.11. Alternatif bir ev kökü kullanma

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

yerel kullanıcıların ev dizinlerini Windows 'Profiller' dizinine koyar.

Cygwin Utilities dokümantasyon sayfasında (dahil mkpasswd) açıklanan bir dizi başka gerçekten yararlı komut var . cygpathYukarıdaki örnekte kullanımı, cygwin'e özgü bu araçlardan bir diğeridir.

Hazır oradayken, muhtemelen Cygwin'i Windows ile Etkili Kullanmak belgelerini de okumak istersiniz . Bir sürü gerçekten iyi tavsiye var.


10
Bir etki alanındaysanız, şu alternatif komutu düşünebilirsiniz: ( -detki alanı için) $ mkpasswd -l -d -p "$(cygpath -H)" > /etc/passwd Bu benim için işe yaramadı - temelde asılı kaldı. Bu makineyi kullanan tek kişi ben olduğum için, bir etki alanında olsanız da olmasanız da güvenli olması gereken bu alternatifi kullanabilirim ( -c"mevcut kullanıcı içindir) $ mkpasswd -l -c -p "$(cygpath -H)" > /etc/passwd
Ryan Pavlik

1
Bunu yaptıktan sonra .bashrc, yenisine kopyalasam bile okunamıyor gibi görünüyor $HOME. Bunu nasıl düzelteceğine dair bir fikrin var mı?
Jeff

1
Çıktı edilmelidir eklenmiş (birkaç kullanıcılarla kurumsal senaryolar için) (>>) için / etc / passwd. Bu işe yaradı! :)
Andre

1
hangi cygwin sürümünü kullandığınızı görmek için uname -r kullanın
martin jakubik

19

Tüm cygwin kabuklarımdan çıktım ve bir metin düzenleyicide elle düzenledim. Çok uzak çok iyi.

Not: "Belgeler ve Ayarlar" dizinindeki boşluklardan kaçmayın. Giriş gibi görünecek

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

Çizgi, :karakter üzerinde belirtilir .


Bu UNC yolları için de işe yarıyor, teşekkürler daha önce HOME değişkeni ile geçersiz
kılındı

El ile neyi düzenlemem gerekiyor? Cygwin ana dizinimin neden /cygdrive/c/Users/JoseAngel/AppData/Roaming/SPB_16.6 olduğunu bilmiyorum C: / Users / MyName /

16

Bulduğum en basit cevap, / home'u Windows Home / UserProfile dizininize yumuşak bir bağlantı yapmaktır.

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

Windows'un mevcut sürümünde HOME dizini için doğru konumu alacağından cygpath'i kullandım. Kutumda cygpath -Hiadeler/cygdrive/c/Users


Bunu bir süre yaptıktan sonra bir dezavantaj var: cygwin'i setup.exe kullanarak her güncellediğimde çalıştırmam gerekiyor. Çok önemli değil ama hatırlanması gereken bir şey.
M Smith

Bu en iyi cevap. Cygwin'in neden varsayılan olarak cygwin -Hvarsayılan olmadığını merak ediyorum . En mantıklı yer burası ve Windows 7'den beri yolunda da yer yok.
çizgi

başka bir kayda göre, bu işe yaramayacak. Birden sembolik bağı görmezden gelmeye karar verdi!
çizgi

Kurulumu tekrar çalıştırdığınızda yeniden uygulamanız gerekir. Benim için başarısız olduğu tek zaman budur. Henüz Windows 10'da denemedim
M Smith

Windows 10'da beklendiği gibi çalışıyor. Cygwin'i her güncellediğimde yine de yeniden başvurmam gerekiyor.
M Smith

8

Mevcut kullanıcı için aşağıdakiler benim için çalıştı:

  1. Cygwin'i kapatın.
  2. HOME Windows kullanıcı ortamı değişkenini ayarlayın.
  3. Cygwin'i başlatın.
  4. "mkpasswd -c -p" $ (cygpath -H) "> / etc / passwd" komutunu çalıştırın.
  5. Cygwin'i yeniden başlatın.

Herhangi bir argüman olmadan ssh-keygen çalıştırarak çalıştığını doğruladım. Bu değişikliği yaptıktan sonra, uygulama artık anahtarı / home / user yerine / cygdrive / c / Users / user'a kaydetmeye varsayılan olarak ayarlanıyor.

HOME ayarının gerekli olup olmadığını bilmiyorum, ancak yine de TortoiseGit'i burada resmi olmayan Cygwin desteği için Tortoise'ın resmi belgelerini kullanarak Cygwin ile kurma talimatına göre yaptım . Ancak HOME'u tek başına ayarlamak ssh-keygen'in ana dizin değişikliğini tanıması için yeterli değildi.

Ayrıca, Cygwin'in bu konudaki resmi belgelerinin burada bulunabileceğini unutmayın .

64-bit Cygwin v1.7.35 kullanılarak Windows 7'de onaylanmıştır.


Cygwin 1.7.35+ için mkpasswd'nin kullanımı /etc/nsswitch.conf lehine tavsiye edilmez
Christopher

4

HOME'u her zaman Computer Properties'de kullanıcıya özgü ortam değişkeni olarak ayarladım.


Kurumsal bir ağ sürücüsüne ayarlandığı için bundan kaçınmaya çalışıyorum. Yine de işe yarayacak gibi görünüyor.
sblundy

6
Bunun ssh için çalışmayacağını unutmayın, HOME'u açıkça yok sayar ve her zaman / etc / passwd kullanır. Cygwin.com/faq/faq-nochunks.html#faq.setup.home'un son cümlesine bakın .
studgeek

3

Ana dizininizin yolunda boşluk olmasından kaynaklanan sorunları önlemek için Windows 'Profiller' dizininin kısa biçimini kullanın - örn /cygdrive/c/DOCUME~1/user.

Bunu şu komutu yazarak yapabilirsiniz:

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

3

Orijinal cevap tarafından Christopher dan başka bir yerde

Cygwin 1.7.34+

Cygwin 1.7.34 veya üstünü kullananlar için Cygwin , ana dizin, oturum açma kabuğu ve gecos bilgilerinin /etc/nsswitch.conf. Bu, Cygwin Kullanıcı Kılavuzu bölümünde ayrıntılı olarak açıklanmıştır:

Daha önce bir /etc/passwdveya /etc/groupdosya oluşturduysanız, bunları kaldırmak ve Cygwin'i yeni Windows Güvenlik modelini kullanarak POSIX eşlemelerine yapılandırmak isteyeceksiniz.

[[ -f /etc/passwd ]] && mv /etc/passwd /etc/passwd.bak
[[ -f /etc/group ]] && mv /etc/group /etc/group.bak

/etc/nsswitch.confDosyasını klasöre db_home:Cygwin kullanıcının ev dizinini getirir nasıl tanımlarınızı ayarı. İçin varsayılan ayar db_home:DİR

db_home: /home/%U

Dolayısıyla, Cygwin varsayılan olarak sadece ana dizini olarak ayarlar /home/$USERNAME. İstediğiniz başka herhangi bir özel yolu işaret etmek için bunu değiştirebilirsiniz. Desteklenen joker karakterler şunlardır:

  • %u Cygwin kullanıcı adı (küçük u harfidir).
  • %U Windows kullanıcı adı (büyük U harfidir).
  • %D NetBIOS tarzında Windows etki alanı.
  • %HPOSIX stilinde Windows ana dizini. db_home:Ayar için bunun yalnızca öndeki eğik çizgiden hemen sonra mantıklı olduğunu unutmayın .db_home: /%H/cygwin
  • %_Şemayı ayırmak için boşluk ve SEKME karakterleri kullanıldığından, dosya adında bir boşluk %_(bu bir alt çizgidir) olarak verilmelidir .
  • %% Yüzde bir karakter.

Bir yol yerine, önceden tanımlanmış dört adlandırılmış yol şemasından birini belirtebilirsiniz.

  1. windowsKullanıcının ev dizini, Windows ev dizini olarak kullanılan aynı dizine ayarlanır, tipik olarak %USERPROFILE%veya satırları boyunca bir şey C:\Users\$USERNAME. Elbette, Windows dizini Cygwin tarafından POSIX stiline dönüştürülür.

  2. cygwinYalnızca AD: Kullanıcının ev dizini, cygwinUser yardımcı sınıfından cygwinHome özniteliğinde verilen POSIX yoluna ayarlanır. "Cygwin şeması" adlı bölüme de bakın .

  3. unixYalnızca AD: Kullanıcının ev dizini, posixAccount yardımcı sınıfından unixHomeDirectory özniteliğinde verilen POSIX yoluna ayarlanır. Ayrıca "Unix şeması" adlı bölüme bakın .

  4. descKullanıcının ev dizini, SAM veya AD'deki kullanıcının açıklama özniteliğinde home = "..." XML benzeri ayarında verilen POSIX yoluna ayarlanır. Ayrıntılı açıklama için "Açıklama şeması" adlı bölüme bakın.

Aşağıdakiler, kullanıcının Cygwin'deki ev dizinini Windows ana dizini için kullanılanla aynı hale getirecektir.

db_home: windows

Cygwin 1.7.33 veya öncesi

Cygwin 1.7.33 veya önceki bir sürümü kullananlar için , Cygwin'in en son sürümüne güncelleyin ve daha önce kullanılan /etc/passwdve/etc/group dosyaları dosyaları , ardından yukarıdaki adımlara bakın.

Aksi takdirde, aşağıdaki eski adımları izleyin.

İlk olarak, HOME için kullanıcı profilinize işaret eden bir Windows ortam değişkeni ayarlayın:

  1. Açık Sistem üzerinde Kontrol Paneli
  2. Açık Gelişmiş sekmesine tıklayın Ortam değişkenleri (altta doğru)
  3. Kullanıcı Değişkenleri alanında "Yeni…" öğesini tıklayın.
  4. Değişken adı için girin HOME
  5. Değişken değer için girin %USERPROFILE%
  6. Bu yeni ayarı uygulamak için tüm açık iletişim kutularında Tamam'ı tıklayın.

Şimdi Cygwin /etc/passwddosyasını %HOME%az önce oluşturduğumuz Windows değişkeni ile güncelleyeceğiz . Kabuk oturum açma ve uzaktan oturum açma, onlara kullanıcının yolunun konumunu söylemeye sshgüvenecektir ./etc/passwd$HOME

Cygwin bash komut isteminde aşağıdakileri yazın:

cp /etc/passwd /etc/passwd.bak
mkpasswd -l -p $(cygpath -H)  > /etc/passwd 
mkpasswd -d -p $(cygpath -H)  >> /etc/passwd 

-dAnahtar ise, ALAN kullanıcılarını kapsayacak şekilde mkpasswd anlatıyor-l sadece çıkış YEREL makine kullanıcıları etmektir. Kullanıcı bilgilerinin bir Windows Etki Alanı Denetleyicisi'nden elde edildiği bir iş yerinde bir PC kullanıyorsanız bu önemlidir.

Artık aynı şeyi gruplar için de yapabilirsiniz, ancak bir Windows Etki Alanının parçası olan bir bilgisayar kullanmadığınız sürece bu gerekli değildir. Cygwin, Windows hesap veritabanlarından grup bilgilerini okur, ancak /etc/groupmakinenizin Etki Alanı Denetleyicisi ile bağlantısı sık sık kesilirse bir dosya ekleyebilirsiniz .

Cygwin bash isteminde aşağıdakileri yazın:

cp /etc/group /etc/group.bak
mkgroup -l > /etc/group 
mkgroup -d >> /etc/group 

Şimdi, Cygwin'den çıkın ve yeniden başlatın. HOME yolunuzun Windows Kullanıcı Profiliniz ile aynı konumu gösterdiğini bulmalısınız - örn./cygdrive/c/Users/username


Yollar, ana dizini "taşımak" yerine en son Cygwin ile önceden tanımlanmış şemayı takip ettiğinden, sembolik bağları (Windows yerel dahil) dizinden belirli dizinlere kullanmanızı öneririm HOME.
gavenkoa

2

Cygwin kurulumumu bir kalem sürücü ve başka bir bilgisayarla senkronize etmeyi seviyorum, bu yüzden ana dizini sabit kodlamaktan nefret ediyorum. Aşağıdaki cygwin.bat dosyasını kullanıyorum:

echo off
SETLOCAL
set SHELL=\\bin\\bash
set HOME=%~dp0..\..\doc\unix
bin\bash --login -i
ENDLOCAL

SETLOCAL ve ENDLOCAL SHELL ve HOME'un diğer programlar için mevcut env değişkenlerini engellemediğinden emin olun. HOME=%~dp0..\..\doc\unixHOME'u doc ​​/ unix alt dizininde iki dizin olacak şekilde ayarlar. Sonra .... \ doc \ unix.bashrc'ye dahil ediyorum PATH="/bin:/usr/local/bin:/usr/X11R6/bin:/usr/bin". Bash'ıstart /wait %CD%\bin\bash başlatmak için kullanmadım çünkü Console2 kullanıyorum , bu yüzden ek bir cmd penceresine ihtiyacım yok.


2

Windows Ortam Değişkenini Kullanma: HOME

Bu benim için kalıcı, taşınabilir olmayan, ağ dışı bir çözüm için işe yarıyor; yani, HOME Ortamı değişkenini Windows'ta kalıcı olarak ayarlamak.

Bunun her zaman / etc / passwd'ye başvuran ssh veya telnet oturumlarını etkilemediğini unutmayın .

ref: Cygwin'i Kurmak- HOME ortam değişkenim istediğim gibi değil.

CMD

İçin geçerli kullanıcı (ihtiyaçlar kez kullanıcı başına çalıştırmak için) ::

reg add HKCU\Environment /v HOME /t REG_EXPAND_SZ /d ^%USERPROFILE^%

İçin yeni kullanıcılar:

reg add HKU\.DEFAULT\Environment /v HOME /t REG_EXPAND_SZ /d ^%USERPROFILE^%

Not: Yüzde işaretlerinden önce ^ imleçler %

İTHALAT REG DOSYASI

Bu reg dosyasını ( mevcut kullanıcı) içe aktarın :

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

İçin yeni kullanıcılar:

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'te, altında:

İçin geçerli kullanıcı:

HKEY_CURRENT_USER\Environment

İçin yeni kullanıcılar:

HKU\.DEFAULT\Environment

Oluştur HOME'u yeni olarak Genişletilebilir Dize Değeri (* REG_EXPAND_SZ *) ve koymak % USERPROFILE%


Bu yanıt hangi bilgiye dayanıyorsa, artık güncel değil. Ref: bağlantı da bozuldu. Bunu evde denemem.
Christopher

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

Bunun en güvenli çözüm olup olmadığından emin değilim ama benim için işe yarayan olası bir çözüm;)


0

/ Etc / passwd dosyamı doğrudan düzenledim (başka hiçbir şeyin erişmediğinden emin olarak) ve / home için tüm referansları / Users (Windows 7'de) olarak değiştirdim. Her şeyin düzgün çalışması için / home dizinindeki tüm dizinleri silmem (veya bunları uygun başka bir yere taşımam) gerektiğini anladım. Aksi takdirde, cygwin bölünmüş bir kişilik geliştirirdi, örneğin, 'bash -l' / home / Pablo'da başlar, ancak $ HOME / Users / Pablo olur ve emacs tersini yapar gibi görünür. / Home / Pablo'yu sildikten sonra her şey yolunda gitti.


0

Sadece C:\Users\usernamecygwin'e başladığımda katılmam gerekiyordu. Bu yüzden, ekledim .bashrcve.profile

cd ${HOMEPATH}

~/.Bunun yerine kullanmayı tercih ederseniz $HOMEPATH, aşağıdakileri de ekleyebilirsiniz:

export HOME=${HOMEPATH}

Bu şekilde cygwin kurulumunu rahatsız etmiyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.