Windows 8'de Cygwin'i kullanarak chmod 600 beklendiği gibi çalışmıyor mu?


75

Benim anahtar dosyasına izinleri değiştirmeye çalışıyorum key.pemiçinde Cygwin 1.7.11. İzin bayrakları var:-rw-rw----

chmod -c 600 key.pem

Raporlar:

'key.pem' modu 0660 (rw-rw ----) ila 0600 (rw -------) arasında değişmiştir.

Ancak:

ls -l key.pem 

hala raporlar

key.pem izin bayrakları hala: -rw-rw ----

Sormamın nedeni, ssh'nin şikayetçi olması:

'Key.pem' için izinler 0660 çok açık.

Amazon EC2 örneğime girmeye çalıştığımda. Bu Cygwin ve Windows 8 NTFS ile bir sorun mu yoksa bir şey mi eksik?


Bu bir Win8 / Cygwin böceği gibi geliyor. Cygwin posta listesinde bildirmenizi tavsiye ederim .
me_ve

NTFS ile ilişkili olabilir ... Windows bu Linux programını gerçekten kullanmıyor. Belki de pencerelerin izin ayarlarına girmeyi deneyebilir ve sadece kendinize haklar verebilirsiniz ...
sinni800

Yanıtlar:


97

Win8CP'de Cygwin kullanıyorum ve aynı sorunu yaşadım. Kesinlikle bir Cygwin hatası, ancak bir geçici çözüm var: koşmayı deneyin:

 chgrp -R Users ~/.ssh

Uzun açıklama, bir nedenden ötürü, Cygwin'in /etc/passwdve /etc/groupneslinin kullanıcının varsayılan / ana grubunu olduğu gibi koymasıdır None. Ve iznini değiştiremezsiniz None, bu yüzden chmodfor grubunun hiçbir etkisi olmaz.

passwd/ groupDosyaları kendim tamir etmeyi denemedim , ama bir şey yaptım chgrp -R Users ~/.ssh(ya da eğer Windows 8 öncesi sürümdeyseniz, grup adı ile HomeUsers). Bundan sonra, yapabilirsiniz chmod 0600ve beklendiği gibi çalışacaktır.

chgrpİçin Usersgrubun bulmak benzer diğer hangisi olgu yapılabilir. Cygwin, kullanıcıları Usersgrup içinde ikincil bir grup olarak kullandığından ( birincil değil , doğru davranış olacaktır) beklendiği gibi çalışır .


12
Chgrp -Rv Kullanıcıları ~ / .ssh / * chmod -vR 600 ~ / .ssh / * 'a ihtiyacım vardı
Tomáš Fejfar

@ TomášFejfar yukarıdaki yorum benim için çalıştı. Teşekkürler.
scaraveos

@ TomášFejfar çok yardımcı oldu, belki senaryo veya başka bir şey
kurmanın yolunu bulmalı

4
Windows başka bir dilde yüklediyseniz Usersişe yaramayacağını unutmayın. cat /etc/groupNeyi değiştirmeniz gerektiğini kontrol etmek için kullanın Users. Hollandaca örneğin değiştirmek zorunda kalacak Usersolan Gebruikers.
thijsai

3
Artık çalışmıyor. Yeni çözüm @ luke-lee'ninki.
fjardon

26

Cygwin 1.7.34'ten (2015-02-04) başlayarak grubu Usersartık işe yaramaz hale getiren yöntem . Bunun yerine Cygwin'in setfaclyardımcı programını kullanmanız gerekir .

  • Diyelim ki, bunu yapmak için dosya modunu ayarlamak istiyorsanız 644 (rw-r--r--):

    setfacl -s u::rw-,g::r--,o:r-- foo.bar
    
  • veya daha uzun bir format kullanın:

    setfacl -s user::rw-,group::r--,other::r-- foo.bar
    
  • ya kullanarak kopya modu getfacldosyadan fooiçin bar:

    getfacl foo | setfacl -f - bar
    

Tam bir kullanım kılavuzu Cygwin kullanım kılavuzunun "setfacl" bölümündedir . Neden Cygwin'in de chmodaynı şekilde faydaları değiştirmediğini merak ediyorum .


