Score:4

รูทจะเริ่มกระบวนการที่รูทเท่านั้นที่สามารถฆ่าได้อย่างไร

ธง vn

ง่ายต่อการเริ่มต้นกระบวนการที่พื้นหลังหรือทำให้เป็น ระบบ บริการ.

อย่างไรก็ตาม หากฉันต้องการเริ่มกระบวนการตรวจสอบกิจกรรมบนเครื่อง Linux กระบวนการนั้นจะตกเป็นเป้าหมายของการโจมตีหากผู้ใช้คนใดต้องการทำสิ่งที่ไม่ดี ระบบจะฆ่ากระบวนการนี้ก่อน แม้ว่าจะเป็นเพียงขั้นตอนเดียวก็ตาม ซูโดเอ่อ หรือ ล้อ ผู้ใช้เพียงแค่ดำเนินการ ฆ่า หรือ systemctl หยุด.

มีวิธีการบังคับใช้กระบวนการที่เท่านั้น ราก ฆ่าได้ไหม


พวกแค่คิดอย่างนั้น rsyslog บริการอาจถูกฆ่าได้ คุณควรรับทราบว่า Linux มีความเสี่ยงเพียงใด เหมือนนักบินสามารถปิดกล่องดำได้ สายการบินใดปล่อยให้สิ่งนี้เกิดขึ้น? หรือมีใครให้รายชื่อนักบินเพื่อขัดขวางพวกเขาจากการทำทุกอย่างที่ทำได้เพื่อช่วยเครื่องบิน? แน่นอน นักบินสามารถทำให้เครื่องบินตกได้ แต่กล่องดำจะบันทึกมันไว้

ข้อเสนอของฉันในรายการแบนนั้นถูกต้องตามกฎหมายจากมุมมองด้านความปลอดภัย แม้ว่ามันอาจทำให้คุณประหลาดใจก็ตาม ดังนั้นอย่าพยายามโทษคนที่ตั้งคำถาม ตกลงไหม?

