บัญชีผู้ใช้กับบริการแตกต่างกันอย่างไร


16

ฉันต้องการทราบความแตกต่างระหว่างบัญชีผู้ใช้และบริการ

ฉันรู้ว่าเช่นJenkinsการติดตั้งให้อูบุนตูไม่ได้เป็นผู้ใช้แต่บัญชีผู้ใช้บริการ

  1. บัญชีบริการมีการใช้งานอย่างไร?
  2. เมื่อเราต้องการพวกเขา
  3. ฉันจะสร้างบัญชีบริการได้อย่างไร

คำตอบ:


18

บัญชีผู้ใช้ถูกใช้โดยผู้ใช้จริงบัญชีบริการจะถูกใช้โดยบริการของระบบเช่นเว็บเซิร์ฟเวอร์ตัวแทนการส่งจดหมายฐานข้อมูล ฯลฯ ตามแบบแผนและตามแบบแผนเท่านั้นบัญชีบริการจะมี ID ผู้ใช้ในช่วงต่ำเช่น <1000 หรือมากกว่านั้น . ยกเว้น UID 0 บัญชีบริการจะไม่มีสิทธิ์พิเศษใด ๆ บัญชีบริการอาจ - และโดยทั่วไปทำ - เป็นเจ้าของทรัพยากรเฉพาะแม้กระทั่งไฟล์พิเศษของอุปกรณ์ แต่ไม่มีสิทธิ์เหมือนผู้ใช้ขั้นสูง

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

ด้วยเหตุผลที่ดี: ตรงกันข้ามกับบัญชีผู้ใช้บัญชีบริการมักจะไม่มีชื่อเข้าสู่ระบบที่ "ถูกต้อง" นั่นคือพวกเขามี/usr/sbin/nologinชื่อเป็นเปลือกเข้าสู่ระบบ (หรือย้อนกลับไปในสมัยก่อน/bin/false) นอกจากนี้โดยทั่วไปบัญชีบริการจะถูกล็อคนั่นคือมันเป็นไปไม่ได้ที่จะเข้าสู่ระบบ (สำหรับแบบดั้งเดิม/etc/passwdและ/etc/shadowสิ่งนี้สามารถทำได้โดยการตั้งค่าแฮรหัสผ่านให้เป็นค่าโดยพลการเช่น*หรือx) นี่คือการแข็งบัญชีบริการต่อต้านการละเมิด ( ป้องกันในเชิงลึก )

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


4

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

อีกไม่นานผู้คนก็พบว่ามันสะดวกในการสร้างผู้ใช้ระบบหลายคนโดยไม่มีสิทธิ์มากมาย วิธีนี้ช่วยให้สามารถแยกบริการต่าง ๆ ที่เรียกใช้บนเครื่องเพื่อไม่ให้นิ้วเท้าของแต่ละคนเหยียบย่ำ บัญชีบริการ (หรือ“ บัญชีระบบ” สองคำนี้เป็นคำพ้องความหมาย) เป็นบัญชีที่สอดคล้องกับบริการที่ทำงานอยู่ในระบบแทนที่จะเป็นคนที่ใช้ระบบ โดยทั่วไปคุณมีบัญชีบริการสำหรับแต่ละงานที่ทำงานบนระบบที่มีชุดสิทธิ์ของตนเอง (เช่นไฟล์ของตัวเองพอร์ตเครือข่ายของตนเอง ฯลฯ )

