การใช้ Cygwin ใน Windows 8, chmod 600 ไม่ทำงานอย่างที่คาดไว้?


75

ฉันพยายามเปลี่ยนการอนุญาตเป็นไฟล์กุญแจของฉันkey.pemในCygwin 1.7.11 มันมีธงสิทธิ์:-rw-rw----

chmod -c 600 key.pem

รายงาน:

โหมดของ 'key.pem' เปลี่ยนจาก 0660 (rw-rw ----) เป็น 0600 (rw -------)

อย่างไรก็ตาม:

ls -l key.pem 

ยังคงรายงาน

ธงการอนุญาตของ key.pem ยังคงอยู่: -rw-rw ----

เหตุผลที่ฉันถามคือ ssh นั้นบ่น:

สิทธิ์ 0660 สำหรับ 'key.pem' นั้นเปิดเกินไป

เมื่อฉันพยายาม ssh ลงในอินสแตนซ์ Amazon EC2 ของฉัน นี่เป็นปัญหาของ Cygwin & Windows 8 NTFS หรือฉันขาดอะไรไป


ดูเหมือนว่าบั๊ก Win8 / Cygwin ผมอยากแนะนำให้รายงานบนCygwin รายชื่อผู้รับจดหมาย
me_and

มันอาจเกี่ยวข้องกับ NTFS ... Windows ไม่ได้ใช้ระบบ Linux นั้น บางทีคุณอาจลองเข้าไปที่การตั้งค่าการอนุญาต windows และให้สิทธิ์กับตัวคุณเท่านั้น ...
sinni800

ฉันคิดว่านี่เกี่ยวข้องกับsuperuser.com/questions/363141/…
Daniel Stiner

คำตอบ:


97

ฉันใช้ Cygwin ใน Win8CP และฉันก็มีปัญหาเดียวกัน เป็นข้อบกพร่องของ Cygwin แต่มีวิธีแก้ไข: ลองใช้:

 chgrp -R Users ~/.ssh

คำอธิบายอีกต่อไปก็คือว่าด้วยเหตุผลบางอย่าง Cygwin ของ/etc/passwdและ/etc/groupรุ่นที่จะวางค่าเริ่มต้น / Noneกลุ่มหลักของผู้ใช้เป็น และคุณไม่สามารถเปลี่ยนการอนุญาตของNoneได้ดังนั้นchmodสำหรับกลุ่มจะไม่มีผลกระทบ

ฉันไม่ได้ลองซ่อมไฟล์passwd/ ด้วยgroupตัวเอง แต่ฉันทำchgrp -R Users ~/.ssh(หรือถ้าคุณอยู่ใน Windows 8 pre-release ด้วยชื่อกลุ่มHomeUsers) หลังจากนั้นคุณสามารถทำได้chmod 0600และมันจะทำงานตามที่คาดไว้

chgrpกับUsersกลุ่มสามารถทำได้ในกรณีใด ๆ อื่น ๆ ที่คล้ายคุณพบ มันทำงานได้อย่างที่คาดไว้เนื่องจาก Cygwin ทำให้ผู้ใช้ในUsersกลุ่มเป็นกลุ่มรอง (แทนที่จะเป็นหลักซึ่งจะเป็นพฤติกรรมที่ถูกต้อง)


12
ฉันต้องการ chgrp -Rv Users ~ / .ssh / * chmod -vR 600 ~ / .ssh / *
Tomáš Fejfar

@ ความคิดเห็นTomášFejfarข้างต้นทำงานให้ฉัน ขอบคุณ
scaraveos

@ TomášFejfarที่เป็นประโยชน์มากบางทีมันอาจจะควรจะหาทางเข้าไปติดตั้งสคริปต์หรือสิ่ง
dashesy

4
หมายเหตุหากคุณติดตั้ง Windows ในภาษาอื่นUsersจะไม่สามารถใช้งานได้ ใช้ในการตรวจสอบกับสิ่งที่คุณควรเปลี่ยนcat /etc/group Usersในภาษาดัตช์เช่นคุณจะต้องเปลี่ยนด้วยUsers Gebruikers
thijsai

3
มันไม่ทำงานอีกต่อไป ทางออกใหม่คือ @ luke-lee
fjardon

26

เริ่มต้นจาก Cygwin 1.7.34 (2015-02-04) วิธีการที่เปลี่ยนกลุ่มให้Usersใช้งานไม่ได้อีกต่อไป คุณต้องใช้setfaclยูทิลิตี้ของ Cygwin แทน

  • พูดถ้าคุณต้องการตั้งค่าโหมดไฟล์ให้644 (rw-r--r--)ทำสิ่งนี้:

    setfacl -s u::rw-,g::r--,o:r-- foo.bar
    
  • หรือใช้รูปแบบที่ยาวกว่า:

    setfacl -s user::rw-,group::r--,other::r-- foo.bar
    
  • หรือคัดลอกโหมดโดยใช้getfaclจากไฟล์fooไปที่bar:

    getfacl foo | setfacl -f - bar
    

