คำตอบ:
บัญชีผู้ใช้ถูกใช้โดยผู้ใช้จริงบัญชีบริการจะถูกใช้โดยบริการของระบบเช่นเว็บเซิร์ฟเวอร์ตัวแทนการส่งจดหมายฐานข้อมูล ฯลฯ ตามแบบแผนและตามแบบแผนเท่านั้นบัญชีบริการจะมี ID ผู้ใช้ในช่วงต่ำเช่น <1000 หรือมากกว่านั้น . ยกเว้น UID 0 บัญชีบริการจะไม่มีสิทธิ์พิเศษใด ๆ บัญชีบริการอาจ - และโดยทั่วไปทำ - เป็นเจ้าของทรัพยากรเฉพาะแม้กระทั่งไฟล์พิเศษของอุปกรณ์ แต่ไม่มีสิทธิ์เหมือนผู้ใช้ขั้นสูง
สามารถสร้างบัญชีบริการเช่นบัญชีผู้ใช้ทั่วไป (เช่นการใช้useradd
) อย่างไรก็ตามบัญชีบริการมักจะสร้างและกำหนดค่าโดยผู้จัดการแพ็คเกจเมื่อติดตั้งซอฟต์แวร์บริการ ดังนั้นในฐานะผู้ดูแลระบบคุณไม่ควรกังวลโดยตรงกับการสร้างบัญชีบริการ
ด้วยเหตุผลที่ดี: ตรงกันข้ามกับบัญชีผู้ใช้บัญชีบริการมักจะไม่มีชื่อเข้าสู่ระบบที่ "ถูกต้อง" นั่นคือพวกเขามี/usr/sbin/nologin
ชื่อเป็นเปลือกเข้าสู่ระบบ (หรือย้อนกลับไปในสมัยก่อน/bin/false
) นอกจากนี้โดยทั่วไปบัญชีบริการจะถูกล็อคนั่นคือมันเป็นไปไม่ได้ที่จะเข้าสู่ระบบ (สำหรับแบบดั้งเดิม/etc/passwd
และ/etc/shadow
สิ่งนี้สามารถทำได้โดยการตั้งค่าแฮรหัสผ่านให้เป็นค่าโดยพลการเช่น*
หรือx
) นี่คือการแข็งบัญชีบริการต่อต้านการละเมิด ( ป้องกันในเชิงลึก )
การมีบัญชีบริการส่วนบุคคลสำหรับแต่ละบริการนั้นมีจุดประสงค์หลักสองประการ: มันเป็นมาตรการรักษาความปลอดภัยเพื่อลดผลกระทบในกรณีที่เกิดอุบัติเหตุด้วยบริการเดียว (การจัดแบ่ง ) และทำให้การบริหารจัดการง่ายขึ้นเพราะง่ายต่อการติดตามว่าทรัพยากรใด . ดูนี้หรือนี้คำตอบในคำถามที่เกี่ยวข้องสำหรับรายละเอียดเพิ่มเติม
ในขั้นต้นผู้ใช้มีวัตถุประสงค์เพื่อให้สอดคล้องกับมนุษย์โดยใช้ระบบดังนั้นชื่อ แต่ละกระบวนการทำงานในฐานะผู้ใช้เฉพาะและแต่ละไฟล์เป็นของผู้ใช้เฉพาะ ผู้ใช้พิเศษที่เรียกว่ารูทนั้นใช้สำหรับสิ่งที่ไม่ได้เป็นของผู้ใช้ที่เป็นมนุษย์เช่นระบบปฏิบัติการ เนื่องจากรูทสอดคล้องกับระบบปฏิบัติการของตัวเองจึงมีสิทธิ์ทั้งหมด
อีกไม่นานผู้คนก็พบว่ามันสะดวกในการสร้างผู้ใช้ระบบหลายคนโดยไม่มีสิทธิ์มากมาย วิธีนี้ช่วยให้สามารถแยกบริการต่าง ๆ ที่เรียกใช้บนเครื่องเพื่อไม่ให้นิ้วเท้าของแต่ละคนเหยียบย่ำ บัญชีบริการ (หรือ“ บัญชีระบบ” สองคำนี้เป็นคำพ้องความหมาย) เป็นบัญชีที่สอดคล้องกับบริการที่ทำงานอยู่ในระบบแทนที่จะเป็นคนที่ใช้ระบบ โดยทั่วไปคุณมีบัญชีบริการสำหรับแต่ละงานที่ทำงานบนระบบที่มีชุดสิทธิ์ของตนเอง (เช่นไฟล์ของตัวเองพอร์ตเครือข่ายของตนเอง ฯลฯ )
ไม่มีคำจำกัดความที่เป็นทางการของบัญชีมนุษย์กับระบบ / บริการ เคอร์เนลไม่สนใจ (นอกเหนือจากการให้สิทธิ์พิเศษแก่ผู้ใช้ด้วย UID 0) คำสั่งการบริหารส่วนใหญ่ไม่สนใจเช่นกัน ความแตกต่างบางประการคือ:
/bin/sh
หรือ/bin/bash
หรือ/bin/csh
. บางผู้ใช้ระบบมีเปลือก (เกือบตลอดเวลา/bin/sh
) คนอื่นไม่ได้ขึ้นอยู่กับวิธีที่พวกเขามีเจตนาที่จะใช้ (เช่นsu foo
ต้องfoo
จะมีเปลือก)/etc/passwd
แต่ในบางไฟล์อื่น ๆ /etc/shadow
เช่น/home
(หรือบางตำแหน่งเฉพาะไซต์), ในขณะที่โฮมไดเร็กตอรี่ของผู้ใช้ระบบไม่อยู่ภายใต้/home
และอาจไม่มีอยู่ (แต่มีข้อยกเว้น).บนเว็บไซต์ที่บัญชีร่วมกันในหลายเครื่องมีโดยปกติจะเป็นเซิร์ฟเวอร์กลางที่มีรายชื่อผู้ใช้สามารถเข้าถึงได้ผ่านทางNISหรือLDAP passwd
รายการใน/etc/nsswitch.conf
ระบุว่าจะหาข้อมูลของผู้ใช้ เป็นเรื่องปกติที่จะมีผู้ใช้ระบบในผู้ใช้ภายใน/etc/passwd
และผู้ใช้จริงจากฐานข้อมูลทั่วทั้งเครือข่าย แต่บางครั้งมีผู้ใช้ระบบในฐานข้อมูลทั่วทั้งเครือข่าย (เพื่อบังคับใช้ UID ที่สอดคล้องกันซึ่งอำนวยความสะดวกในการจำลองเซิร์ฟเวอร์ ผู้ใช้ที่เป็นมนุษย์ในไฟล์โลคัล (เพื่ออนุญาตให้พวกเขาล็อกอินแม้เมื่อเครือข่ายถูก hosed)
บัญชีที่ผู้ใช้เข้าถึงได้ซึ่งปลอมตัวเป็นผู้ใช้ระบบโดยทั่วไปจะไม่มีชื่อจริง แต่มีเชลล์ล็อกอินและชุดรหัสผ่านหรือคีย์ SSH ขณะที่มี ID ผู้ใช้ในช่วงระบบ ในความเป็นจริงมันจะเป็นการดีกว่าการปลอมตัวเพื่อใช้บัญชีระบบจริงซึ่งการลบจะทำให้บริการบางอย่างหยุดทำงาน แต่คุณไม่สามารถมีกฎที่ยากและรวดเร็วในการตรวจจับการโจมตีที่เป็นไปได้: ตามคำนิยามผู้โจมตีไม่ปฏิบัติตามกฎ
บัญชีบริการและบัญชีบุคคลได้รับการจัดการโดยคำสั่งเดียวกันและบันทึกในไฟล์เดียวกัน คำสั่งการสร้างบัญชีอาจมีตัวเลือกในการตั้งค่าเริ่มต้นที่สมเหตุสมผลสำหรับผู้ใช้งานมนุษย์และบริการเช่นเพื่อเลือก ID ผู้ใช้ในช่วงที่เหมาะสมและพร้อมท์ให้ใส่รหัสผ่านสำหรับบุคคล ตัวอย่างเช่นadduser
vs adduser --system
หรือuseradd
vs useradd -r
บน Linux
init
, systemd
หรือที่คล้ายกันซึ่งทำงานเป็นรากอย่างรวดเร็วปรับลดบัญชีผู้ใช้บริการเพื่อ จำกัด ความเสี่ยง บัญชีแอปพลิเคชันอาจได้รับสิทธิ์มากกว่าบัญชีปกติเช่นสิทธิในการเชื่อมโยงกับพอร์ต TCP ที่มีสิทธิพิเศษหรือตรงกันข้ามมีสิทธิ์ลดลงเมื่อเทียบกับผู้ใช้ปกติตัวอย่างเช่นปฏิเสธกระบวนการบริการ โทร/fork
exec
ในกรณีเช่นนี้ไม่จำเป็นต้องมีการลดระดับบริการลงในบัญชีบริการพวกเขาสามารถเริ่มต้นได้/bin/false
) และมันจะไม่สามารถใช้งานได้โดยผู้ใช้ทั่วไปนั่นคือจะไม่มีวิธีการเข้าสู่ระบบภายในหรือระยะไกล (เช่น thru ssh
) ใช้ชื่อบัญชี เช่นเดียวกับข้อ จำกัด ส่วนใหญ่ใช้บัญชีรูทหรือsudo
อนุญาตให้เอาชนะได้บัญชีบริการอาจไม่มีความสามารถในการใช้เชลล์เช่น มันถูกใช้เพื่อดำเนินการบริการ (daemon) ที่มีขอบเขตและสิทธิ์ที่ จำกัด ความคิดเห็นของฉันคือคุณสามารถสร้างมันเป็นผู้ใช้ปกติเพียงแค่ระวังสิทธิและความเป็นสมาชิกกลุ่ม อย่างไรก็ตามเวลาส่วนใหญ่ที่คุณทำไม่ได้เพราะโปรแกรมสร้างขึ้นโดยอัตโนมัติระหว่างการติดตั้ง ลองดู/etc/passwd
root:x:0:0:root:/root:/bin/bash
0 คือ UID, มันเป็นลักษณะของลำดับชั้นของบัญชีในพื้นที่ผู้ใช้, รูทอยู่เหนือทุกคน, จากนั้นคุณมีสมาชิกกลุ่ม:root
ในโฮมไดเร็กตอรี่/root
สุดท้ายเชลล์ที่ใช้โดยบัญชี/bin/bash
เพื่อ 'ล็อกอิน' ของระบบ.
คุณสามารถใช้/usr/sbin/nologin
สำหรับบัญชีที่คุณไม่ต้องการสิทธิ์การเข้าสู่ระบบ