ทำไมถึงมีหลายบัญชี ฉันเป็นผู้ใช้คนเดียว


13

ฉันใช้ระบบเดสก์ท็อป Ubuntu 12.04 จนถึงตอนนี้ฉันได้ติดตั้งเพียงบางโปรแกรม (ฉันมีสิทธิ์ sudo)

  1. เมื่อฉันตรวจสอบรายชื่อผู้ใช้ในระบบฉันเห็นรายการยาวเช่นผู้ใช้มากกว่า 20 ราย - เมื่อใดที่ผู้ใช้เหล่านี้ถูกสร้างขึ้น (เช่น daemon, sys, sync, เกม, ชีพจร ฯลฯ ) สิ่งเหล่านี้เกี่ยวข้องกับโปรแกรมใหม่ที่กำลังติดตั้งอย่างไร

  2. ถ้าฉันรันโปรแกรมบนระบบของฉันมันควรจะทำงานด้วย UID ของฉัน แต่เมื่อทำpsฉันเห็นโปรแกรมอื่น ๆ ที่ทำงานด้วย UID ที่แตกต่างกัน (เช่น root, daemon, avahi, syslog, colord เป็นต้น) - โปรแกรมเหล่านี้เริ่มต้นด้วย UID ที่แตกต่างกันอย่างไร


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

ในท้ายที่สุดมันเป็นแฮ็ค หนึ่งที่ใช้กันอย่างแพร่หลาย แต่แฮ็คยังคง การแจกแจงของ UNIX ใช้แนวคิด "ผู้ใช้" ในทางที่ผิดเพื่อหลีกเลี่ยงรูปแบบการรักษาความปลอดภัยที่เก่าและไม่สมบูรณ์
Federico Poloni

คำตอบ:


24

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

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

ภายใต้ Ubuntu ID ผู้ใช้ในช่วง 0-99 จะถูกสร้างขึ้นเมื่อติดตั้งระบบ 0 คือราก หลายรายการในช่วง 1-99 มีอยู่เพียงเพื่อเหตุผลทางประวัติศาสตร์เท่านั้นและจะถูกเก็บไว้สำหรับความเข้ากันได้แบบย้อนหลังกับการติดตั้งท้องถิ่นบางอย่างที่ใช้พวกเขา (รายการพิเศษไม่กี่รายการไม่เจ็บ) ID ผู้ใช้ในช่วง 100–999 ถูกสร้างและลบแบบไดนามิกเมื่อบริการที่ต้องการ ID ผู้ใช้เฉพาะถูกติดตั้งหรือลบออก ช่วงจาก 1,000 เป็นต้นไปสำหรับผู้ใช้ที่เป็นมนุษย์หรือบัญชีอื่น ๆ ที่สร้างโดยผู้ดูแลระบบ เช่นเดียวกันสำหรับกลุ่ม


7

ฉันคิดว่าคุณกำลังค้นหารายชื่อผู้ใช้นี้โดยการตรวจสอบ/etc/passwd? นี่เป็นเรื่องปกติโดยสิ้นเชิง - 'ผู้ใช้' ให้บริการเพื่อดำเนินการชุดของสิทธิ์ที่มีประโยชน์สำหรับการล็อคไม่เพียง แต่ 'ผู้ใช้จริง' แต่ยังโปรแกรมไปยังพื้นที่บางส่วนของระบบของคุณและติดตามสิ่งที่พวกเขาเปลี่ยน

ฉันได้แทรก/etc/passwdไฟล์Raspberry Pi หนึ่งไฟล์ไว้ด้านล่างเพื่อการอ้างอิงของคุณ คุณจะสังเกตเห็นผู้ใช้ntopที่ด้านล่างของไฟล์นี้สร้างโดยโปรแกรมntop(การตรวจสอบเครือข่าย) ในทำนองเดียวกันsshd, gnatsข้อผิดพลาดการรายงาน ฯลฯ

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
pi:x:1000:1000:,,,:/home/pi:/bin/bash
sshd:x:101:65534::/var/run/sshd:/usr/sbin/nologin
ntp:x:102:104::/home/ntp:/bin/false
statd:x:103:65534::/var/lib/nfs:/bin/false
messagebus:x:104:106::/var/run/dbus:/bin/false
usbmux:x:105:46:usbmux daemon,,,:/home/usbmux:/bin/false
lightdm:x:106:109:Light Display Manager:/var/lib/lightdm:/bin/false
smmta:x:107:110:Mail Transfer Agent,,,:/var/lib/sendmail:/bin/false
smmsp:x:108:111:Mail Submission Program,,,:/var/lib/sendmail:/bin/false
Debian-exim:x:109:113::/var/spool/exim4:/bin/false
ntop:x:110:115::/var/lib/ntop:/bin/false

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

