ความคิดที่ดีอยู่ในตำแหน่งศูนย์กลางหรือไม่


29

ฉันอยู่ระหว่างการกำหนดค่าเซิร์ฟเวอร์คลาวด์เพื่อเรียกใช้สแต็กต่อไปนี้: Ruby, Passenger, Apache; ภายใต้ Ubuntu 10.04 (Lucid Lynx)

ในกระบวนการที่ต้องการทำให้เซิร์ฟเวอร์ง่ายต่อการจัดการฉันเปิดใช้งานคีย์ RSA rootและwww-dataเพื่อให้สามารถsshเข้าไปในเซิร์ฟเวอร์ได้ สิ่งที่ฉันไม่ชอบคือไดเรคทอรีwww-dataของ.sshsat /var/wwwซึ่งตั้งค่าไดเรกทอรีเริ่มต้นสำหรับ apache ความกังวลของฉันคือถ้า apache ไม่ได้รับการกำหนดค่าอย่างเหมาะสมจากนั้น.sshไดเรกทอรีสามารถสัมผัส

ฉันมาข้ามวิธีการย้าย~/.ssh/authorized_keysไฟล์ลงในตำแหน่งกลางโดยการเปลี่ยนแปลงในAuthorizedKeysFile /etc/ssh/sshd_configสิ่งนี้มาพร้อมกับผู้เชี่ยวชาญ 2 คน: ตำแหน่งเดียวสำหรับกุญแจและไม่ต้องกังวลกับการกำหนดค่า Apache ที่ไม่ดี ข้อเสียเดียวที่ฉันคิดได้ก็คือตอนนี้ผู้ใช้ทุกคนสามารถเข้าสู่ระบบบนเซิร์ฟเวอร์ (เห็นได้ชัดว่าดาบสองคมของไฟล์กุญแจกลาง)

มีอะไรที่ฉันไม่ได้รับในการกำหนดค่านี้หรือไม่? ฉันเปิดเผยตัวเองมากกว่านี้หรือนี่เป็นวิธีแก้ปัญหาที่ดีกว่าauthorized_keysไฟล์เดี่ยว ๆหรือไม่?

ฉันเป็นมิตรกับสิ่งแวดล้อมเมื่อพูดถึงการจัดการเซิร์ฟเวอร์ แต่พร้อมที่จะถูกเรียกว่าชื่อที่ไม่ดีสำหรับการทำสิ่งที่ไม่ดี : D


1
อย่างน้อยกุญแจสาธารณะที่ถูกเปิดเผย (อ่านอย่างเดียว) บนอินเทอร์เน็ตไม่ใช่ความเสี่ยงที่ใหญ่ที่สุด ... (อาจทำให้ผู้โจมตีสามารถดูว่าพวกเขาสามารถล็อกอินเข้าสู่เซิร์ฟเวอร์ด้วยรหัสส่วนตัวที่พวกเขาได้มาจากที่อื่นได้หรือไม่ อนุญาตให้พวกเขาเข้าสู่ระบบโดยเพียงแค่ได้รับว่า ... ) (ปัญหาร้ายแรงคือถ้ามีid_rsaไฟล์ใน~/.sshและพวกเขาจัดการที่จะอ่าน)
Gert van den Berg

คำตอบ:


51

ไฟล์คีย์ทั้งหมดสามารถรวมศูนย์ในไดเรกทอรีเดียวกันและไม่ผสมในไฟล์เดียวกัน

เพียงตั้งค่าsshd_configไฟล์ดังนี้:

AuthorizedKeysFile  /etc/ssh/authorized_keys/%u

บนเซิร์ฟเวอร์ของคุณ:

  • คีย์ www-data จะอยู่ใน /etc/ssh/authorized_keys/www-data
  • คีย์รูทจะอยู่ใน /etc/ssh/authorized_keys/root

เกี่ยวกับสิทธิ์การเข้าถึงการตั้งค่าเหล่านี้ได้รับการยอมรับโดย sshd:

