วัตถุประสงค์ของผู้ใช้ 'ไม่มีใคร' คืออะไร?


93

หลังจากฉันอ่านรายชื่อผู้ใช้ที่เป็นมนุษย์ทั้งหมดฉันสังเกตเห็นว่ามีบัญชีผู้ใช้ชื่อ 'ไม่มีใคร' ในระบบ Ubuntu ของฉัน

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

sudo su nobody

ไม่มีใคร

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


8
โปรดทราบว่าเมื่อคุณเข้าสู่ระบบโดยใช้รหัสผ่านของคุณคุณกำลังใช้รหัสผ่านของคุณสำหรับขั้นตอน sudo ไม่ใช่สำหรับบัญชีไม่มีใคร (และเหตุผลที่มันเป็นเพราะ superuser สามารถ su ให้กับทุกคนโดยไม่จำเป็นต้องใส่รหัสผ่านของพวกเขา ที่กล่าวถึงด้านล่างฉันเชื่อว่าอย่างน้อยใน RH-Deriv ถ้าเปลือกของไม่มีใครตั้งค่าเป็น / sbin / nologin คุณยังคงไม่สามารถเข้าสู่ระบบได้แม้จะใช้ superuser (ราก root หรือที่รู้จัก)
Foon

เป็นกรณีเริ่มต้นตอนนี้ (18.04+?) sudo su nobodyreturn บัญชีนี้ไม่สามารถใช้งานได้ในขณะนี้ เนื่องจากเชลล์สำหรับผู้ใช้nobody ถูกตั้งค่าเป็น/usr/sbin/nologin ( getent passwd nobody)
Pablo

@sarnold - โปรดดูความคิดเห็นของฉันในคำตอบที่ฉันเชื่อว่าคุณยิ่งทำให้ มันเป็นคำตอบที่ไม่ดีนักเนื่องจากมันไม่มีเหตุผลหรืออ้างแหล่งข่าว นอกจากนี้มันจะไปขัดกับทุกสิ่งที่ฉันรู้เกี่ยวกับบัญชีไม่มีใครและวิธีการทำงานของ NFS: โดยroot_squashที่มันจะจับคู่กับใครบางคนในระบบระยะไกล ตรงข้ามกับคำตอบนี้
vidarlo

คำตอบ:


85

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

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

คุณสามารถอ่านเพิ่มเติมเกี่ยวกับผู้ใช้ที่ไม่มีใน Ubuntu Wiki:

วิธีตอบรับการติดตามของคุณ:

ทำไมฉันไม่สามารถเข้าถึงบัญชีนี้ด้วยsu nobody?

sudo grep nobody /etc/shadowจะแสดงให้คุณเห็นว่าไม่มีใครไม่มีรหัสผ่านและคุณไม่สามารถทำได้suหากไม่มีรหัสผ่านบัญชี วิธีที่สะอาดที่สุดคือการsudo su nobodyแทน นั่นจะทำให้คุณอยู่ในshเปลือกที่รกร้าง

คุณสามารถยกตัวอย่างเฉพาะเมื่อมีการระบุให้ใช้บัญชีนี้ได้หรือไม่?

เมื่อสิทธิ์ไม่จำเป็นสำหรับการดำเนินงานของโปรแกรม สิ่งนี้โดดเด่นที่สุดเมื่อไม่มีกิจกรรมดิสก์ใด ๆ เลย

ตัวอย่างจริงของเรื่องนี้คือmemcached(แคช / ฐานข้อมูล / สิ่งสำคัญในคีย์ - ค่า) นั่งอยู่บนคอมพิวเตอร์ของฉันและเซิร์ฟเวอร์ของฉันทำงานภายใต้บัญชีไม่มีใคร ทำไม? เพราะมันไม่จำเป็นต้องมีสิทธิ์ใด ๆ และการให้บัญชีที่มีการเข้าถึงเพื่อเขียนไฟล์ก็จะเป็นความเสี่ยงที่ไม่จำเป็น


อีกสองสิ่งถ้าคุณสามารถอธิบายได้: 1) ทำไมฉันไม่สามารถเข้าถึงบัญชีนี้ด้วยsu nobodyและ 2) คุณสามารถยกตัวอย่างเฉพาะเมื่อมีการระบุให้ใช้บัญชีนี้ได้หรือไม่
Radu Rădeanu

@ RaduRădeanu 1) ฉันเดาว่านั่นเป็นเพราะมันไม่มีรหัสผ่านและเมื่อคุณsuเป็นผู้ใช้ธรรมดาคุณต้องให้รหัสผ่านของผู้ใช้เป้าหมาย ลองsudo -iแล้วsu nobodyจากเปลือกราก (ซึ่งจะไม่ต้องใช้รหัสผ่าน)
CVn

2
Network File Systemแม็พrootกับnobodyรูทโลคัลเพื่อไม่สามารถเข้าถึงทุกสิ่งเช่นรูทรีโมตสามารถ
Sylwester

