Score:0

sudo เพื่ออนุญาตให้ติดตั้ง apt-get ของแพ็คเกจระยะไกล แต่ห้ามใช้คำสั่งโดยพลการ

ธง cn

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

ฉันจะได้รับ บาง ผ่านทาง /etc/sudoers สมมติว่าฉันมีสิ่งนี้ในไฟล์ /etc/sudoers

รูท ALL=(ALL:ALL) ALL
จอห์น ALL=NOPASSWD:/usr/bin/apt,/usr/bin/apt-get

จากนั้นจอห์นดูเหมือนจะวิ่งได้จำกัด ฉลาด และ ฉลาดรับ ทาง ซูโด. แต่... ดูเหมือนจะมีทางหนี ฉลาดรับ ไปยังเชลล์ในฐานะรูท (https://blog.ikuamike.io/posts/2021/package_managers_privesc/):

  • พิมพ์ sudo apt-get บันทึกการเปลี่ยนแปลง apt และกด Enter
  • พิมพ์เครื่องหมายอัศเจรีย์ ! และกด Enter
  • ตอนนี้คุณอยู่ในเชลล์ในฐานะรูทและสามารถทำอะไรก็ได้

หรือเรียกใช้ด้านล่าง:

sudo apt update -o APT::Update::Pre-Invoke::="/bin/bash"

ถ้ามันสร้างความแตกต่างได้ นี่คือใน Docker


ถูกโพสต์ไว้ที่ https://superuser.com/q/1698692/315568แต่ฉันคิดว่านั่นเป็นไซต์ที่ไม่ถูกต้อง เนื่องจากไซต์นี้ไม่ใช่ (เพียง) สำหรับเครื่องของฉัน แต่สำหรับไซต์อื่น

cn flag
Bob
หากคุณไม่ไว้วางใจผู้ใช้ john เขาไม่ควรได้รับสิทธิ์ sudo ใด ๆ คุณกำลังพยายามปิดช่องทางการละเมิดเพียงช่องทางเดียว แต่ความจริงก็คือ ตัวอย่างเช่น john สามารถสร้างแพ็คเกจที่กำหนดเองซึ่งติดตั้งเครื่องมือใดๆ ก็ตามที่เขาต้องการเพื่อหลีกเลี่ยงการควบคุมการเข้าถึงของคุณด้วย `sudo apt install ./my-rootkit.deb`
Score:1
ธง cn
Bob

เดอะ ซูโดเออร์ คู่มือยังมีทั้งส่วนวิธีนโยบายที่เหมาะสมในการ /etc/sudoers ไฟล์คอนฟิกูเรชัน (หรือแน่นอน ไฟล์นโยบายดรอปอินที่มีให้) สามารถนำเสนอได้อย่างจำกัด ป้องกันการหลบหนีของเปลือก กับ ข้อจำกัดและ NOEXEC ตัวเลือก.

นั่นอาจเป็นเรื่องทั่วไปมากกว่า การสร้างสคริปต์ตัวตัดคำ สำหรับยูทิลิตี้โดยเฉพาะ

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

และ

โนเอ็ก
ระบบจำนวนมากที่สนับสนุนไลบรารีที่ใช้ร่วมกันมีความสามารถในการแทนที่ฟังก์ชันไลบรารีเริ่มต้นโดยชี้ตัวแปรสภาพแวดล้อม (โดยปกติคือ LD_PRELOAD) ไปยังไลบรารีที่ใช้ร่วมกันสำรอง ในระบบดังกล่าว sudo's โนเอ็ก สามารถใช้ฟังก์ชันการทำงานเพื่อป้องกันไม่ให้โปรแกรมที่รันโดย sudo เรียกใช้โปรแกรมอื่นๆ ได้ บันทึก, ... ...
การเปิดใช้งาน โนเอ็ก สำหรับคำสั่ง ใช้ NOEXEC แท็กตามที่ระบุไว้ในส่วนข้อมูลจำเพาะผู้ใช้ด้านบน นี่คือตัวอย่างอีกครั้ง:
กระท่อมแอรอน = NOEXEC: /usr/bin/more, /usr/bin/vi
สิ่งนี้ทำให้ผู้ใช้ aaron สามารถเรียกใช้ได้ /usr/bin/อื่นๆ และ /usr/bin/vi เมื่อเปิดใช้งาน noexec สิ่งนี้จะป้องกันไม่ให้คำสั่งทั้งสองนั้นดำเนินการคำสั่งอื่น (เช่นเชลล์)

ดังนั้นในตัวอย่างของคุณ:

จอห์น ALL=NOEXEC:NOPASSWD: /usr/bin/apt,/usr/bin/apt-get

ควรจะเพียงพอที่จะอนุญาตให้ผู้ใช้ จอห์น วิ่ง ฉลาด และ ฉลาดรับ ด้วยสิทธิ์ขั้นสูง โดยไม่ต้องถามรหัสผ่านและไม่มีความสามารถในการใช้ shell Escape หรือกลอุบายอื่น ๆ ที่เกินขอบเขตอำนาจของเขา

โปรดทราบว่าการทำเช่นนั้นอาจมีผลลัพธ์ที่ไม่ได้ตั้งใจเช่นกัน ตัวอย่างเช่น หลังจากติดตั้งบริการใหม่ apt อาจไม่สามารถเริ่มบริการที่เกี่ยวข้องได้

Score:0
ธง cn

นี่คือความพยายามของฉัน ดังนั้นผู้ใช้จะถูกใช้ ซูโด เพื่อเรียกใช้สคริปต์นี้ แต่ไม่มีสคริปต์อื่น

#!/bin/bash

# สคริปต์นี้รวม "apt update" และ "apt install" แต่พยายามห้าม
# คำสั่งโดยพลการที่ผู้ใช้สามารถเรียกใช้ในฐานะรูท มันมีอยู่
# เนื่องจากการอนุญาตให้ผู้ใช้ `sudo apt ` จะอนุญาต
# `sudo apt changelog apt` ซึ่งรัน `less` ซึ่งจะอนุญาต
# ผู้ใช้ที่จะหลบหนีเข้าไปในเปลือก

# แต่ยังไม่สามารถให้สิทธิ์เข้าถึง `apt update` และ `apt install` ได้อย่างเต็มที่
# เนื่องจากมี 3 วิธีที่สามารถใช้เรียกใช้คำสั่งโดยพลการ
#
# 1 ผ่านตัวเลือกในตัวแปรสภาพแวดล้อม APT_CONFIG
# 2. ผ่านตัวเลือกบรรทัดคำสั่ง เช่น '-o' เพื่อระบุสคริปต์ที่จะรัน
# 3. ผ่านแพ็คเกจในเครื่องที่มีสคริปต์การติดตั้งแบบกำหนดเอง
#
# ดังนั้นสคริปต์นี้จึงพยายามห้ามความเป็นไปได้ 3 ประการข้างต้น

# 1 ล้างตัวเลือกใด ๆ ในตัวแปรสภาพแวดล้อม APT_CONFIG
ส่งออก APT_CONFIG=''

# 2. และ 3. ห้ามตัวเลือกบรรทัดคำสั่งหรือแพ็คเกจในเครื่อง
สำหรับ var ใน $*
ทำ
   ถ้า [[ ${var::1} == "/" || ${var::1} == "." || ${var::1} == "-" ]]
   แล้ว
     echo "E: ห้ามติดตั้งแพ็คเกจในเครื่องหรือส่งตัวเลือก"
     ทางออก 1
   ไฟ
เสร็จแล้ว

# อัปเดตและติดตั้งแพ็คเกจที่ร้องขอ
การปรับปรุงที่เหมาะสม
ฉลาดติดตั้ง -y $*

โพสต์คำตอบ

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