/etc/ssh/authorized_keysเป็นเจ้าของโดยroot:rootและมีโหมด 755 ไฟล์หลักเป็นของroot:rootและมีโหมด 644

โหมดอื่นอาจใช้งานได้ แต่ฉันยังไม่ได้ทดสอบ


3
+1 แต่ฉันจะไม่ตั้งค่าบิตอื่น ๆ ตั้งค่าความเป็นเจ้าของของไฟล์% u ให้กับผู้ใช้เพื่อไม่จำเป็น
Aaron Copley

1
ทางออกที่ดีสำหรับปัญหาที่ผู้ใช้ที่เป็นอันตรายสามารถเพิ่มกุญแจสาธารณะเพิ่มเติมให้กับ ~ / .ssh / authorized_keys ของพวกเขาเพื่อให้สิทธิ์การเข้าถึงแก่ผู้อื่น
bbaassssiiee

ฉันเพิ่งยืนยันว่าโหมด 600 สำหรับไฟล์คีย์ที่ได้รับอนุญาตของผู้ใช้ไม่ทำงาน ต้องเป็นโหมด 644
Luis E.

@bbaassssiiee ABSOLUTELY นี้ไม่สามารถแก้ไขปัญหาได้ พวกเขาสามารถแบ่งปันคีย์ส่วนตัวของพวกเขากับใครก็ได้ที่พวกเขาต้องการให้เข้าถึง (ความเป็นไปได้นี้สามารถลดลงได้แน่นอน แต่คำตอบนี้ไม่เป็นศูนย์เพื่อลดความมัน)
DylanYoung

1
@DylanYoung ฉันยอมรับการแบ่งปันคีย์ส่วนตัวเป็นไปได้ แต่ด้วย chattr ฉันสามารถเพิกถอนสิทธิ์การเข้าถึงการเขียนไปยังไฟล์ authorized_keys เพื่อให้ฉันสามารถแจกจ่ายไฟล์เหล่านั้นโดยเฉพาะปกป้องบรรทัดเดียวในทุก ๆ ไฟล์ด้วย
bbaassssiiee

15

โดยทั่วไปฉันจะไม่ทำในสิ่งที่คุณแนะนำ มันแบ่งสมมติฐานที่พบบ่อย (เช่น~/.ssh/authorized_keysทำงานให้กับผู้ใช้ของคุณและแนะนำปัญหาที่คุณได้กล่าวถึงไปแล้วในคำถามของคุณ) หากคุณเห็นปัญหาที่เห็นได้ชัดก่อนการใช้งานหมายความว่าโซลูชันของคุณไม่เหมาะ

ฉันคิดว่ามันปลอดภัยที่TERRIBLE ที่จะให้ทุกคนแบ่งปันบัญชีบริการ: ตอนนี้มันเป็นแค่คุณและคุณก็รู้ว่าคุณเป็นคนหนึ่งที่ทำการเปลี่ยนแปลง ใน 5 ปีเมื่อคุณมีผู้ดูแล 5 คนคุณจะอยากรู้ว่าใครเปลี่ยนอะไรบ้างและขุดผ่านบันทึกการตรวจสอบเพื่อดูว่าใครใช้สิ่งที่สำคัญเมื่อเป็นความเจ็บปวดของราชวงศ์
คุณดีกว่าที่จะให้ผู้ใช้ลงชื่อเข้าใช้ด้วยตนเองและใช้งานsudoหรือสิ่งที่คล้ายกันเพื่อเพิ่มสิทธิ์ของพวกเขาและทำสิ่งที่พวกเขาต้องทำ