1
@ RaduRădeanuโปรดทราบประวัติการแก้ไข เมื่อฉันทดสอบคำสั่งดั้งเดิม (ไม่ใช่สิ่งที่มี) สิ่งนี้เดิมฉันสิ้นสุดในเปลือก dash (/ bin / sh) แต่ฉันไม่สามารถทำซ้ำว่าตอนนี้ การแก้ไขดั้งเดิมของคุณไม่เป็นไร ฉันไม่ใช่คนที่เปลี่ยนมัน
Oli

1
ฉันมักจะคิดว่าnobodyเป็นจริง / ใช้เป็นหลักโดย NFS เป็นรัฐlinuxstandardbase
dgonzalez

29

ใน Unix หลายรุ่น "none" เป็นชื่อทั่วไปของบัญชีผู้ใช้ที่ไม่มีไฟล์อยู่ในกลุ่มที่ไม่มีสิทธิพิเศษและไม่มีความสามารถยกเว้นสิ่งที่ผู้ใช้อื่น ๆ ทุกคนมี

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

ข้อมูลที่นำมาจากhttp://en.wikipedia.org/wiki/Nobody_(username)


-1: nobodyเป็นอย่างเคร่งครัดสำหรับ NFS และไม่ควรใช้โดยบริการอื่น ๆ และไม่แน่นอนโดยผู้ดูแลระบบ ขอบคุณ
sarnold

22

ไม่มีผู้ใช้ที่สำรองไว้สำหรับ NFS เท่านั้น

Anwers ด้านบนค่อนข้างผิดเพราะพวกเขาคิดว่าnobodyเป็นรหัสผู้ใช้สไตล์ทั่วไป / ไม่ระบุชื่อ / แขก

ใน ID การเข้าถึงแบบไม่ระบุชื่อผู้ใช้สไตล์ผู้เยี่ยมชม / UNIX / Linux ไม่มีอยู่และนี่เป็นคำแนะนำที่ไม่ดี:

  • "เป็นเรื่องธรรมดาที่จะเรียกใช้ daemons nobodyโดยเฉพาะอย่างยิ่งเซิร์ฟเวอร์เพื่อจำกัดความเสียหายที่สามารถทำได้โดยผู้ใช้ที่เป็นอันตรายซึ่งได้รับการควบคุม " เนื่องจากสาเหตุดังต่อไปนี้: " อย่างไรก็ตามประโยชน์ของเทคนิคนี้จะลดลงหากมากกว่า daemon หนึ่งตัวถูกเรียกใช้เช่นนี้เพราะการได้รับการควบคุมจากหนึ่ง daemon จะให้การควบคุมพวกมันทั้งหมด "
  • " ตัวอย่างจริงของสิ่งนี้คือmemcached(คีย์ - ค่าในหน่วยความจำ / ฐานข้อมูล / สิ่งของ), นั่งอยู่บนคอมพิวเตอร์ของฉันและเซิร์ฟเวอร์ของฉันที่ทำงานภายใต้nobodyบัญชีเพราะเหตุใดเพราะมันไม่จำเป็นต้องมีสิทธิ์ใด ๆ และให้มัน บัญชีที่มีสิทธิ์เข้าถึงเพื่อเขียนไฟล์จะเป็นความเสี่ยงที่ไม่จำเป็น "

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

นั่นคือถ้าทำแผนที่ผู้ใช้ / รหัสคือการติดตั้งสำหรับการส่งออกต้นไม้ NFS, ทุกnobodyไฟล์ในการส่งออกจะปรากฏเป็นเจ้าของโดย วัตถุประสงค์ของการนี้คือการป้องกันไม่ให้ผู้ใช้ทุกคนในระบบการนำเข้าจากการเข้าถึงไฟล์เหล่านั้น (ยกเว้นกรณีที่พวกเขามีสิทธิ์ "อื่น ๆ") เช่นไม่มีของพวกเขา (ยกเว้นroot) nobodyสามารถ

ดังนั้นจึงเป็นความคิดที่ดีมากที่จะใช้nobodyสำหรับการใด ๆเพื่อวัตถุประสงค์อื่นเพราะจุดประสงค์ของมันคือการเป็น User ID / ชื่อผู้ใช้สำหรับไฟล์ที่จะต้องไม่สามารถเข้าถึงได้เพื่อใคร

รายการ Wiki นั้นผิดมากเช่นกัน

การปฏิบัติ Unix / Linux คือการสร้างบัญชีใหม่สำหรับแต่ละ "โปรแกรม" หรือประยุกต์ใช้ในพื้นที่ที่ต้องการโดเมนการควบคุมการเข้าถึงที่แยกจากกันและไม่เคยนำมาใช้nobodyนอก NFS


คำตอบนี้ไม่ได้อ้างอิงแหล่งข้อมูลใด ๆ และชัดเจนในทางตรงกันข้ามหลายคำตอบอื่น ๆ ซึ่งทำอ้างอิงแหล่งข้อมูล เงินรางวัลปัจจุบันระบุว่าคำตอบนี้ดีมากโดยเฉพาะในกรณีที่ควรอ้างอิงบางแหล่งหรือรายการมีเหตุผลบางอย่าง
vidarlo


