การเข้าสู่ระบบในฐานะผู้ใช้ที่ใช้ร่วมกันเป็นนิสัยที่ไม่ดีหรือไม่?


35

ผมเคยทำงานในองค์กรที่แทนการสร้างผู้ใช้อูบุนตูใหม่ต่อคนที่ต้องการที่จะเข้าสู่เครื่อง sysadmins เพียงแค่เพิ่มคีย์ SSH ของผู้ใช้แต่ละ.ssh/authorized_keysคนและทุกคนsshที่จะเป็นเครื่อง ( เช่น ) หรือubuntu@host ec2-user@host(โดยบังเอิญฉันเคยเห็นสิ่งนี้ฝึกหัดใน Mac minis ที่ใช้ร่วมกันในห้องแล็บด้วย) วิธีนี้เป็นที่ยอมรับหรือเป็นรูปแบบต่อต้านหรือไม่?

โฮสต์ที่มีปัญหาส่วนใหญ่จะใช้สำหรับการทดสอบ แต่ยังมีการดำเนินการที่โดยทั่วไปต้องการการกำหนดค่าต่อผู้ใช้และมีการติดตามว่ามีการกระทำโดยผู้ใช้ที่เฉพาะเจาะจงเช่นการสร้างและการผลักดันคอมมิต git ซึ่งปัจจุบันใช้คอมไพล์ทั่วไป ผู้ใช้งาน


23
ขณะที่หลายคนมีปัญหากับความสัมพันธ์ของโพลีรักคนอื่นจัดการกับพวกเขาได้ดีดังนั้นผมจึงไม่คิดว่ามันจำเป็นต้องเป็น "นิสัยไม่ดี" ที่จะแบ่งปัน ... โอ้ไม่เป็นไรคุณหมายถึงผู้ใช้บัญชี
HopelessN00b