หากคุณยังต้องการรวบรวมกุญแจ SSH ฉันขอแนะนำให้ดูระบบการปรับใช้อย่างPuppetหรือRadmindเพื่อจัดการ / แจกจ่ายauthorized_keysไฟล์ไปยัง~user/.ssh/ไดเรกทอรีที่เหมาะสม(หรือแฮ็คโซลูชันที่โตขึ้นเองในบ้าน)
เมื่อคุณขยายไปยังเซิร์ฟเวอร์หลายเครื่องคุณอาจต้องการดูแพตช์กุญแจสาธารณะของ LDAPสำหรับ OpenSSH เวอร์ชันเก่า (หรือAuthorizedKeysCommandคำสั่งและสคริปต์ที่เหมาะสมใน OpenSSH เวอร์ชั่นใหม่กว่า) เพื่อให้คุณสามารถรวมผู้ใช้ของคุณไว้ที่ส่วนกลางและไม่ต้องกระจาย กุญแจของพวกเขาไปทั่วเครือข่ายของคุณ แต่มันน่าจะอยู่ไกลสำหรับคุณ


1
+1 สำหรับอาร์กิวเมนต์การแบ่งปัน ทำให้สั้นเพราะฉันใช้เวลาสักครู่เพื่อตระหนักถึงความหมายของมัน: ไม่ควรมีไดเรกทอรี ~ www-data / .ssh เลยดังนั้นจึงไม่มีความเสี่ยงด้านความปลอดภัยจากเว็บเบราว์เซอร์
thiton

ขอบคุณสำหรับความคิดเห็น! ถ้าฉันเข้าใจคุณอย่างถูกต้อง ฉันควรจะมีค่าrootมิได้www-dataเข้าถึงได้ผ่านทางคีย์ SSH คือการที่ถูกต้องหรือไม่
Gavin Miller

1
การมี~www-data/.sshไดเรกทอรีไม่ใช่สิ่งที่น่ากลัว (ด้วยการอนุญาตที่เหมาะสมมันไม่ได้มีความเสี่ยงมากนัก) แต่ถ้าคุณจะใช้~www-data/.sshมันอาจจะดีกว่าถ้าไม่ให้ webroot ของคุณ~www-data(ย้าย webroot หรือย้ายwww-dataโฮมไดเร็กตอรี่ของ) ความแตกต่างของผู้ใช้เป็นข้อโต้แย้งที่ใหญ่กว่า IMHO - ฉันรู้ว่าถ้าฉันเห็นการjsmithเข้าสู่ระบบฉันรู้ว่ามันเป็นจอห์นสมิ ธ ถ้าฉันเห็นการwww-dataเข้าสู่ระบบฉันต้องขุดเพิ่มเติมเพื่อค้นหาว่าใครเป็น
voretaq7

เหตุผลที่ฉันต้องการคีย์ ssh สำหรับ www-data คือฉันกำลังใช้ Beanstalk (เครื่องมือ SCM และปรับใช้) เพื่อทำการปรับใช้ผ่าน SFTP ฉันควรสร้างบัญชีแยกต่างหากสำหรับ Beanstalk เพื่อทำ ftp'ing หรือไม่? อะไรจะเป็นทางออกที่ดีที่สุดที่นั่น?
Gavin Miller

1
วิธีที่มันอยู่ในระบบมากที่สุดAuthorizedKeysFileในการเริ่มต้นที่/etc/ssh/sshd_config %h/.ssh/authorized_keysนี่%hคือตัวยึดสำหรับไดเรกทอรีบ้าน ช่วยให้สิ่งที่คุณได้จากการตั้งค่าให้หรือแม้กระทั่ง/some/folder/ssh_keys_by_user/%h/ /root/ssh_keys/%uคุณสามารถให้สิทธิ์ผู้ใช้ในการเขียนไฟล์แต่ละไฟล์ที่นั่น (และเฉพาะของเขา) ลิงก์ไฟล์ไปยังตำแหน่งมาตรฐาน (ด้วยln -s /root/ssh_keys_by_user/username /home/username/.ssh/authorized_keys) และไม่ทำลายสมมติฐานที่กำหนดไว้
con-f-use
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.