ไม่มีคำจำกัดความที่เป็นทางการของบัญชีมนุษย์กับระบบ / บริการ เคอร์เนลไม่สนใจ (นอกเหนือจากการให้สิทธิ์พิเศษแก่ผู้ใช้ด้วย UID 0) คำสั่งการบริหารส่วนใหญ่ไม่สนใจเช่นกัน ความแตกต่างบางประการคือ:

  • ผู้ใช้ที่เป็นมนุษย์มีชื่อจริงเช่น "John Doe" ในขณะที่ผู้ใช้ระบบมีชื่อที่สื่อความหมายเช่น "Nasal daemon" หรือไม่มีเลย
  • ผู้ใช้มนุษย์ A มีเปลือกเข้าสู่ระบบจริง (เช่น/bin/shหรือ/bin/bashหรือ/bin/csh. บางผู้ใช้ระบบมีเปลือก (เกือบตลอดเวลา/bin/sh) คนอื่นไม่ได้ขึ้นอยู่กับวิธีที่พวกเขามีเจตนาที่จะใช้ (เช่นsu fooต้องfooจะมีเปลือก)
  • ผู้ใช้ที่เป็นมนุษย์มักจะมีรหัสผ่าน - แต่นั่นไม่ใช่กรณีเสมอไปตัวอย่างเช่นผู้ใช้แบบรีโมตเท่านั้นอาจมีคีย์ SSH เท่านั้น โปรดทราบว่าใน Unices ทันสมัยรหัสผ่านไม่ได้อยู่ใน/etc/passwdแต่ในบางไฟล์อื่น ๆ /etc/shadowเช่น
  • โฮมไดเร็กตอรี่ของผู้ใช้ที่เป็นมนุษย์มักจะอยู่ภายใต้/home(หรือบางตำแหน่งเฉพาะไซต์), ในขณะที่โฮมไดเร็กตอรี่ของผู้ใช้ระบบไม่อยู่ภายใต้/homeและอาจไม่มีอยู่ (แต่มีข้อยกเว้น).
  • ไซต์ส่วนใหญ่กำหนดช่วงของ ID ผู้ใช้สำหรับผู้ใช้ระบบและช่วงแยกจากกันสำหรับผู้ใช้ที่เป็นมนุษย์ การสำรอง 100–65533 หรือ 500–65533 หรือ 1,000–65533 เป็นเรื่องปกติและการแจกแจงส่วนใหญ่จะถูกตั้งค่าเพื่อเริ่มการจัดสรร ID ผู้ใช้จริงจาก 500 หรือ 1,000

บนเว็บไซต์ที่บัญชีร่วมกันในหลายเครื่องมีโดยปกติจะเป็นเซิร์ฟเวอร์กลางที่มีรายชื่อผู้ใช้สามารถเข้าถึงได้ผ่านทางNISหรือLDAP passwdรายการใน/etc/nsswitch.confระบุว่าจะหาข้อมูลของผู้ใช้ เป็นเรื่องปกติที่จะมีผู้ใช้ระบบในผู้ใช้ภายใน/etc/passwdและผู้ใช้จริงจากฐานข้อมูลทั่วทั้งเครือข่าย แต่บางครั้งมีผู้ใช้ระบบในฐานข้อมูลทั่วทั้งเครือข่าย (เพื่อบังคับใช้ UID ที่สอดคล้องกันซึ่งอำนวยความสะดวกในการจำลองเซิร์ฟเวอร์ ผู้ใช้ที่เป็นมนุษย์ในไฟล์โลคัล (เพื่ออนุญาตให้พวกเขาล็อกอินแม้เมื่อเครือข่ายถูก hosed)

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

บัญชีบริการและบัญชีบุคคลได้รับการจัดการโดยคำสั่งเดียวกันและบันทึกในไฟล์เดียวกัน คำสั่งการสร้างบัญชีอาจมีตัวเลือกในการตั้งค่าเริ่มต้นที่สมเหตุสมผลสำหรับผู้ใช้งานมนุษย์และบริการเช่นเพื่อเลือก ID ผู้ใช้ในช่วงที่เหมาะสมและพร้อมท์ให้ใส่รหัสผ่านสำหรับบุคคล ตัวอย่างเช่นadduservs adduser --systemหรือuseraddvs useradd -rบน Linux


3
    1. บัญชีบริการหรือที่รู้จักกันในชื่อบัญชีทางเทคนิคคือบัญชีที่ได้รับการออกแบบให้ใช้กับบริการ / แอปพลิเคชันเท่านั้นไม่ใช่ผู้ใช้ทั่วไป
    1. นักพัฒนาแอปพลิเคชันและบริการต้องการบัญชีเหล่านี้เพื่อ จำกัด สิทธิ์และสิทธิ์ของกระบวนการที่เกี่ยวข้องแทนที่จะเรียกใช้กระบวนการเป็นรูต บริการเป็นที่ตั้งขึ้นโดยinit, systemdหรือที่คล้ายกันซึ่งทำงานเป็นรากอย่างรวดเร็วปรับลดบัญชีผู้ใช้บริการเพื่อ จำกัด ความเสี่ยง บัญชีแอปพลิเคชันอาจได้รับสิทธิ์มากกว่าบัญชีปกติเช่นสิทธิในการเชื่อมโยงกับพอร์ต TCP ที่มีสิทธิพิเศษหรือตรงกันข้ามมีสิทธิ์ลดลงเมื่อเทียบกับผู้ใช้ปกติตัวอย่างเช่นปฏิเสธกระบวนการบริการ โทร/fork execในกรณีเช่นนี้ไม่จำเป็นต้องมีการลดระดับบริการลงในบัญชีบริการพวกเขาสามารถเริ่มต้นได้
    1. คุณไม่จำเป็นต้องทำ แต่เพียงแค่สร้างบัญชีโดยไม่มีรหัสผ่านที่ใช้งานได้และด้วยเชลล์ที่ใช้งานไม่ได้ (เช่น/bin/false) และมันจะไม่สามารถใช้งานได้โดยผู้ใช้ทั่วไปนั่นคือจะไม่มีวิธีการเข้าสู่ระบบภายในหรือระยะไกล (เช่น thru ssh) ใช้ชื่อบัญชี เช่นเดียวกับข้อ จำกัด ส่วนใหญ่ใช้บัญชีรูทหรือsudoอนุญาตให้เอาชนะได้

1

บัญชีบริการอาจไม่มีความสามารถในการใช้เชลล์เช่น มันถูกใช้เพื่อดำเนินการบริการ (daemon) ที่มีขอบเขตและสิทธิ์ที่ จำกัด ความคิดเห็นของฉันคือคุณสามารถสร้างมันเป็นผู้ใช้ปกติเพียงแค่ระวังสิทธิและความเป็นสมาชิกกลุ่ม อย่างไรก็ตามเวลาส่วนใหญ่ที่คุณทำไม่ได้เพราะโปรแกรมสร้างขึ้นโดยอัตโนมัติระหว่างการติดตั้ง ลองดู/etc/passwd root:x:0:0:root:/root:/bin/bash

0 คือ UID, มันเป็นลักษณะของลำดับชั้นของบัญชีในพื้นที่ผู้ใช้, รูทอยู่เหนือทุกคน, จากนั้นคุณมีสมาชิกกลุ่ม:rootในโฮมไดเร็กตอรี่/rootสุดท้ายเชลล์ที่ใช้โดยบัญชี/bin/bashเพื่อ 'ล็อกอิน' ของระบบ.

คุณสามารถใช้/usr/sbin/nologinสำหรับบัญชีที่คุณไม่ต้องการสิทธิ์การเข้าสู่ระบบ

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