1
Kullanıcılar olarak grup değişikliği olan çözümler benim için işe yaramadı ama sadece setfacl tabanlı!
loş

2
Luke, sanırım 'o' dan sonraki ilk kod bloğunda bir kolonu kaçırdın.
SeldomNeedy

@SeldomNeedy Argh! Haklısın, buna göre düzeltildi. Teşekkürler!
Luke Lee

1
@SeldomNeedy Bazı daha fazla kontrolden sonra her iki sözdiziminin de işe yaradığını buldum, ancak orijinal olanı (bir kolonlu) daha doğru. 'U' ve 'g' için ikinci sütun, UID ve GID'yi belirtmek içindir. 'O' için böyle bir belirleyici yoktur, bu yüzden sadece bir kolona ihtiyaç duyulur.
Luke Lee

10

İşte Luke Lee'nin önerisini kullanan, ancak chmod gibi sekizinci alanı destekleyen bir senaryo. Genişletilebilecek bir çerçeve sağlar. şu anda yalnızca key.pem ve / veya ~ / .ssh dizinindeki ve dosyalarındaki izinleri düzeltmek için gereken sekizli alanı desteklemektedir.

#!/bin/bash

# convert chmod octal permission args to equivalent setfacl args
ARGS=() ; FILES=()
while [ $# -gt 0 ]; do
  A=$1 ; shift
  case "$A" in
  600|0600) ARGS+=("u::rw-,g::---,o::---") ;;
  640|0640) ARGS+=("u::rw-,g::r--,o::---") ;;
  644|0644) ARGS+=("u::rw-,g::r--,o::r--") ;;
  700|0700) ARGS+=("u::rwx,g::---,o::---") ;;
  *) if [ -e "$A" ]; then FILES+=( "$A" ) ; else
    echo "unrecognized arg [$A]" 1>&2
    exit 1
  fi
  ;;
  esac
done
for F in "${FILES[@]}" ; do
  setfacl -s "${ARGS[@]}" "$F"
done

.Ssh dizini ve dosyalarımı düzeltmek için böyle kullandım:

chmodfacl 700 ~/.ssh
chmodfacl 600 ~/.ssh/*
chmodfacl 640 ~/.ssh/*.pub

Sadece bir cygwin güncellemesinde bu çarptı. Senaryo için teşekkürler. setfaclkendi başına korkunç.
Andy Brown

Senaryoyu nereye koyacağım?
Sisir,

komut dosyası cygwin yolunuzda herhangi bir yere gidebilir. Bir $ HOME / bin dizini oluşturabilir ve oraya koyabilirsiniz, ancak sonra onu yolunuza eklemeniz gerekebilir, örneğin, $ HOME / .bashrc.
philwalk


1

Eğer varsa git bash aynı komutu (çalıştırmak yüklü chmod -c 600 key.pemgit bash ile) ve önlemek Cygwin .


1

Bu sorun, cygwin terminalinden ssh-keygen komutunu çalıştırarak çözülebilir. (Normal Windows Komut istemi değil). Bunu windows8 makinemde yaptım.


4
Lütfen daha fazla detay verebilir misiniz? Bu sorunu nasıl çözebilir? Kullanıcı "ssh-keygen'i Cygwin'den çalıştır" dıĢında hangi adımları atmalıdır?
DanteTheEgregore

Bu sadece bir anahtar oluşturur, ancak OP'nin kötü izinleri olan bir anahtarı vardır
Jonathan,

Burada aynı deneyim: chmod / ssh-keygen, cygwin altında iyi izinler verir, ancak bunları windows cmd'den yürütürsem yapmaz. (Neden olsa bilmiyorum :-))
autra

-2

Cygwin yükleyicisini çalıştırın ve güncelleyin. Hata düzeltilmelidir.


3
Gönderinizin genişletilmesi gerekiyor. İyi bir cevap belirli talimatlar (sadece bunlara bağlantılar değil) ve cevabın OP sorusunu nasıl veya niçin ele aldığına dair bir açıklama içerir. Lütfen bu öğelerin her ikisine de uygun şekilde hitap edebilmek için gönderinizi düzenleyin.
Twisty Impersonator
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.