Menggunakan Cygwin di Windows 8, chmod 600 tidak berfungsi seperti yang diharapkan?


75

Saya mencoba untuk mengubah izin ke file kunci saya key.pemdi Cygwin 1.7.11. Itu memiliki bendera izin:-rw-rw----

chmod -c 600 key.pem

Laporan:

mode 'key.pem' berubah dari 0660 (rw-rw ----) menjadi 0600 (rw -------)

Namun:

ls -l key.pem 

masih melaporkan

Bendera izin key.pem masih: -rw-rw ----

Alasan mengapa saya bertanya adalah ssh mengeluh:

Izin 0660 untuk 'key.pem' terlalu terbuka.

ketika saya mencoba ssh ke instance Amazon EC2 saya. Apakah ini masalah dengan Cygwin & Windows 8 NTFS atau saya kehilangan sesuatu?


Ini terdengar seperti bug Win8 / Cygwin. Saya akan merekomendasikan melaporkannya di milis Cygwin .
me_and

Mungkin terkait dengan NTFS ... Windows tidak benar-benar menggunakan skema Linux itu. Mungkin Anda dapat mencoba masuk ke pengaturan izin windows dan hanya memberi diri Anda hak ...
sinni800

Saya pikir ini terkait dengan superuser.com/questions/363141/…
Daniel Stiner

Jawaban:


97

Saya menggunakan Cygwin di Win8CP, dan saya memiliki masalah yang sama. Ini jelas merupakan bug Cygwin, tetapi ada solusinya: coba jalankan:

 chgrp -R Users ~/.ssh

Penjelasan yang lebih panjang adalah bahwa, untuk beberapa alasan, Cygwin /etc/passwddan /etc/groupgenerasi menempatkan default / kelompok utama pengguna sebagai None. Dan Anda tidak dapat mengubah izin None, sehingga chmodgrup untuk tidak berpengaruh.

Saya tidak mencoba memperbaiki passwd/ groupfile sendiri, tetapi saya memang melakukan chgrp -R Users ~/.ssh(atau, jika Anda menggunakan pra-rilis Windows 8, dengan nama grup HomeUsers). Setelah itu, Anda dapat melakukan chmod 0600dan itu akan berfungsi seperti yang diharapkan.

The chgrpke Userskelompok dapat dilakukan di mana kasus-kasus serupa lain yang Anda temukan. Ini bahkan berfungsi seperti yang diharapkan karena Cygwin menempatkan pengguna dalam Usersgrup sebagai grup sekunder (bukan primer , yang akan menjadi perilaku yang benar).


12
Saya membutuhkan chgrp -Rv Users ~ / .ssh / * chmod -vR 600 ~ / .ssh / *
Tomáš Fejfar

@ TomášFejfar komentar di atas bekerja untuk saya. Terima kasih.
scaraveos

@ TomášFejfar yang sangat membantu, mungkin harus menemukan jalannya untuk menginstal skrip atau sesuatu
dashesy

4
Catatan jika Anda menginstal Windows dalam bahasa lain Userstidak akan berfungsi. Gunakan cat /etc/groupuntuk memeriksa apa yang harus Anda ganti Users. Dalam bahasa Belanda misalnya Anda harus menggantinya Usersdengan Gebruikers.
thijsai

3
Itu tidak berfungsi lagi. Solusi baru adalah solusi @ luke-lee.
fjardon

26

Mulai dari Cygwin 1.7.34 (2015-02-04) metode yang mengubah grup untuk Userstidak lagi berfungsi. Sebaliknya, Anda perlu menggunakan setfaclutilitas Cygwin .

  • Katakan, jika Anda ingin mengatur mode file untuk 644 (rw-r--r--)melakukan ini:

    setfacl -s u::rw-,g::r--,o:r-- foo.bar
    
  • atau gunakan format yang lebih panjang:

    setfacl -s user::rw-,group::r--,other::r-- foo.bar
    
  • atau salin modenya menggunakan getfacldari file fooke bar:

    getfacl foo | setfacl -f - bar
    

Manual lengkap ada di bagian "setfacl" pada panduan pengguna Cygwin . Saya bertanya-tanya mengapa Cygwin belum mengubah chmodutilitas juga.


1
solusi dengan perubahan grup menjadi Pengguna tidak berfungsi untuk saya tetapi hanya yang berbasis setfacl!
redup

2
Luke, saya pikir Anda melewatkan titik dua di blok kode pertama setelah 'o'.
SeldomNeedy

@SeldomNeedy Argh! Anda benar, diperbaiki sesuai. Terima kasih!
Luke Lee

1
@ SeldomNeedy Setelah beberapa pemeriksaan lagi saya menemukan kedua sintaks bekerja, tetapi yang asli (dengan satu titik dua) lebih akurat. Kolon ke-2 untuk 'u' dan 'g' adalah untuk menentukan UID dan GID. Untuk 'o' tidak ada specifier seperti itu sehingga hanya satu titik dua diperlukan.
Luke Lee

10

Berikut ini adalah skrip yang menggunakan saran Luke Lee tetapi mendukung argumen oktaf seperti chmod. Ini memberikan kerangka kerja yang dapat diperpanjang. walaupun saat ini hanya mendukung argumen oktal yang diperlukan untuk memperbaiki izin pada key.pem dan / atau ~ / .ssh direktori dan file.

#!/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

Saya menggunakannya seperti ini untuk memperbaiki direktori dan file .ssh saya:

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

Baru saja mendapatkan yang ini dalam pembaruan cygwin. Terima kasih untuk skripnya. setfaclsendiri mengerikan.
Andy Brown

Di mana saya meletakkan skrip?
Sisir

skrip dapat pergi ke mana saja di jalur cygwin Anda. Anda dapat membuat direktori $ HOME / bin dan meletakkannya di sana, meskipun kemudian Anda harus menambahkannya ke jalur Anda, misalnya, dalam $ HOME / .bashrc.
philwalk

4
chgrp -R Users ~/.ssh

chmod 0600 ~/.ssh/config

chmod 0700 ~/.ssh

Ini adalah langkah-langkah tepat yang saya butuhkan, +1.
camomileCase

1

Jika Anda menginstal git bash, jalankan perintah yang sama ( chmod -c 600 key.pem) dengan git bash dan hindari Cygwin .


1

Masalah ini dapat diatasi dengan menjalankan perintah ssh-keygen dari terminal cygwin. (Bukan jendela normal Command prompt). Saya telah melakukan ini di mesin windows8 saya.


4
Bisakah Anda menjelaskan lebih lanjut? Bagaimana ini bisa memperbaiki masalah? Langkah apa yang harus diambil pengguna selain "jalankan ssh-keygen dari Cygwin"?
DanteTheEgregore

Ini hanya menghasilkan kunci, tetapi OP memiliki kunci dengan izin buruk
Jonathan

Pengalaman yang sama di sini: chmod / ssh-keygen menempatkan izin yang baik di bawah cygwin, tetapi tidak melakukannya jika saya mengeksekusi mereka dari windows cmd. (Saya tidak tahu mengapa :-))
autra

-2

Jalankan penginstal Cygwin dan perbarui. Bug harus diperbaiki.


3
Pos Anda perlu diperluas. Sebuah jawaban yang baik mencakup instruksi spesifik (bukan hanya tautan ke mereka) dan penjelasan tentang bagaimana atau mengapa jawaban tersebut menjawab pertanyaan OP. Harap edit posting Anda untuk mengatasi kedua elemen ini secara memadai.
Peniru Twisty
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.