@ mook765 ส่วนนั้นก็ใช้ได้ ย่อหน้าเกี่ยวกับ NFS อย่างไรก็ตามฉันไม่ได้งุ่มง่าม ตัวอย่างเช่นด้วยroot_squashon rootถูกแม็พกับผู้ใช้nobodyดังนั้นไฟล์ที่มีเจ้าของnobodyจะไม่สมเหตุสมผล นอกจากนี้คำแถลงว่าไฟล์ที่ไม่มีใครเป็นเจ้าของนั้นไม่สามารถเข้าถึงได้กับทุกคนที่มีเหตุผลเล็กน้อยเนื่องจากสิทธิ์ของไฟล์จะแยกออกจากการเป็นเจ้าของใน UNIX ผมไม่ได้บอกว่าทุกอย่างในคำตอบที่ไม่ถูกต้องเพียงว่าองค์ประกอบของมันทำให้รู้สึกน้อยหรือไม่มีฉัน :)
vidarlo

1
@vidarlo nobodyคำตอบนี้ไม่ได้บอกว่าคุณควรตั้งค่าไฟล์ที่จะเป็นเจ้าของโดย มันบอกคุณว่าnobodyสำหรับ NFS ที่จะใช้เมื่อการอนุญาตการแมปและนั่นคือจุดที่สำคัญที่สุดสำหรับฉัน วิธี NFS ใช้nobodyเป็นที่น่าสนใจน้อยกว่าความเป็นจริงที่ว่ามันไม่nobodyใช้ ขอบคุณ
sarnold

@sarnold คำตอบยังคงผิดธรรมดาในเรื่องนี้ในความคิดของฉัน หากผู้ใช้อ่านคำตอบและman exportsเขาอาจสับสนมาก
vidarlo

17

nobodyผู้ใช้ถูกสร้างขึ้นโดยเริ่มต้นในการติดตั้งใหม่ (การตรวจสอบสก์ท็อปบน Ubuntu 13.04)

ในหลายตัวแปร * nix nobodyเป็นชื่อทั่วไปของบัญชีผู้ใช้ที่ไม่มีไฟล์อยู่ในกลุ่มที่ไม่มีสิทธิ์และไม่มีความสามารถยกเว้นสิ่งที่ผู้ใช้อื่นมี ( nobodyผู้ใช้และกลุ่มไม่มีรายการใด ๆ ใน/etc/sudoersไฟล์) .

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

ที่มา : Wikipedia - ไม่มีใคร (ชื่อผู้ใช้)


nobodyกระบวนการถือหุ้นจะสามารถส่งสัญญาณไปยังคนอื่น ๆ และแม้กระทั่ง ptrace แต่ละอื่น ๆ ในลินุกซ์มีความหมายว่าเป็นกระบวนการที่ไม่มีใครเป็นเจ้าของสามารถอ่านและเขียนหน่วยความจำของกระบวนการที่ไม่มีใครเป็นเจ้าของอีก

นี่คือรายการตัวอย่างของnobodyผู้ใช้ใน/etc/passwdไฟล์:

alaa@aa-lu:~$ grep nobody /etc/passwd
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh

ตามที่คุณอาจสังเกตเห็นว่าnobodyผู้ใช้มี/bin/shเปลือกเข้าสู่ระบบและ/nonexistentเป็นไดเรกทอรีบ้าน ตามชื่อที่แนะนำ /nonexistentไดเรกทอรีไม่มีอยู่โดยค่าเริ่มต้น

หากคุณเป็นคนหวาดระแวงคุณสามารถตั้งnobodyค่าเปลือกเริ่มต้นเป็นเช่น /usr/sbin/nologinนั้นปฏิเสธการเข้าสู่ระบบ ssh สำหรับnobodyผู้ใช้

ที่มา : LinuxG.net - ผู้ใช้งาน Linux และ Unix


คำตอบนี้จะสมควรได้รับ +1 หากลบวรรคที่ไม่ถูกต้องจาก Wikipedia ขอบคุณ
sarnold

3

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


0

การแก้ไขเล็กน้อยสำหรับ ' ผู้ใช้ไม่มีใครสงวนไว้สำหรับ NFS เท่านั้น 'คำตอบ nobodyผู้ใช้ยังถูกนำมาใช้สำหรับบรรจุด้อยโอกาสกับม้าผูกในขณะนี้

สิ่งนี้นำมาจาก systemd-nspawn โดยเฉพาะตัวเลือก --bind mount:

โปรดทราบว่าเมื่อใช้ตัวเลือกนี้ร่วมกับ - ผู้ใช้ส่วนตัวจุดเชื่อมต่อที่ได้จะเป็นของผู้ใช้ทั้งหมด นั่นเป็นเพราะการเมานต์และไฟล์และไดเรกทอรียังคงเป็นของผู้ใช้โฮสต์และกลุ่มที่เกี่ยวข้องซึ่งไม่มีอยู่ในคอนเทนเนอร์จึงปรากฏขึ้นภายใต้สัญลักษณ์ตัวแทน UID 65534 (ไม่มีใคร) หากสร้างการเชื่อมต่อ bind ดังกล่าวแนะนำให้ทำให้เป็นแบบอ่านอย่างเดียวโดยใช้ --bind-ro =

systemd-nspawn

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