การอนุญาตเกี่ยวกับกุญแจส่วนตัวในโฟลเดอร์. ssh?


381

ฉันเปลี่ยนการอนุญาตของฉันใน.sshโฟลเดอร์ของฉันและตอนนี้เมื่อฉันใช้ซอฟต์แวร์ที่ใช้รหัสส่วนตัวของฉันฉันต้องพิมพ์รหัสผ่านทุกครั้ง สิทธิ์ของฉันควรอยู่ที่id_rsaไฟล์ของฉันโดยไม่ต้องพิมพ์รหัสผ่านทุกครั้งที่ใช้แอพที่ใช้มัน

ขณะนี้สิทธิ์ของฉันถูกตั้งค่าเป็น:

-rw-------@ 1 Jody  staff   114 Nov  4 23:29 config
-rw-------  1 Jody  staff  1743 Oct 21  2009 id_rsa
-rw-------@ 1 Jody  staff   397 Oct 21  2009 id_rsa.pub 
-rw-------@ 1 Jody  staff  3855 Sep 13 22:35 known_hosts

คำตอบ:


640

โดยทั่วไปคุณต้องการให้สิทธิ์เป็น:

  • .ssh ไดเรกทอรี: 700 (drwx------)
  • กุญแจสาธารณะ ( .pubไฟล์):644 (-rw-r--r--)
  • รหัสส่วนตัว ( id_rsa):600 (-rw-------)
  • สุดท้ายไดเรกทอรีของคุณไม่ควรเขียนได้โดยกลุ่มหรือคนอื่น ๆ (มากที่สุด755 (drwxr-xr-x))

ฉันสมมติว่าคุณหมายความว่าคุณต้องป้อนรหัสผ่านระบบ / ผู้ใช้ทุกครั้งและก่อนหน้านี้คุณไม่จำเป็นต้องทำ การตอบสนองของ cdhowie คือสมมติว่าคุณตั้งรหัสผ่าน / วลีรหัสผ่านเมื่อสร้างคีย์ของคุณและถ้าคุณทำอย่างที่เขาบอกว่าคุณจะต้องป้อนรหัสผ่านของคุณทุกครั้งเว้นแต่ว่าคุณจะใช้ตัวแทน ssh


13
ฉันพบที่อื่นว่าหากใช้ไฟล์ authorized_keys ควรเป็น chmod'd เป็น 640 คือ -rw-r -----
AnneTheAgile

5
ฉันจะหาข้อมูลนี้ในหน้าคนได้ที่ไหน?
Sonique

131
ฉันกลับมาที่โพสต์นี้ประมาณ 30 ครั้งแล้ว ฉันไม่สามารถเชื่อว่าฉันจำได้
JREAM

7
สิ่งสำคัญเพียงอย่างเดียวคือไม่มีสิ่งใดใน. ssh ที่สามารถเขียนได้กับทุกคนและไม่มีคีย์ลับใด ๆ ที่สามารถอ่านได้กับคนอื่น
Markus Kuhn

5
@Cerin ดำเนินการอนุญาตในไดเรกทอรีให้ความสามารถในการแสดงรายการไฟล์ย่อย / ไดเร็กตอรี่ของไดเร็กตอรี่นั้น, ไฟล์ที่อยู่ในโฟลเดอร์จะไม่ "สืบทอด" บิตเรียกใช้ของโฟลเดอร์พาเรนต์.
โทมัส

87

ฉันดิ้นรนกับสิ่งนี้ตลอดไปและในที่สุดก็พบสิ่งที่จำเป็น แทนที่$USERทุกแห่งด้วยชื่อผู้ใช้ SSH ที่คุณต้องการลงชื่อเข้าใช้บนเซิร์ฟเวอร์ หากคุณพยายามที่จะเข้าสู่ระบบตามที่rootคุณจะต้องใช้/root/.sshฯลฯ แทนที่จะ/home/root/.sshเป็นวิธีที่ผู้ใช้ที่ไม่ใช่รูท

  • โฮมไดเร็กทอรีบนเซิร์ฟเวอร์ไม่ควรเขียนได้โดยผู้อื่น: chmod go-w /home/$USER
  • โฟลเดอร์ SSH บนเซิร์ฟเวอร์ต้องการ 700 สิทธิ์: chmod 700 /home/$USER/.ssh
  • ไฟล์ Authorized_keys ต้องการการอนุญาต 644: chmod 644 /home/$USER/.ssh/authorized_keys
  • ตรวจสอบให้แน่ใจว่าuserเป็นเจ้าของไฟล์ / โฟลเดอร์และไม่ใช่root: chown user:user authorized_keysและchown user:user /home/$USER/.ssh
  • วางพับลิกคีย์ที่สร้างขึ้น (จากssh-keygen) ลงในauthorized_keysไฟล์ของผู้ใช้บนเซิร์ฟเวอร์
  • ตรวจสอบให้แน่ใจว่าโฮมไดเร็กตอรี่ของผู้ใช้ถูกตั้งค่าเป็นสิ่งที่คุณคาดว่าจะเป็นและมันมี.sshโฟลเดอร์ที่ถูกต้องซึ่งคุณได้ทำการแก้ไข ถ้าไม่ใช้usermod -d /home/$USER $USERเพื่อแก้ไขปัญหา
  • ในที่สุดรีสตาร์ท ssh: service ssh restart
  • จากนั้นตรวจสอบให้แน่ใจว่าไคลเอนต์มีพับลิกคีย์และไฟล์ไพรเวตคีย์ใน.sshโฟลเดอร์ผู้ใช้โลคัลและล็อกอิน:ssh user@host.com

