ให้สิทธิ์ sudo ที่ไม่ใช่ผู้ดูแลระบบ แต่ด้วย `~ 'การเป็นบ้านของตัวเอง ~


3

ฉันได้ยินมาเพื่อทราบว่าด้วยความคิดทั่วไปของสิทธิ์น้อยผู้ใช้เหมือน Unix ควรสร้างบัญชีอื่น ไม่มี สิทธิ์ sudo นอกเหนือจากบัญชีในตัว กับ สิทธิ์ sudo ใน Mac สิ่งนี้แปลว่า: ควรสร้างบัญชีพนักงานสำหรับใช้ประจำวันนอกเหนือจากบัญชีผู้ดูแลระบบที่มาพร้อมกับคอมพิวเตอร์ถูกสงวนไว้เฉพาะเมื่อจำเป็นเท่านั้น

สำหรับรูปธรรมให้พูด bruce เป็นพนักงานที่ฉันใช้ทุกวันและ batman เป็นผู้ดูแลระบบซึ่งฉันใช้เมื่อจำเป็นเท่านั้น แต่ฉันจะทำอย่างไรในขณะที่เข้าสู่ระบบ batmanในนามของ bruceนั่นคือจะพูดกับ bruce ของตัวเอง ~ และ $(whoami) ราวกับว่าฉันกำลังเข้าสู่ระบบในฐานะ bruce ด้วยสิทธิพิเศษ?

เพื่อแสดงสิ่งนี้ให้นิยาม /User/bruce/test.sh:

#!/usr/bin/env bash

whoami
cd ~ && pwd
ls ~/Library/Preferences/Preferences/

(ใช่ฉันทำไปแล้ว chmod 744 test.sh ) ฉันเลือกบรรทัดสุดท้ายเพื่อวัตถุประสงค์ในการสร้างภาพประกอบโดยทั่วไปดูเหมือนว่า ~/Library/Preferences/Preferences/ พนักงานไม่สามารถเข้าถึงได้ (เช่นผู้ที่ไม่ใช่ผู้ดูแลระบบ)

สิ่งที่ฉันตั้งใจจะได้รับคือ bruce, /Users/bruceและประสบความสำเร็จ ls เอาท์พุต


ความพยายามครั้งแรกคือว่าจำเป็นถ้าฉันเปิด bruce เทอร์มินัล แต่ login ทุบตีของ batman (เพื่อรับสิทธิ์ sudo) และเรียกใช้

sudo /Users/bruce/test.sh

ฉันเข้าใจ root, /Users/batmanและประสบความสำเร็จ ls การส่งออกของ ~/Library/Preferences/Preferences/แสดงให้เห็นว่าบ้านของแบทแมน; ไม่น่าแปลกใจเลย

หรือ ซ้ำกันเป็นไปได้ (a) ยืนยันว่า sudo -i -u bruce ทำให้ฉันสามารถรันคำสั่งเป็น bruce. แต่ไม่มี! ถ้าฉัน (ดังกล่าวข้างต้น) เปิด bruce เทอร์มินัล login ทุบตีของ batmanและเรียกใช้

sudo -i -u bruce /Users/bruce/test.sh

ฉันเข้าใจ bruce, /Users/bruceและ ls: : Permission denied.

อีกอย่าง ซ้ำกันเป็นไปได้ (b) กล่าวว่า sudo -H -u bruce ใช้บ้านของบรูซ เมื่อฉันเปิดอีกครั้ง bruce เทอร์มินัล login ทุบตีของ batmanและเรียกใช้

sudo -H -u bruce bash /Users/bruce/test.sh

ฉันก็รับเช่นกัน bruce, /Users/bruceและ ls: : Permission denied.


ผู้อ่านอาจคิดว่าคำขอของฉันไม่สมเหตุสมผล แต่ฉันแค่อยากรู้ว่ามันเป็นไปได้ที่จะให้สิทธิ์ sudo แก่พนักงานเป็นการชั่วคราวหรือไม่ ตัวอย่างเช่นถ้าสิ่งนี้สามารถทำได้เมื่อฉันทำสคริปต์สั้น ๆ ฉันไม่จำเป็นต้องหลีกเลี่ยงอีกต่อไป $(whoami) หรือ ~ทำให้มีความยืดหยุ่นมากขึ้น หรือเมื่อฉันเรียกใช้สคริปต์สั้น ๆ ว่าไซต์ใดที่ฉัน googled แนะนำและไม่ต้องแทนที่ $(whoami) โดย bruce และ / หรือ ~ โดย /Users/bruce.

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

อย่างไรก็ตามในปัจจุบันฉันสามารถจำได้หนึ่งอินสแตนซ์เท่านั้น นั่นคือหลังจากที่ฉันในขณะที่เข้าสู่ระบบแบทแมน brew -ed สิ่งที่ใช้ homebrew (เพราะต้องใช้สิทธิ์ sudo) และ logout -ed กลับเป็นบรูซและ brew -ed อย่างอื่น Homebrew ร้องเรียนสิทธิ์ที่ไม่ถูกต้องเป็นจำนวนมากในบางโฟลเดอร์ภายใต้ /usr/localและกระตุ้นให้ฉันวิ่ง sudo chown -R $(whoami) blablabla. สำหรับฉันแล้วมันดูเหมือนว่า brew ได้กำหนดสิทธิ์บางอย่างเป็น batman เป็นของตัวเองและมันทำให้ฉันเป็นบ้าที่จะซ่อมพวกมันทีละคน

คุณจะทำอย่างไรเพื่อให้ได้ช่วงเวลาตัวอย่างเช่นนั้น brew ต้องใช้ sudo ในขณะที่ใช้บัญชีพนักงานหรือไม่? หรือในท้ายที่สุดการปฏิบัติที่บัญชีที่ใช้ในชีวิตประจำวันควรมีสิทธิ์น้อยที่สุดไม่สมจริงเพียงใด?


จากนั้นฉันคิดว่า "การใช้ชีวิตประจำวันควรไม่ใช่ sudoer" แนะนำ BS การปฏิบัติดังกล่าวได้รับการสนับสนุน ที่นี่ และ ที่นี่ . เสียงนี้ดี แต่ในทางปฏิบัติมันถูก จำกัด เกินไป ฉันไม่สามารถติดตั้งแอพได้ ฉันคิดว่าถ้าฉันต้องการ sudo ฉันมีเพียงเพื่อ suแต่อย่างที่คุณพูด homebrew เป็นการออกแบบผู้ใช้คนเดียว
Aminopterin

ประเด็นก็คือการติดตั้งแอพนั้นเป็นกระบวนการที่ไม่บ่อยนักและมีความเสี่ยงมากขึ้นเนื่องจากการติดตั้งแบบผิดปกติสามารถติดตั้งมัลแวร์ได้ดังนั้นสิ่งนี้จะต้องมีความแตกต่างจากการเข้าถึงเอกสารตามปกติ
Mark

@ klanomath ฉันไม่เข้าใจวลีสุดท้ายของคุณคุณมีคำที่พิมพ์ผิดหรือเปล่า? อย่างไรก็ตามฉันมี chown /Users/bruce/Library/Preferences/Preferences/ และก็ไม่เป็นไร!
Aminopterin

คำตอบ:


2

อาจมีข้อบกพร่องในโฮมโฟลเดอร์ของ bruce: การอนุญาตของ ~ / Library / Preferences / Preferences ไม่ถูกต้อง ดังนั้นสคริปต์ไม่ทำงานตามที่คาดไว้

ตรวจสอบผลลัพธ์ต่อไปนี้ในสภาพแวดล้อมของฉันเพื่อเรียกใช้งานสคริปต์ในฐานะผู้ดูแลระบบ ฉันแก้ไขสคริปต์เล็กน้อยและแทนที่ ls ~/Library/Preferences/Preferences โดย ls -la ~/Library/Preferences | grep "loginwindow"

/Users/bruce/bin/sh/test-env.sh
batman
/Users/batman
-rw-------    1 batman  staff     192 27 Nov 13:42 com.apple.loginwindow.plist
-rw-------    1 batman  staff     198 24 Okt 21:43 loginwindow.plist

sudo /Users/bruce/bin/sh/test-env.sh
root
/Users/batman
-rw-------    1 batman  staff     192 27 Nov 13:42 com.apple.loginwindow.plist
-rw-------    1 batman  staff     198 24 Okt 21:43 loginwindow.plist

sudo -i -u bruce /Users/bruce/bin/sh/test-env.sh
bruce
/Users/bruce
-rw-------    1 bruce  staff      95 27 Nov 13:40 com.apple.loginwindow.plist
-rw-------    1 bruce  staff     198 27 Nov 13:36 loginwindow.plist

sudo su bruce
/Users/bruce/bin/sh/test-env.sh
bruce
/Users/bruce
-rw-------    1 bruce  staff      95 27 Nov 13:40 com.apple.loginwindow.plist
-rw-------    1 bruce  staff     198 27 Nov 13:36 loginwindow.plist
$USERNAME = root #check this by entering `env` in the shell additionally

sudo su -l bruce
/Users/bruce/bin/sh/test-env.sh
bruce
/Users/bruce
-rw-------    1 bruce  staff      95 27 Nov 13:40 com.apple.loginwindow.plist
-rw-------    1 bruce  staff     198 27 Nov 13:36 loginwindow.plist
$USERNAME = <empty>

นอกจากนี้ยังมีความเข้าใจผิดที่สำคัญว่า sudo / su ทำงานอย่างไร แบทแมนผู้ดูแลระบบของคุณ ไม่เคย เรียกใช้คำสั่ง "ในนาม" ของผู้ใช้รายอื่น หากคุณป้อน "sudo some_command" หรือ "sudo -i -u user some_command" จะเป็นตำแหน่งที่ผู้ใช้ระดับสูงของผู้ใช้เสมอ (และสิทธิ์ของผู้ดูแลระบบในการเรียกใช้ sudo ตามที่กำหนดโดยไฟล์ sudoers และ "ทำให้ตัวเองเป็นผู้ใช้ super") msgstr "เรียกใช้คำสั่งสำเร็จในนามของผู้ใช้รายอื่น".

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

ตัวอย่าง (ควบคุมเว็บเซิร์ฟเวอร์ Apache):

bruce ALL=(ALL) /usr/sbin/apachectl

หรือไม่มีข้อกำหนดในการป้อนรหัสผ่านหลังจากดำเนินการ sudo apachectl เป็นบรูซ:

bruce ALL=(ALL) NOPASSWD: /usr/sbin/apachectl

หรือแก้ไขสคริปต์อย่างเหมาะสมเพื่อให้อยู่ในขอบเขตของ bruce

ที่กล่าวว่าคำแนะนำ / การปฏิบัติที่ "ผู้ใช้รายวันไม่ควรเป็น sudoer" ยังคงใช้ได้


Homebrew เป็นสัตว์ร้ายตัวอื่น: มันถูกออกแบบมาให้ติดตั้งโดยผู้ใช้เพียงคนเดียว - ผู้ใช้ที่เป็นผู้ดูแลระบบ ปพลิเคชัน / ปฏิบัติการส่วนใหญ่ที่จัดทำโดยสภาพแวดล้อม homebrew สามารถเปิดตัวโดยผู้ใช้มาตรฐานหลังจากการปรับเปลี่ยน $ PATH ของผู้ใช้แม้ว่าหรือใช้เส้นทางเต็ม

มีวิธีการหลายวิธีในการตั้งค่าโฮมบรูว์เป็นสภาพแวดล้อมที่มีผู้ใช้หลายคน (เช่น การตั้งค่าผู้ใช้หลาย Homebrew ของฉัน ) ฉันไม่รู้ว่าสิ่งนี้ยังใช้ได้กับ OS X systems / brew เวอร์ชันใหม่กว่าหรือไม่


ฉันอาจทำให้สับสนในขณะที่พยายามใช้ chown เพื่อแก้ไขความผิดปกติ brew จะช่วยให้ ป.ล. bruce และ batman มีการวางแผนเพราะฉันไม่ต้องการเปิดเผยชื่อของฉันขอโทษที่ทำให้การอ่านยากขึ้น (ถ้ามี) แม้ว่าฉันคิดว่าฉันไม่ได้ทำผิดแทนที่พวกเขา
Aminopterin

@Aminopterin ;-) ถ้าคุณไม่ต้องการเปิดเผยชื่อผู้ใช้ของคุณมันจะสะดวกกว่าและทุกคนก็เข้าใจได้ทันทีเพื่อใช้ ผู้ดูแลระบบ (ผู้ใช้ผู้ดูแลระบบ), ผู้ใช้งาน (ผู้ใช้มาตรฐาน) และรูท (ซึ่งเป็นชื่อที่แก้ไขแล้ว)
klanomath

ฮ่าฮ่าฉันคิดว่าก่อนหน้านี้ แต่ฉันกลัวผู้มาใหม่ admin และ user เป็น ตามตัวอักษร , ดังนั้นฉันคิดว่า bruce และ batman ชัดเจน --- อาจเป็นแค่ฉัน: P
Aminopterin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.