cn flag
ความคิดเห็นไม่ได้มีไว้สำหรับการอภิปรายเพิ่มเติม การสนทนานี้[ย้ายไปแชท](https://chat.stackexchange.com/rooms/129511/discussion-on-question-by-george-y-how-can-root-start-a-process-that- เท่านั้น-root-c).
Score:30
ธง za

การมีสิทธิ์ sudo/wheel แบบไม่จำกัด ใครก็ตามจะสามารถเลิกทำทุกสิ่งที่คุณทำไปแล้วได้ แม้ว่าคุณจะสามารถบรรลุสิ่งนี้ได้โดยการลบความเป็นไปได้ที่จะฆ่ากระบวนการโดยตรง เช่น กับ sudo ฆ่าซึ่งอาจยังคงหลีกเลี่ยงได้โดยใช้คำสั่ง sudoed อื่น ๆ หรือคุณล็อกตัวเองจากการบริหาร

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

+netmgr /usr/sbin/ifup, /usr/sbin/ifdown

(ใช้ visudo -f /etc/sudoers.d/netmgr เพื่อใส่ลงในไฟล์เสริม sudoers)

ด้วยวิธีนี้คุณสามารถอนุญาตให้ผู้ใช้เรียกใช้เท่านั้น sudo /usr/sbin/ifup และ sudo /usr/sbin/ifdownแต่ไม่มีคำสั่ง sudo อื่น ๆ มีตัวอย่าง คำแนะนำ และข้อควรพิจารณาด้านความปลอดภัยอื่นๆ มากมาย ผู้ชาย. อ่านมัน!

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

George Y avatar
vn flag
น่าเสียดายที่ฉันต้องอนุญาตให้พวกเขาใช้ 'kill' หรือ 'systemctl stop' เพราะมีบางแอปพลิเคชันที่ต้องการสิทธิ์พิเศษเหล่านี้ในการทำงาน ฉันแค่ต้องการโปรแกรมมอนิเตอร์บางตัวที่ปฏิเสธสัญญาณหยุด
George Y avatar
vn flag
อีกตัวอย่างหนึ่งคือฉันเพิ่มทริกเกอร์ในการตั้งค่า `/etc/bashrc` - ฉันต้องการให้มันได้รับการปกป้อง แต่ฉันไม่สามารถแบนตัวแก้ไขที่กำลังทำงานอยู่ เช่น `vim` หรือ `nano`
Michael Hampton avatar
cz flag
@GeorgeY หากมีคนสามารถเข้าถึงรูทได้ พวกเขาสามารถฆ่ากระบวนการของคุณได้ หากมีคน _actually_ ทำเช่นนี้และไม่ยอมหยุด แสดงว่าวิธีแก้ปัญหาไม่ใช่ทางเทคนิค คุณต้องให้ฝ่ายบริหารเข้ามาเกี่ยวข้อง
Nikita Kipriyanov avatar
za flag
@GeorgeY คุณไม่สามารถทำให้กระบวนการ unkillable โดย root รูทคือพระเจ้า คุณไม่สามารถปิดการใช้งานมันได้ และ sudo ทำให้คุณรูตได้อย่างมีประสิทธิภาพ วิธีแก้ปัญหาเดียวที่ฉันเห็นคือการไม่ให้สิทธิ์รูท สิ่งที่ฉันแนะนำคือการใช้ความสามารถในตัวของ sudo; หากยังไม่เพียงพอ คุณต้องคิดค้น sudo ของคุณเอง เขียนแอปพลิเคชันพร็อกซีสำหรับ kill หรือ systemctl stop ซึ่งจะกรองสิ่งที่ห้ามไม่ให้ฆ่า หรือดีกว่า ซึ่งอนุญาตให้ฆ่าได้เฉพาะบางอย่าง เป็นต้น คุณต้องห่อ * ทั้งหมด * สิ่งที่คุณต้องการให้ผู้ใช้ที่ไม่ใช่รูทเรียกได้
Matthew Ife avatar
jo flag
หากคุณมีรูท คุณสามารถดำเนินการให้แย่ลงไปอีกขั้นหนึ่งและแทนที่กระบวนการดังกล่าวด้วยกระบวนการที่รายงานว่าทุกอย่างปกติดี แต่ยังให้คุณดำเนินกิจกรรมชั่วร้ายต่อไปได้
George Y avatar
vn flag
@Nikita Kipriyanov แน่นอนฉันจะไม่ให้พวกเขาเข้าถึง 'root' จริง ๆ แล้วฉันให้สิทธิ์ 'wheel' แก่พวกเขา แต่พวกเขาก็ยังสามารถฆ่ากระบวนการใด ๆ โดยไม่แยแส สิ่งที่ฉันต้องการคือพวกเขาไม่สามารถฆ่ากระบวนการบางประเภท เช่น เริ่มต้นโดยผู้ใช้รูทหรือไฟล์ใน `/root`
Nikita Kipriyanov avatar
za flag
"รูท" และ "วงล้อ" เป็นสิทธิพิเศษที่เหมือนพระเจ้าทุกประการ ทนกับมัน. หากคุณไม่ต้องการให้พวกเขารูท อย่าให้ล้อ ระยะเวลา.
sa flag
@GeorgeY แล้วอะไรจะหยุดพวกเขาเพียงแค่เรียกใช้ `sudo bash` แล้วรูทล่ะ
raj avatar
ye flag
raj
@GeorgeY หากคุณต้องการให้ผู้ใช้ **ซึ่งเป็นรูทอย่างมีประสิทธิภาพ** สามารถฆ่ากระบวนการใด ๆ ยกเว้นไฟล์ใดไฟล์หนึ่ง หรือแก้ไขไฟล์ใด ๆ ยกเว้นไฟล์ใดไฟล์หนึ่ง คุณต้องออกแบบเคอร์เนลของคุณเองที่มีความสามารถดังกล่าว :) Linux ไม่ทำงานด้วยวิธีนี้
George Y avatar
vn flag
@raj ดังนั้นนี่คือวิธีที่ Linux ปูทางไปสู่อาชญากรรมภายในเช่นการรั่วไหลของข้อมูล? :)
mt flag
@GeorgeY นั่นมันหลอก: มีปัญหาสิทธิ์แบบเดียวกันนี้ใน Windows โดยมีรายละเอียดที่แตกต่างกันเล็กน้อยระหว่าง ADMINISTRATOR/LOCALSYSTEM และผู้ดูแลระบบโดเมน และการรั่วไหลของข้อมูลมักเกิดขึ้นโดยไม่มีการเพิ่มระดับสิทธิ์เลย โดยการประนีประนอมกับเว็บแอปที่เข้าถึงข้อมูลได้
mt flag
(การมีผู้ดูแลโดเมนนั้นสนุกยิ่งกว่าเพราะคุณสามารถเรียกใช้โปรแกรมใดก็ได้บนคอมพิวเตอร์เครื่องใดก็ได้ในองค์กร!)
mt flag
.. ทางออกที่คุณต้องการอาจเป็นไปในทิศทางอื่นหรือไม่? หากคุณต้องการให้ผู้ใช้ฆ่าเฉพาะบางกระบวนการ ให้ระบุกระบวนการเหล่านั้นและทำให้ *พวกเขา* รันโดยไม่ใช่รูท หรือเรียกใช้งานในคอนเทนเนอร์หรือ VM?
Nikita Kipriyanov avatar
za flag
@ pjc50 สิ่งที่ตลกคือผู้เขียนคำถามดื้อรั้นปฏิเสธที่จะทำเช่นนี้แม้ว่าทุกคนจะแนะนำเขาก็ตาม แทนที่จะทำตามแนวทางของ Linux ในการทำสิ่งต่าง ๆ ใน Linux เขาคิดว่านี่เป็นความผิดของ Linux ที่ไม่ได้ทำงานตามที่เขาควรจะทำงาน
Score:18
ธง in
bta