คุณสามารถเรียกใช้dpkg --get-selections | grep -v deinstallและเปรียบเทียบกับรายการไฟล์ / etc / passwd ของผู้ใช้หากคุณต้องการ สำหรับคำถามของคุณ: "... โปรแกรมเหล่านี้ทำงานอย่างไรกับ diff UID" คุณสามารถลองด้วยตัวเองได้ เขียนสคริปต์ทุบตีแบบสุ่มtest_fileที่มีบางสิ่งที่ไม่น่ากลัว ( echo "Test") จากนั้นsudo chmod 755 test_file(จึงอ่านและปฏิบัติการโดยทุกคนและสามารถอ่านได้เขียนได้และปฏิบัติการโดยเจ้าของ) แล้วซึ่งจะกำหนดให้กับผู้ใช้sudo chown nobody nobodyจากนั้นเรียกใช้ 'การโปรแกรมtest_fileเพียงแค่ขับรถด้วย nobodyUID
toxefa

2
@ py4on ไม่มาก ... มันวิ่งจากไฟล์ที่มีnobodyUID แต่มันวิ่งไปกับ UID ของคุณ; คุณจะต้องทำให้มันเป็นไฟล์ SUID ในการทำเช่นนั้น แต่บิต SUID จะลดลงหากไฟล์นั้นถูกเรียกใช้พร้อมล่าม
Riking

ตกลงเพราะฉันไม่สามารถแก้ไขความคิดเห็นของฉันด้านบน แต่dpkgบิตยังมีประโยชน์ (หวังว่า) โปรดไม่สนใจส่วนที่เกี่ยวกับการใช้มันเป็นตัวคุณเอง! ไม่ว่าจะด้วย SUID หรือเข้าสู่ระบบในฐานะผู้ใช้คนอื่นเพื่อให้เข้าใจได้
toxefa

3

ผู้ใช้เหล่านี้ถูกสร้างขึ้นเมื่อใด

ในกรณีของสิ่งที่คุณพูดถึงพวกเขาถูกสร้างขึ้นในการติดตั้งระบบ บัญชีผู้ใช้เหล่านี้เป็นแบบทั่วไปบางช่วงหลายทศวรรษย้อนหลัง พวกเขายังได้มาตรฐาน ฐานมาตรฐาน Linux แบ่งออกเป็น:

  • จำเป็นบัญชีผู้ใช้มาตรฐานroot, binและdaemon; และ
  • ตัวเลือกผู้ใช้มาตรฐานบัญชีadm, lp, sync, shutdown, halt, mail, news, uucp, operator, manและnobody

บัญชีผู้ใช้อื่น ๆ ที่กล่าวถึงที่นี่ - pulse, avahi, colordและDebian-exim(ที่จะเลือกหนึ่งจากไฟล์รหัสผ่านของ py4on) - นำเราไปสู่คำถามต่อไปของคุณ

สิ่งเหล่านี้เกี่ยวข้องกับโปรแกรมใหม่ที่กำลังติดตั้งอย่างไร

บัญชีผู้ใช้ที่ไม่ได้มาตรฐานจะถูกสร้างและทำลายโดย "สคริปต์ผู้ดูแล" สำหรับแพ็คเกจต่างๆเนื่องจากแพ็คเกจเหล่านั้นได้รับการติดตั้งและลบทิ้ง บัญชีผู้ใช้จะถูกสร้างขึ้นโดยpostinstสคริปต์ผู้ดูแลแพคเกจซึ่งเรียกใช้getentเพื่อดูว่ามีบัญชีผู้ใช้อยู่แล้วหรือuseraddไม่ ในทางทฤษฎีมันจะถูกลบออกจากสิ่งที่เรียกว่าแพคเกจของสคริปต์ดูแลวิ่งpostrmuserdel

ในทางปฏิบัติบัญชีผู้ใช้สำหรับแพ็คเกจจะไม่ถูกลบ Fedora wiki (qv) อธิบายว่าสิ่งนี้จะเต็มไปด้วยความยากลำบาก ดูDebian bug # 646175สำหรับตัวอย่างของเหตุผลในการดำเนินการซึ่งจะมีการตัดสินใจว่าจะไม่ลบrabbitmqบัญชีผู้ใช้เมื่อแพ็คเกจถูกกำจัดเพื่อแก้ปัญหาdæmonที่ยังคงทำงานภายใต้การปกป้องของบัญชีนั้น

โปรแกรมเหล่านี้เริ่มต้นอย่างไรด้วย UID ที่ต่างกัน

ภายใต้ Unix และ Linux กระบวนการที่ทำงานภายใต้ aegis ของ superuser สามารถเปลี่ยนบัญชีผู้ใช้เป็นอย่างอื่นและรันโปรแกรมเดิมต่อไป แต่ไม่อนุญาตให้ย้อนกลับ (หนึ่งต้องใช้กลไก set-UID)