Awww มีคนแก้ไขชื่อ clickbait .. :(
Burgi

คำตอบ:


42

ใช่มันเป็นนิสัยที่ไม่ดี มันขึ้นอยู่กับการสันนิษฐานเบื้องต้นว่าไม่มีใครเป็นอันตราย (หรือจะเป็น) และไม่มีใครทำผิดพลาด การมีบัญชีที่ใช้ร่วมกันทำให้เป็นเรื่องเล็กน้อยสำหรับสิ่งต่าง ๆ ที่จะเกิดขึ้นโดยไม่ต้องมีความรับผิดชอบและไม่มีขีด จำกัด

หากเหตุผลสำหรับรูปแบบการแบ่งปัน uid นี้เป็นเพียงการลดค่าใช้จ่ายในการดูแลระบบในการสร้างบัญชีใหม่และการกำหนดค่าการแชร์บางทีผู้ดูแลระบบควรลงทุนเวลาในระบบอัตโนมัติเช่นAnsible , Chef , PuppetหรือSaltที่ทำให้ผู้ใช้สร้าง บัญชีในหลาย ๆ เครื่องง่ายมาก


4
มันไม่ใช่ความอาฆาตพยาบาทและมันก็ไม่ได้ไร้ความสามารถด้วยซ้ำ เมื่อสิ่งที่ฉันไม่ทำงานฉันไม่สามารถคิดได้ว่าฉันจะจำสิ่งที่ได้ทำในบัญชีนี้
djechlin

หลักการของข้อมูลที่ปลอดภัย: Integrity Confidentiality Availability Accountability +1 สำหรับการใช้คำว่ารับผิดชอบ
DeveloperWeeks

7

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

ทางเลือกอื่นจะเป็นอย่างไร ผู้ใช้บางคนต้องทำสิ่งต่าง ๆ มากมายไม่ต้องพูดถึงรูท Sudo? ไม่เป็นไรสำหรับงานที่มีข้อ จำกัด บางอย่าง แต่ไม่ใช่สำหรับการดูแลระบบ

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

การรับรองความถูกต้องการอนุญาตและการบัญชี (AAA) เป็นนิพจน์แบบคลาสสิก: คุณได้รับการรับรองความถูกต้องด้วยคีย์ ssh ของคุณคุณได้รับอนุญาตให้ทำสิ่งใดก็ตามที่ผู้ใช้ทั่วไปสามารถทำได้เพราะคีย์ของคุณอยู่ใน สามารถตรวจสอบได้หลังจากข้อเท็จจริง


3
ดังนั้นผู้ใช้ทั่วไปจึงมีการรับรองความถูกต้อง (คีย์ ssh?) ที่ได้รับอนุญาตให้แก้ไข git repo นั่นไม่ดีจริงๆ ไม่เพียงเพราะมันทำลายความรับผิดชอบต่อการกระทำนั้น แต่ยังเป็นเพราะบุคคลใดสามารถคัดลอกคีย์นั้นและใช้งานได้จากที่อื่น เมื่อฉันมีปัญหาแบบนั้นฉันก็อปปี้รหัสหรือส่วนต่างไปยังเครื่องของฉันและยืนยันจากที่นั่น
กฎหมาย 29

2
เหตุใดจึงไม่sudoยอมรับการจัดการทั่วไปของเครื่องจักร
Blacklight Shining

4
คุณอยู่ในฐานะรูทใน "สภาพแวดล้อมที่ปลอดภัยอย่างยิ่ง" oO?
xaa

@BlacklightShining หากคุณต้องสามารถทำอะไรก็ได้ (chown, chmod ไฟล์โดยพลการ, ติดตั้งเซิร์ฟเวอร์, ติดตั้งระบบไฟล์, ไม่มีอะไรที่จะได้รับโดย sshing ในฐานะผู้ใช้และทำ sudo bash แทน, ssh ในการใช้ relay relay และ / หรือบันทึกทุกอย่างไปยังเซิร์ฟเวอร์ระยะไกลที่มีเจ้าของคีย์ ssh ที่ ssh'd มา
Law29 29

1
@xaa ใช่ฉันทำและฉันไม่เห็นปัญหา ทุกอย่างที่ฉันพิมพ์ถูกบันทึกไว้ในเครื่องอื่น "ไม่ทำงานเหมือนรูท" เป็น maxim ที่ไร้ประโยชน์โดยสิ้นเชิงเมื่อเครื่องเป็นเซิร์ฟเวอร์ที่ทุกสิ่งที่คุณอาจต้องการทำให้คุณต้องรูท
กฎหมาย 29

3

มันชัดเจนขึ้นอยู่กับกรณีการใช้งานของระบบ ถ้ามันเป็นระบบสำหรับการทดสอบเป็นครั้งคราวมันก็ดีสำหรับฉัน เรายังมีระบบดังกล่าว หาก บริษัท ไม่มีการจัดการข้อมูลประจำตัว (LDAP, IPA) ใด ๆ ดังนั้นการสร้างผู้ใช้ใหม่โดยไม่มีการควบคุมระยะไกลบนระบบสุ่มนั้นเป็นภาระ

แต่สำหรับการทำงานทุกวันเมื่อมีคนทำผิดพลาดทำให้ทั้ง บริษัท ไม่สามารถใช้งานได้นั้นไม่ใช่ความคิดที่ดี


หากคุณไม่มีหรือไม่มีบริการไดเรกทอรีการสร้างและจัดการบัญชีหลายพันบัญชีเป็นไปไม่ได้
Jim B

แม้ว่าคุณจะไม่สามารถใช้ LDAP คุณก็ยังมีโอกาสเข้าถึง SSH (หรือ Powershell บน Windows) คุณจะยังคงต้องการวิธีจัดการไฟล์ authorized_keys บนโฮสต์ของคุณสำหรับบัญชีเหล่านั้นทั้งหมด (เว้นแต่คุณจะแชร์รหัสผ่านด้วย) และการตั้งค่าอื่น ๆ อีกมากมาย ฉันต้องสงสัยว่าทำไมคุณไม่ใช้การจัดการการกำหนดค่าบางประเภท (เช่น Puppet, Chef, Ansible) หากคุณมีผู้ใช้หรือเซิร์ฟเวอร์จำนวนมาก กำจัดภาระนั้นและให้การควบคุมกระบวนการความรับผิดชอบและการตรวจสอบกลับ
Martijn Heemels

3

คำตอบทั้งหมดที่กล่าวถึงความกังวลของความรับผิดชอบซึ่งเป็นปัญหาที่สำคัญและแท้จริงในตัวเอง แต่การใช้บัญชีที่ใช้ร่วมกันยังช่วยให้ผู้ใช้รายอื่นโจมตีได้อย่างไม่น่าเชื่อ:

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

โดยทั่วไปการใช้บัญชีที่ใช้ร่วมกันบนคอมพิวเตอร์เปรียบเสมือนการดื่มน้ำจากอ่างแช่เท้าที่สระว่ายน้ำสาธารณะ


1

โดยทั่วไปการแบ่งปันหนึ่งบัญชีเป็นแนวคิดที่ไม่ดีด้วยเหตุผลดังต่อไปนี้:

  1. ทุกการตั้งค่าสำหรับผู้ใช้นี้จะส่งผลต่อทุกคนที่ลงชื่อเข้าใช้ (Promt, aliases, ... )
    1. คุณสูญเสียความเป็นไปได้ที่จะค้นหาว่าใครทำอะไร
    2. หนึ่งข้อผิดพลาดในการกำหนดค่าบัญชี (ตัวอย่างเช่นการลบ ssh kay โดยไม่ตั้งใจ) ส่งผลกระทบต่อทุกคนที่ใช้บัญชีผู้ใช้นั้น (ในตัวอย่างนั้นถูกล็อก)

และก่อนหน้านี้แน่ใจว่ามีข้อเสียมากกว่าเดิม ... แต่ฉันไม่ต้องการเข้าไปเพิ่มเติม

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

ในการตั้งค่าเช่นนี้คุณมีความเป็นไปได้ที่จะแบ่งปันบัญชีนี้เพื่อเข้าสู่ระบบ (สำหรับ reasions ข้างต้นฉันจะไม่ทำเช่นนี้) หรือคุณเข้าสู่ระบบทีละคนและเปลี่ยนผู้ใช้ไปยังบัญชีที่ใช้ร่วมกัน (ฉันอยากจะแนะนำ)

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

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