เกี่ยวกับย่อหน้าแรกของคุณฉันสามารถใช้คีย์สาธารณะ / ส่วนตัวกับผู้ใช้บนกล่อง linux ในพื้นที่ของฉัน (เช่นabc) แตกต่างจากผู้ใช้บนเซิร์ฟเวอร์ระยะไกล (เช่นdef@123.456.789) ฉันแค่ต้องทำให้แน่ใจว่าผู้ใช้ในท้องถิ่นเป็นเจ้าของไฟล์. ssh ในท้องถิ่น (เช่นabc:abcไม่ใช่root:abc) `
Michael

1
ขอบคุณสำหรับการวางขั้นตอนและคำสั่งทั้งหมดสำหรับมือใหม่อเล็กซ์ คุณเป็นหนึ่งในคำตอบที่มีประโยชน์ที่สุดที่นี่
Nav

6
+1 "ไฟล์ Authorized_keys ต้องการการอนุญาต 644" <= นั่นสำคัญมาก!
Le Quoc Viet

หากคุณกำลังให้ .ssh ไดเรกทอรี700โหมดแล้วมีจุดใดในการให้ r-- ไปยังกลุ่มและคนอื่น ๆ เพราะเพียงคุณเท่านั้นที่สามารถ "ผ่านไป" .ssh แล้ว (สมมติว่าไม่มีการเชื่อมโยงอย่างหนักที่มีอยู่สำหรับไฟล์เหล่านี้) เช่นเดียวกันสำหรับคำตอบที่ยอมรับ ค่าเริ่มต้น 755 ก็เพียงพอแล้ว
user3125367

400 สำหรับไฟล์ pem เพียงพอในประสบการณ์ของฉัน
AT

37

ตรวจสอบให้แน่ใจว่าผู้ใช้รายอื่นไม่สามารถเขียนไดเรกทอรีบ้านของคุณได้

chmod g-w,o-w ~


8
ในปีนี้คำสั่งนี้จะถือว่าคุณเข้าสู่ระบบในฐานะผู้ใช้และไม่รูท
Alex W

6

การอนุญาตไม่ควรเกี่ยวข้องกับสิ่งนี้ ไพรเวตคีย์ของคุณถูกเข้ารหัสด้วยรหัสผ่านดังนั้นคุณต้องป้อนคีย์ส่วนตัวเพื่อถอดรหัสและใช้งานได้

คุณอาจลองเรียกใช้เอเจนต์ ssh ซึ่งสามารถแคชคีย์ถอดรหัสและจะส่งไปยังแอปพลิเคชันที่ต้องการ


ขอบคุณสำหรับข้อมูลเพิ่มเติมเกี่ยวกับตัวแทน ssh ดูเหมือนว่ามีสิ่งหนึ่งที่สร้างขึ้นในเสือดาวดังนั้นฉันคิดว่าฉันจะทำอย่างนั้น มีปัญหาเล็กน้อย แต่ฉันจะถามคำถามอื่น

5
อย่าประมาทสิทธิ์ พวกเขายังคงเข้ามาเล่นแน่นอน
Alex W

@AlexW พวกเขาเล่นกับแง่มุมอื่น ๆ ของ ssh แต่ไม่ใช่คนที่ถามเกี่ยวกับคำถาม
cdhowie

หากคุณไม่มีรหัสผ่านสำหรับคีย์ส่วนตัว (whink ของสคริปต์ระยะไกลอัตโนมัติที่เรียกว่า) มันจะไม่ช่วยคุณ สิทธิ์จำเป็นที่นี่
nerdoc

"ฉันต้องพิมพ์รหัสผ่านของฉันทุกครั้งสิทธิ์ของฉันควรอยู่ในไฟล์ id_rsa ของฉันอย่างไรโดยไม่ต้องพิมพ์รหัสผ่านทุกครั้งที่ฉันใช้แอพที่ใช้งาน"
Craig Hicks

4

เฟลิเป้ถูกต้อง - ไดเรกทอรีที่มีไดเรกทอรี. ssh ของคุณจะต้องไม่สามารถเขียนได้โดยกลุ่มหรืออื่น ๆ ดังนั้นchmod go-w ~เป็นสิ่งตรรกะถัดไปที่จะลองถ้าคุณยังคงได้รับพร้อมท์ให้ใส่รหัสผ่านเมื่อ ssh'ing หลังจากทำงานssh-keygen -t rsa; cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keysสมมติว่าคุณไม่ได้กำหนดวลีรหัสผ่านในคำสั่ง ssh-keygen และไดเรกทอรี. ssh ของคุณอยู่ในโฮมไดเร็กตอรี่ของคุณ

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