คุณไม่สามารถให้อำนาจใครแล้วห้ามไม่ให้ใช้มันได้ คุณต้องเน้นพลังที่คุณให้พวกเขาอย่างแคบลงเพื่อรวมเฉพาะสิ่งที่คุณต้องการให้มี

ในความคิดเห็น คุณพูดว่า:

ฉันต้องยอมให้ใช้ ฆ่า หรือ systemctl หยุด เพราะ มีบางแอปพลิเคชันที่ต้องการสิทธิพิเศษเหล่านี้ ทำงานของพวกเขา

ไม่ได้หมายถึงสิ่งเหล่านั้น ผู้ใช้ ต้องการเข้าถึงคำสั่งเหล่านั้นเท่านั้น แอพพลิเคชั่น. ผู้ใช้มีสิทธิ์จำกัดในการเรียกใช้ sudo ./someprogram และเมื่อโปรแกรมนั้นทำงานในฐานะรูทก็สามารถใช้งานได้ ฆ่าฯลฯ ตามความจำเป็น ผู้ใช้ไม่มีสิทธิ์เข้าถึงคำสั่งภายในเหล่านั้นโดยตรง

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

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

George Y avatar
vn flag
ฉันคิดว่าคำแนะนำของคุณคือให้กำหนด "บัญชีขาว" ในสิ่งที่ผู้ใช้อื่นที่ไม่ใช่ `root` สามารถทำได้ แทนที่จะต้องการแต่เดิมว่าพวกเขาทำอะไรไม่ได้ นี่เป็นการเดินรอบ ๆ จริง ๆ แต่จะแบ่งเบาภาระของพวกเขามากเกินไป
in flag
`คุณไม่สามารถให้อำนาจแก่ใครแล้วห้ามไม่ให้ใช้มัน' - ฟังดูเหมือนราชวงศ์อังกฤษ ราชินีมีอำนาจสั่งประหารชีวิตใครก็ตามที่เธอไม่ชอบ แต่ถ้าเธอใช้พลังนั้นจริงๆ เธออาจจะถูกปลดออกก่อนที่จะมีการประหารชีวิตจริง
in flag
bta
@GeorgeY ผู้ดูแลระบบส่วนใหญ่ใช้รายการที่อนุญาต ใช่ คุณยังสามารถขึ้นบัญชีดำบางคำสั่งได้อย่างมีประสิทธิภาพ บางอย่างเช่น `baduser localhost = (baduser) /bin/kill` จะอนุญาตให้ผู้ใช้ 'baduser' เรียกใช้ kill เป็นบัญชีของตนเองเท่านั้น (ไม่ใช่ root) มีข้อมูลและตัวเลือกขั้นสูงอีกมากมายใน `man sudoers`
ilkkachu avatar
us flag
@hanshenrik เธอใช่ไหม คุณมีแหล่งที่มาหรือไม่?
cn flag
@ilkkachu: ตอนที่อังกฤษยังมีโทษประหารชีวิต ในทางเทคนิคแล้ว การประหารชีวิตจะทำในนามของเธอ (เพราะเธอมักจะเป็นโจทก์ในคดีอาญาในสหราชอาณาจักร) แต่นั่นคงไม่นับ
ilkkachu avatar
us flag
@Kevin ใช่แล้ว แน่นอนว่าการอ้างอิงถึง King/Queen หรือ Crown นั้นเป็นพิธีการที่นั่น แต่ฉันรู้สึกว่าสหราชอาณาจักรและประเทศในเครือจักรภพอื่น ๆ ในขณะนี้มีกฎหมายห้ามการลงโทษนอกกระบวนการยุติธรรม (และในกรณีของอังกฤษ แนวคิดนี้มักจะอ้างอิงไปถึง Magna Carta เมื่อประมาณ 800 ปีที่แล้ว...) และในขณะที่พวกเขามีอำนาจทางทฤษฎีของราชินีในการยับยั้งการลงนามในกฎหมาย แตกต่างเล็กน้อยกับราชินีที่แค่เดินข้ามกฎหมายที่ราชา/ราชินีอนุมัติแล้ว (อำนาจอธิปไตยของรัฐสภาและทั้งหมดนั้น)
George Y avatar
vn flag
@hanshenrik แปลว่าทหารที่รับผิดชอบขีปนาวุธนิวเคลียร์สามารถยิงได้ตามต้องการ? คำถามของฉันเทียบเท่ากับ - นักบินสามารถทำอะไรก็ได้บนเครื่องบิน ยกเว้นการหยุดหรือเจาะกล่องดำ
mt flag
"กำหนด "รายการที่อนุญาต" ในสิ่งที่ผู้ใช้อื่นที่ไม่ใช่รูทสามารถทำได้ แทนที่จะต้องการแต่เดิมว่าพวกเขาไม่สามารถทำอะไรได้" - นี่เป็นสิ่งที่จำเป็นในด้านความปลอดภัย เพราะไม่เช่นนั้นผู้คนก็จะหาวิธีใช้ฟังก์ชันที่พวกเขาต้องทำสิ่งต่างๆ ต่อไป คุณไม่ต้องการ สำหรับนิวเคลียร์ของสหราชอาณาจักร ใช่ พวกมัน (น่าจะ) มีความสามารถในการยิงโดยอิสระ และนั่นคือสิ่งที่พวกเขาตั้งใจไว้ ที่จะยิงในกรณีที่ลำดับชั้นทั้งหมดข้างต้นตายไปแล้ว
raj avatar
ye flag
raj
@GeorgeY แต่ระบบปฏิบัติการส่วนใหญ่ (ไม่ใช่เฉพาะ Linux) ได้รับการออกแบบมาเพื่อให้ไม่มี "กล่องดำ" ใด ๆ ฉันขอคัดค้านความคิดที่จะมี "กล่องดำ" บางอย่างที่ฉันไม่สามารถควบคุมได้ในคอมพิวเตอร์ที่ฉันเป็นเจ้าของ
timuzhti avatar
eg flag
@raj บางทีระบบปฏิบัติการส่วนใหญ่อาจไม่สามารถมีกล่องดำได้ แต่ทุกวันนี้ฮาร์ดแวร์ส่วนใหญ่มี ทั้ง Intel และ AMD มีโปรเซสเซอร์เพิ่มเติมเล็กน้อยและการควบคุมที่คุณมีจะแตกต่างกันไปขึ้นอยู่กับคุณลักษณะการจัดการที่เปิดใช้งาน
Lodinn avatar
in flag
@GeorgeY นักบินสามารถหยุดเครื่องบินได้มากเท่าที่ฟิสิกส์อนุญาต สิ่งนี้ (และปัญหาดั้งเดิมของคุณ) เป็นเรื่องทางสังคมมากกว่าเรื่องทางเทคนิค ถามตัวคุณเองว่า: ทำไมในขณะที่มีความสามารถทางเทคนิคในการทำสิ่งที่ไม่ดี ให้พูดว่านักบินแทบจะไม่เคยทำมันเลย ทำไมผู้ใช้ของคุณถึงแตกต่าง? ถ้าไม่ใช่ แสดงว่าไม่ใช่ปัญหา ถ้าใช่ แสดงว่าคุณมีปัญหาเกี่ยวกับคอมพิวเตอร์เล็กน้อยและเกี่ยวข้องกับผู้คนมาก อย่าให้สิทธิ์การเข้าถึงสิ่งที่คุณไม่ไว้วางใจแก่ผู้ใช้ โดยเฉพาะอย่างยิ่งหากสงสัยว่ามีการปองร้าย
raj avatar
ye flag
raj
@timuzhti และนั่นคือสิ่งที่กวนใจคนจำนวนมาก คุณสามารถดูบทความแสดงความกังวลเกี่ยวกับเรื่องนี้ได้ทั่วอินเทอร์เน็ต เพราะผู้คนไม่ต้องการสิ่งนี้อย่างแน่นอน
Score:10
ธง tn

ลินุกซ์ noob ที่นี่ คุณช่วยพิจารณาเขียนโปรแกรมหรือสคริปต์ที่ทำเฉพาะสิ่งที่คนเหล่านี้ควรทำ จากนั้นให้พวกเขาเป็นเจ้าของรูทและเพิ่ม setuid bit ให้พวกเขา แน่นอน ปัญหาใหญ่ประการหนึ่งคือคุณอาจไม่ต้องการให้คนอื่นเรียกใช้คำสั่งเหล่านี้ ฉันไม่แน่ใจว่าคุณจะรับข้อมูลผู้ใช้เดิมได้หรือไม่ และแน่นอน การดูแลเป็นพิเศษสำหรับ setuid/setgid นั้นจำเป็นเสมอ

sa flag
โปรแกรม *สามารถ* รับข้อมูลผู้ใช้เดิม getuid() ยังคงส่งคืนผู้ใช้ดั้งเดิม ผู้ใช้ setuid คือ geteuid() ("UID ที่มีประสิทธิภาพ")
Nikita Kipriyanov avatar
za flag
อันที่จริง *นี่* เป็นวิธีปกติที่จะไป *นี่คือวิธีการทำงานของ `sudo`
do flag
JoL
"หรือสคริปต์" - Setuid ไม่ทำงานบนสคริปต์ พวกเขาต้องเป็นไฟล์เรียกทำงานแบบไบนารี
Score:2
ธง cn

หากคุณให้สิทธิ์ root แก่ผู้ใช้ฟรี ผู้ใช้นั้นสามารถฆ่าเกือบทุกอย่างได้ สำหรับการสนทนาเชิงลึกและวิธีแก้ไขที่เป็นไปได้ โปรดดู: การสนทนา sigkill ของสแต็กยูนิกซ์.

โซลูชัน watchdog ที่กล่าวถึงโดย @bta ก็น่าสนใจเช่นกัน ในความเป็นจริงมีแพ็คเกจซอฟต์แวร์เฝ้าระวังที่สามารถกำหนดค่าให้ตรวจสอบการเปลี่ยนแปลงของไฟล์หรือเรียกใช้สคริปต์ผู้ใช้ อย่างไรก็ตามในเคอร์เนลมาตรฐานส่วนใหญ่ watchdog นี้สามารถหยุดได้โดยผู้ใช้ root หรือคุณสามารถเปลี่ยนการกำหนดค่าได้ แต่ผู้ใช้รายอื่นจะต้องตระหนักถึงสิ่งนี้เพื่อหลีกเลี่ยง ดู: https://linux.die.net/man/8/watchdog

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

ตัวอย่างเช่นคุณสามารถใส่ /bin/คิล ใน /etc/sudoers ไฟล์ แต่อนุญาตเฉพาะอาร์กิวเมนต์ที่ระบุเท่านั้น

บ๊อบ ALL=(root) /bin/kill -sigTERM [1-9][0-9][0-9][0-9]

สิ่งนี้จะช่วยให้ผู้ใช้ บ๊อบ เพื่อดำเนินการ /bin/คิลแต่จะฆ่าเฉพาะกระบวนการที่มี PID ระหว่าง 1,000 ถึง 9999 เท่านั้น หากคุณเรียกใช้จอภาพของคุณเร็วพอ มันจะมี PID ต่ำและไม่สามารถฆ่าด้วยวิธีนี้ได้ ผู้ใช้ บ๊อบ ยังสามารถรบกวนคุณโดยการฆ่ากระบวนการผู้ใช้ของคุณเองแน่นอน .... และการห่อ PID นี้อาจไม่มีประโยชน์มากนัก

เป็นไปได้ที่จะลบตัวเลือกบางอย่างออกจากชุดทั้งหมด ตัวอย่างเช่น ฆ่า PID ที่ไม่ใช่ค่าลบทั้งหมด แต่ไม่อนุญาตให้ส่งสัญญาณ PID ​​ที่มี 1337 และไม่อนุญาตให้มีการฆ่า -1

bob ALL=(root) /bin/kill -sigTERM *,!/bin/kill *1337*,!bin/kill *-1*

แต่นั่นอาจเป็นเรื่องที่น่าอึดอัดใจเล็กน้อย และคุณจะต้องแน่ใจว่าโปรแกรมไม่ได้ปิด ints ไว้ Procps kill ไม่ไกลเท่าที่ฉันเห็น แต่ตัวอย่างนี้ยังคงอนุญาตให้ฆ่ากระบวนการด้วย pid 1337 หากเป็นส่วนหนึ่งของกลุ่มกระบวนการที่ไม่ได้เป็นผู้นำ นี่แสดงให้เห็นว่าการทำงานกับฟิล์มเนกาทีฟหรือแบล็กลิสต์นั้นยากเพียงใด

ตัวเลือกที่ดีกว่า อนุญาตให้ฆ่ากระบวนการบางอย่างตามชื่อเท่านั้น

bob ALL=(root) /usr/bin/pkill -sigTERM -f กระบวนการที่ตั้งชื่อ

หรือเริ่มบริการเฉพาะใหม่เท่านั้น

bob ALL=(รูท) /bin/systemctl รีสตาร์ท a-service

ผู้ใช้สามารถดูคำสั่ง sudo ที่มีได้ด้วย sudo -l

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

Nikita Kipriyanov avatar
za flag
ข้อ จำกัด pid ไม่มีประโยชน์ ระบบที่ทำงานนานพอจะมีการรวม pids ดังนั้นมันจึงมีทั้งกระบวนการของผู้ใช้และกระบวนการของระบบด้วย pid ใดๆ โดยไม่มีการกระจายที่ชัดเจน จะไม่มีทางแสดงชุดของ pids ที่ต้อง unkillable ได้อย่างแน่นอน
George Y avatar
vn flag
แน่นอน pid วนรอบภายใน 0 ~ 2^16-1=65535
Nikita Kipriyanov avatar
za flag
PID_MAX คือ 32767 โดยค่าเริ่มต้น แต่สามารถปรับได้ถึง 2²²-1 โปรดดูที่ http://web.archive.org/web/20111209081734/http://research.cs.wisc.edu/condor/condorg/linux_scalability .html ค่าเริ่มต้นมีขนาดเล็กมากเพื่อไม่ให้ซอฟต์แวร์เก่าเสียหาย
Score:0
ธง vn

ฉันได้มาพร้อมกับ A Start!

ราก สามารถตั้งค่า DEFAULT SHELL ให้กับผู้ใช้ได้ดังนี้:

useradd [someuser] -s [ปฏิบัติการบางอย่าง]

ถ้าปฏิบัติการบางอย่าง = สคริปต์เซ็นเซอร์ที่:

  1. เซ็นเซอร์คำสั่งบางอย่างไม่ให้ถูกดำเนินการโดยอัตโนมัติ เช่น หยุด & rsyslog รวมกัน

  2. แบนคำสั่งเพื่อหลีกเลี่ยงเชลล์นี้และใช้อันอื่นแม้กระทั่งของดั้งเดิม ทุบตี

  3. แบนคำสั่งเพื่อป้องกันไม่ให้ผู้ใช้ได้รับบทบาท ราก เช่นเดียวกับสิ่งที่ @ user253751 กล่าวถึงข้างต้น

  4. ส่งคำสั่งที่เหลือไปที่ /ถัง/ทุบตี

จากนั้นเพียงตั้งค่า r+x สำหรับผู้ใช้ใดๆ

ข้อเสนอแนะใด ๆ ที่ชื่นชมภายใต้คำตอบนี้ โดยเฉพาะอย่างยิ่งสำหรับ 2 & 3 ดูเหมือนว่าวิธีการต่างๆ


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

การเซ็นเซอร์ที่สมบูรณ์ซึ่งเป็นไปตาม 4+1 ข้างต้นจะถูกทำเครื่องหมายว่าเป็นคำตอบที่ถูกต้อง

ฉันจะไม่ทำเครื่องหมายว่าคำตอบ "คุณจะต้องยอมแพ้" เป็นคำตอบที่ถูกต้อง

คำถามที่เกี่ยวข้องคือ:

ฉันจะบันทึกคำสั่งทุบตีของผู้ใช้ได้อย่างไร

ฉันจะสร้าง bash เพื่อบันทึกคำสั่งเชลล์ไปยัง syslog ได้อย่างไร

เข้าสู่ระบบโดยไม่ต้องเรียกใช้ bash_profile หรือ bashrc

mt flag
สคริปต์การเซ็นเซอร์เป็นความคิดที่ดี คุณสามารถทำได้ผ่าน sudo เพื่อให้ผู้ใช้มี bash ปกติเมื่อพวกเขาไม่มีสิทธิ์ แต่เรียกใช้ "sudo censorscript" เพื่อเรียกใช้ ปัญหาคือการทำให้แน่ใจว่าคุณรู้ทุกช่องทางที่ผู้คนสามารถแอบเข้าไปได้ ตัวอย่างเช่น คุณไม่สามารถปล่อยให้เรียกใช้ emacs หรือ vi เพราะสิ่งเหล่านี้สามารถเริ่มต้นเชลล์ได้ ดังนั้นจึงง่ายกว่าที่จะอนุญาตพิเศษ
Gerrit avatar
cn flag
เซ็นเซอร์ที่ทำงานได้เพียงอย่างเดียวที่ทำงานในฐานะรูทคือเมนูเช่นรายการที่อนุญาตพิเศษ กด 1 เพื่อหยุดบริการ A กด 2 เพื่อหยุดบริการ B วิธีการอื่นๆ จะให้วิธีลอบออกไปเสมอ และถึงอย่างนั้นก็ยังต้องมีการคอมไพล์แบบสแตติกและใช้มาตรการป้องกันทุกอย่างเพื่อแยกตามสภาพแวดล้อมที่เริ่มใช้งาน เป็นการดีกว่าที่จะไม่ประดิษฐ์วงล้อขึ้นมาใหม่และใช้ยูทิลิตี้อย่าง sudo ที่มีประสบการณ์มากมายในสายนี้ ของการกระทำ
Nikita Kipriyanov avatar
za flag
คุณต้องระวังหลายสิ่งหลายอย่างเช่นการหลบหนีของเปลือกและอื่น ๆ และ "สคริปต์เซ็นเซอร์" ไม่สามารถเป็นสคริปต์ได้ Linux อนุญาตให้ตั้งค่า setuid/setgid สำหรับไบนารีเท่านั้น ไม่ใช่สำหรับสคริปต์ ดังนั้นสคริปต์ของคุณจึงไม่สามารถเริ่มใช้สิทธิ์โดยผู้ใช้ที่ไม่มีสิทธิ์และฉันจะใช้ถ้อยคำใหม่ @Gerrit ดีกว่าสร้างรายการคำสั่งที่สมบูรณ์ที่อนุญาต (โดยไม่มีตัวยึดตำแหน่ง) และนั่นจะเป็นตัวป้องกันของคุณเพราะมันเป็นไปไม่ได้ที่จะหลีกเลี่ยง
Nikita Kipriyanov avatar
za flag
โปรดสังเกตด้วยว่าสิ่งที่คุณจะได้คือ `sudo` เวอร์ชันเฉพาะกิจ อ่านคู่มือ sudo และปรับการกำหนดค่าดีกว่าที่จะประดิษฐ์ sudo ของคุณเอง
George Y avatar
vn flag
@ pjc50 ขอบคุณสำหรับการชี้ให้เห็นวิธีการโจมตีด้านข้างผ่าน `vi` และ `vim` แต่ฉันสงสัยว่าพวกเขาสามารถแหกคุกของเชลล์ได้หรือไม่เนื่องจาก `vi` และ `vim` สามารถส่งบรรทัดคำสั่งไปยังเชลล์ปัจจุบันได้เช่นเดียวกับ `htop` และแอปพลิเคชันอื่น ๆ
ca flag
โปรดทราบว่าวิธีนี้จะแตกสลายทันทีที่คุณอนุญาตให้มีการเขียนใด ๆ ไปยังไฟล์ตามอำเภอใจในฐานะรูท (แม้แต่การเปลี่ยนเส้นทางอินพุตก็เพียงพอแล้ว) ผู้ใช้สามารถเขียนไฟล์ปฏิบัติการได้ตามอำเภอใจและเรียกใช้อะไรก็ได้ตามต้องการ (อะไรก็ได้ยกเว้นคำสั่งที่อนุญาตพิเศษจะมีปัญหาที่คล้ายกัน)

โพสต์คำตอบ

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