คู่มือที่สมบูรณ์อยู่ในส่วน "setfacl" ของคู่มือผู้ใช้ ฉันสงสัยว่าทำไม Cygwin ยังไม่ได้เปลี่ยนchmodยูทิลิตี้เช่นเดียวกัน


1
โซลูชันที่มีการเปลี่ยนกลุ่มเป็นผู้ใช้ไม่ได้ผลสำหรับฉัน แต่มีเพียง setfacl เท่านั้น
สลัว

2
ลุคฉันคิดว่าคุณพลาดโคลอนในบล็อกโค้ดแรกของคุณหลังจาก 'o'
SeldomNeedy

@SeldomNeedy Argh! คุณถูกต้องแก้ไขให้ถูกต้อง ขอบคุณ!
ลุคลี

1
@SeldomNeedy หลังจากตรวจสอบเพิ่มเติมฉันพบว่าทั้งไวยากรณ์ทำงานได้ แต่แบบดั้งเดิม (ที่มีเครื่องหมายโคลอนหนึ่งตัว) มีความแม่นยำมากกว่า เครื่องหมายโคลอนที่ 2 สำหรับ 'u' และ 'g' ใช้สำหรับระบุ UID และ GID สำหรับ 'o' ไม่มีตัวระบุดังกล่าวดังนั้นจึงจำเป็นต้องใช้โคลอนเดียวเท่านั้น
ลุคลี

10

นี่คือสคริปต์ที่ใช้การแนะนำของ Luke Lee แต่สนับสนุน args แปดด้านเช่น chmod มันจัดเตรียมเฟรมเวิร์กที่สามารถขยายได้ แม้ว่าในปัจจุบันจะรองรับเฉพาะฐานแปดที่จำเป็นในการแก้ไขการอนุญาตในไดเรกทอรี key.pem และ / หรือ ~ / .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

ฉันใช้แบบนี้เพื่อแก้ไขไดเรกทอรี. ssh และไฟล์ของฉัน:

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

เพิ่งได้รับการตีโดยหนึ่งในการปรับปรุง cygwin ขอบคุณสำหรับสคริปต์ setfaclด้วยตัวของมันเองที่น่ากลัว
Andy Brown

ฉันจะใส่สคริปต์ที่ไหน
Sisir

สคริปต์สามารถไปได้ทุกที่ในเส้นทาง cygwin ของคุณ คุณอาจสร้างไดเรกทอรี $ HOME / bin และวางไว้ที่นั่นแม้ว่าคุณจะต้องเพิ่มลงในพา ธ ของคุณเช่นใน $ HOME / .bashrc
philwalk


1

ถ้าคุณได้คอมไพล์ทุบตีติดตั้งการทำงานคำสั่งเดียวกัน ( chmod -c 600 key.pem) กับคอมไพล์และหลีกเลี่ยงการทุบตีCygwin


1

ปัญหานี้สามารถแก้ไขได้โดยการรันคำสั่ง ssh-keygen จากเทอร์มินัล cygwin (ไม่ใช่พรอมต์คำสั่ง windows ปกติ) ฉันได้ทำสิ่งนี้ในเครื่อง windows8 ของฉันแล้ว


4
คุณช่วยอธิบายเพิ่มเติมได้มั้ย วิธีนี้สามารถแก้ไขปัญหาได้อย่างไร ผู้ใช้ควรทำตามขั้นตอนใดนอกเหนือจาก "run ssh-keygen จาก Cygwin"
DanteTheEgregore

นี่เพิ่งสร้างกุญแจ แต่ OP มีกุญแจที่มีสิทธิ์ไม่ดี
Jonathan

ประสบการณ์แบบเดียวกันที่นี่: chmod / ssh-keygen ทำให้การอนุญาตที่ดีภายใต้ cygwin แต่ไม่ได้ทำถ้าฉันเรียกใช้จาก windows cmd (ฉันไม่รู้ว่าทำไม :-))
ตอบโดยอัตโนมัติ

-2

เรียกใช้โปรแกรมติดตั้ง Cygwin และอัปเดต ข้อผิดพลาดควรได้รับการแก้ไข


3
โพสต์ของคุณจะต้องมีการขยาย คำตอบที่ดีรวมถึงคำแนะนำเฉพาะ (ไม่ใช่แค่ลิงค์ไปยังพวกเขา) และคำอธิบายว่าทำไมคำตอบถึงคำถาม OPs หรือไม่ โปรดแก้ไขโพสต์ของคุณเพื่อระบุองค์ประกอบทั้งสองอย่างเพียงพอ
ตัวปลอมตัว Twisty
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.