ระบบการจัดการdæmonทำงานเป็น superuser ข้อมูลการกำหนดค่าของมันระบุว่าdæmonsเฉพาะทำงานภายใต้ aegises ของบัญชีผู้ใช้เฉพาะ:

  • ด้วยระบบ 5 rcสคริปต์ในการ/etc/init.dใช้เครื่องมือตัวช่วยเช่นstart-stop-daemonและ--chuidตัวเลือก
  • กับผู้จัดการบริการ daemontools ครอบครัวrunโทรสคริปต์setuidgid, s6-setuidgid, chpstหรือrunuidที่มีชื่อบัญชีผู้ใช้ มีตัวอย่างของสิ่งนี้ใน/unix//a/179798/5132ที่ตั้งค่าnagiosบัญชีผู้ใช้
  • ด้วยการพุ่งพรวดมีsetuidstanza ในไฟล์งานที่ระบุบัญชีผู้ใช้ นี้ไม่ได้โดยเฉพาะอย่างยิ่งเนื้อดีและบางครั้งหนึ่งต้องการสิ่งที่อธิบายที่/superuser//a/723333/38062
  • ด้วย systemd มีการUser=ตั้งค่าในไฟล์หน่วยบริการที่ระบุบัญชีผู้ใช้

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

มีคำอธิบายที่ยาวพอสมควรว่าเหตุใดการจัดการdæmonที่ดีก็ทำได้เช่นนี้ แต่คุณไม่ได้ถามว่าทำไม เฉพาะเมื่อไหร่อย่างไรและไหน pr précisสั้น ๆ ดังนั้น:

ระบบปฏิบัติการ Unix และ Linux ป้องกันกระบวนการที่ทำงานภายใต้ aegises ของบัญชีผู้ใช้ที่แตกต่างกัน ในอดีตถ้ามีใครสามารถรับdæmonที่วิ่งได้ในฐานะผู้ใช้ระดับสูงคน ๆ หนึ่งสามารถทำทุกอย่างที่คนชอบ dæmonที่ทำงานภายใต้การอุปถัมภ์ของบัญชีที่ไม่มีสิทธิพิเศษนั้นสามารถเข้าถึงไฟล์ไดเรกทอรีอุปกรณ์และกระบวนการที่บัญชีที่ไม่มีสิทธิ์ได้เท่านั้น ระบบของโปรแกรมdæmonที่ไม่น่าไว้วางใจซึ่งกันและกันทั้งหมดที่ทำงานภายใต้ aegises ของบัญชีผู้ใช้ที่แตกต่างกันและไม่สามารถเข้าถึง / ควบคุมไฟล์ / ไดเรกทอรี / กระบวนการ / อุปกรณ์ของอีกคนหนึ่ง

อ่านเพิ่มเติม

  • Jonathan de Boyne Pollard (2014) ดูสคริปต์การเรียกใช้และหน่วยบริการแบบเคียงข้างกัน . คำตอบที่ได้รับบ่อย
  • บัญชีการจัดการสคริปในการดูแล Debian wiki
  • บรรจุภัณฑ์: UsersAndGroups wiki โครงการ Fedora
  • "บทที่ 15 ผู้ใช้และกลุ่ม" ลินุกซ์มาตรฐานข้อมูลจำเพาะฐาน 2.1 2547. กลุ่มมาตรฐานฟรี
  • "9.2 ผู้ใช้และกลุ่ม" คู่มือนโยบาย Debian 2014/11/22 รายชื่อผู้รับจดหมายนโยบาย Debian
  • "37.3. ผู้ใช้มาตรฐาน" RHEL คู่มือการปรับใช้ ฉบับที่ 11 2556. เรดแฮท
  • ผู้ใช้และกลุ่ม ซุ้มประตูวิกิ
  • Carol Hurwitz และ Scott McPeak (2001-02-12) ยกเลิก Daemons Root! . ดอย 10.1.1.120.3567

1

บน Linux เมื่อเราติดตั้งบริการมันจะสร้างผู้ใช้ชื่อบริการหรือคล้ายกับบริการนั้นเพื่อที่จะไม่สามารถเข้าถึงไฟล์อื่น ๆ ได้


1
นี่คือการประชุม แต่ไม่จำเป็นเลยและไม่เป็นสากล ในความเป็นจริงเป็นจริงไม่ว่าร่วมกันอีกต่อไป ...
HalosGhost

1
@HalosGhost เอ๊ะ? ไม่มันเป็นเรื่องธรรมดามากที่จะยังคงแข็งแกร่ง คำตอบนี้ไม่สมบูรณ์ แต่ถูกต้องสมบูรณ์
Gilles 'หยุดความชั่วร้าย'

1
@Gilles ฉันไม่ได้พูด (หรือหมายถึง) ว่ามันไม่ถูกต้อง แต่ส่วนใหญ่จะล้าสมัย ส่วนใหญ่ของบริการวันนี้ (กับแอดเวนต์ของ systemd) เป็นเพียงไฟล์บริการ ตอนนี้ไม่ได้หมายความว่าบัญชีผู้ใช้แบบบริการต่อไม่มีอีกต่อไป พวกเขาทำอย่างแน่นอน ตัวอย่างเช่นมีเพียง 24 บัญชีในระบบทั้งหมดของฉันที่ฉันมีบริการมากมาย
HalosGhost

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