Sử dụng Cygwin trong Windows 8, chmod 600 không hoạt động như mong đợi?


75

Tôi đang cố gắng thay đổi quyền cho tệp chính của mình key.pemtrong Cygwin 1.7.11. Nó có các cờ quyền:-rw-rw----

chmod -c 600 key.pem

Báo cáo:

chế độ của 'key.pem' đã thay đổi từ 0660 (rw-rw ----) thành 0600 (rw -------)

Tuy nhiên:

ls -l key.pem 

vẫn báo cáo

Các cờ cho phép của key.pem vẫn còn: -rw-rw ----

Lý do này tại sao tôi hỏi là ssh đang phàn nàn:

Quyền 0660 cho 'key.pem' quá mở.

khi tôi cố gắng ssh vào ví dụ Amazon EC2 của tôi. Đây có phải là sự cố với Cygwin & Windows 8 NTFS hay tôi đang thiếu thứ gì đó?


Điều này nghe có vẻ như một lỗi Win8 / Cygwin. Tôi khuyên bạn nên báo cáo nó trong danh sách gửi thư của Cygwin .
me_and

Nó có thể liên quan đến NTFS ... Windows không thực sự sử dụng sơ đồ Linux đó. Có lẽ bạn có thể thử vào cài đặt quyền của windows và chỉ cung cấp cho mình quyền ...
sinni800

Tôi nghĩ rằng điều này có liên quan đến superuser.com/questions/363141/ Khăn
Daniel Stiner

Câu trả lời:


97

Tôi đang sử dụng Cygwin trong Win8CP và tôi cũng gặp vấn đề tương tự. Đó chắc chắn là một lỗi Cygwin, nhưng có một cách giải quyết: hãy thử chạy:

 chgrp -R Users ~/.ssh

Giải thích dài hơn là, vì một số lý do, Cygwin /etc/passwd/etc/groupthế hệ đang đặt nhóm mặc định / nhóm chính của người dùng làm None. Và bạn không thể thay đổi sự cho phép của None, vì vậy chmodnhóm for không có hiệu lực.

Tôi đã không thử tự sửa chữa các tệp passwd/ groupnhưng tôi đã thực hiện chgrp -R Users ~/.ssh(hoặc, nếu bạn đang ở trên bản phát hành trước Windows 8, với tên nhóm HomeUsers). Sau đó, bạn có thể làm chmod 0600và nó sẽ hoạt động như mong đợi.

Các chgrpvào Usersnhóm có thể được thực hiện trong bất cứ trường hợp tương tự khác bạn tìm thấy. Nó thậm chí hoạt động như mong đợi vì Cygwin đưa người dùng vào Usersnhóm làm nhóm phụ (thay vì chính , đó sẽ là hành vi chính xác).


12
Tôi cần chgrp -Rv Người dùng ~ / .ssh / * chmod -vR 600 ~ / .ssh / *
Tomáš Fejfar

@ TomášFejfar bình luận ở trên làm việc cho tôi. Cảm ơn.
Scaraveos

@ TomášFejfar rất hữu ích, có lẽ nó nên tìm cách cài đặt các tập lệnh hoặc một cái gì đó
bảnh bao

4
Lưu ý nếu bạn đã cài đặt Windows bằng ngôn ngữ khác Userssẽ không hoạt động. Sử dụng cat /etc/groupđể kiểm tra với những gì bạn nên thay thế Users. Trong tiếng Hà Lan chẳng hạn, bạn sẽ phải thay thế Usersbằng Gebruikers.
thijsai

3
Nó không hoạt động nữa. Giải pháp mới là của @ luke-lee.
fjardon

26

Bắt đầu từ Cygwin 1.7.34 (2015-02-04) phương thức thay đổi nhóm thành Userskhông còn hoạt động. Thay vào đó, bạn cần sử dụng setfacltiện ích của Cygwin .

  • Nói, nếu bạn muốn đặt chế độ tập tin để 644 (rw-r--r--)làm điều này:

    setfacl -s u::rw-,g::r--,o:r-- foo.bar
    
  • hoặc sử dụng định dạng dài hơn:

    setfacl -s user::rw-,group::r--,other::r-- foo.bar
    
  • hoặc sao chép chế độ của nó bằng cách sử dụng getfacltừ tệp foosang bar:

    getfacl foo | setfacl -f - bar
    

Một hướng dẫn hoàn chỉnh nằm trong phần "setfacl" trong hướng dẫn sử dụng Cygwin . Tôi tự hỏi tại sao Cygwin vẫn chưa thay đổi chmodtiện ích tương tự.


1
các giải pháp thay đổi nhóm thành Người dùng không hiệu quả với tôi mà chỉ dựa trên setfacl!
mờ

2
Luke, tôi nghĩ rằng bạn đã bỏ lỡ một dấu hai chấm trong khối mã đầu tiên của bạn sau 'o'.
SeldomNeedy

@SeldomNeedy Argh! Bạn nói đúng, sửa cho phù hợp. Cảm ơn!
Luke Lee

1
@SeldomNeedy Sau một số kiểm tra nữa tôi thấy cả hai cú pháp đều hoạt động, nhưng cú pháp ban đầu (có một dấu hai chấm) thì chính xác hơn. Dấu hai chấm cho 'u' và 'g' là để chỉ định UID và GID. Đối với 'o' không có chỉ định như vậy nên chỉ cần một dấu hai chấm.
Luke Lee

10

Đây là một kịch bản sử dụng đề xuất của Luke Lee nhưng hỗ trợ các đối số bát phân như chmod. Nó cung cấp một khung có thể được mở rộng. mặc dù hiện tại nó chỉ hỗ trợ các đối số bát phân cần thiết để sửa quyền trên thư mục và tệp key.pem và / hoặc ~ / .ssh.

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

Tôi đã sử dụng nó như thế này để sửa các thư mục và tập tin .ssh của tôi:

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

Chỉ cần bị tấn công bởi cái này trong một bản cập nhật cygwin. Cảm ơn kịch bản. setfacltự nó là khủng khiếp.
Andy Brown

Tôi để kịch bản ở đâu?
Sisir

kịch bản có thể đi bất cứ nơi nào trong con đường cygwin của bạn. Bạn có thể tạo một thư mục $ HOME / bin và đặt nó ở đó, mặc dù sau đó bạn sẽ cần thêm nó vào đường dẫn của mình, ví dụ: trong $ HOME / .bashrc.
philwalk

4
chgrp -R Users ~/.ssh

chmod 0600 ~/.ssh/config

chmod 0700 ~/.ssh

Đây là các bước chính xác tôi cần, +1.
camomileCase

1

Nếu bạn đã cài đặt git bash, hãy chạy cùng một lệnh ( chmod -c 600 key.pem) với git bash và tránh Cygwin .


1

Vấn đề này có thể được giải quyết bằng cách chạy lệnh ssh-keygen từ thiết bị đầu cuối cygwin. (Không phải dấu nhắc lệnh windows thông thường). Tôi đã làm điều này trong máy windows8 của tôi.


4
Bạn có thể vui lòng giải thích thêm? Làm thế nào điều này có thể khắc phục vấn đề? Những bước nào người dùng nên thực hiện ngoài "chạy ssh-keygen từ Cygwin"?
DanteTheEgregore

Điều này chỉ tạo ra một khóa, nhưng OP có một khóa có quyền xấu
Jonathan

Trải nghiệm tương tự ở đây: chmod / ssh-keygen đặt sự cho phép tốt theo cygwin, nhưng sẽ không làm điều đó nếu tôi thực thi chúng từ các cửa sổ cmd. (Tôi không biết tại sao mặc dù :-))
autra 22/03/18

-2

Chạy trình cài đặt và cập nhật Cygwin. Các lỗi nên được sửa chữa.


3
Bài viết của bạn cần được mở rộng. Một câu trả lời tốt bao gồm các hướng dẫn cụ thể (không chỉ liên kết với chúng) và giải thích về cách thức hoặc lý do câu trả lời giải quyết câu hỏi của OP. Vui lòng chỉnh sửa bài viết của bạn để giải quyết thỏa đáng cả hai yếu tố này.
Kẻ giả mạo Twisty
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.