วิธีใช้ Restricted Shell เพื่อจำกัดสิ่งที่ผู้ใช้ Linux สามารถทำได้
เผยแพร่แล้ว: 2022-01-29
เชลล์แบบจำกัดจำกัดสิ่งที่บัญชีผู้ใช้สามารถทำได้บน Linux ผู้ใช้ที่ถูกจำกัดจะไม่สามารถเปลี่ยนไดเร็กทอรีได้ และคุณเป็นผู้ควบคุมว่าคำสั่งใดที่พวกเขาสามารถเข้าถึงได้ ต่อไปนี้คือวิธีตั้งค่าเชลล์ที่จำกัดบน Linux
เปลือกหอยที่ถูกจำกัด
เชลล์จำกัดไม่ใช่เชลล์อื่น เป็นโหมดที่แตกต่างกันของเชลล์มาตรฐาน กระสุน Bash, Korn, Fish และกระสุนอื่นๆ ทั้งหมดสามารถเริ่มต้นได้ในโหมดเชลล์แบบจำกัด เราจะใช้ Bash ในบทความนี้ แต่หลักการเดียวกันกับเชลล์อื่นๆ
เนื่องจากเชลล์แบบจำกัดเป็นเพียงอีกวิธีหนึ่งในการใช้เชลล์มาตรฐานของคุณ เชลล์เหล่านี้จึงตั้งค่าได้ง่าย ไม่มีอะไรต้องติดตั้ง และใช้งานได้ทุกที่ที่มีลินุกซ์
เชลล์แบบจำกัดสามารถใช้กับสคริปต์ได้เช่นกัน เพื่อให้แน่ใจว่าความเสียหายใดๆ ที่อาจเกิดขึ้นหากเขียนไม่ถูกต้อง จะถูกจำกัดอยู่ในขอบเขตของโลกที่ถูกจำกัด และพวกเขาไม่สามารถเข้าถึงคอมพิวเตอร์ทั้งหมดของคุณได้
อย่างไรก็ตาม พึงระวังว่ากระสุนที่ถูกจำกัดนั้นไม่สามารถป้องกันการหลบหนีได้อย่างสมบูรณ์ คนที่มีความรู้เพียงพอสามารถหลบหนีจากเปลือกที่ถูกจำกัดได้ เหมาะอย่างยิ่งสำหรับการกำหนดขอบเขตความปลอดภัยให้กับผู้ใช้ทั่วไป แต่อย่าพึ่งพาเชลล์ที่จำกัดสำหรับการรักษาความปลอดภัยในโลกแห่งความเป็นจริงบนระบบที่ใช้งานจริง
ที่เกี่ยวข้อง: อะไรคือความแตกต่างระหว่าง Bash, Zsh และ Linux Shells อื่น ๆ
ทุบตีที่ถูกจำกัด
เมื่อคุณเรียกใช้ Bash เป็นเชลล์แบบจำกัด ผู้ใช้จะมีความสามารถบางอย่างที่ลบออกจากเชลล์เหล่านี้ โดยเฉพาะอย่างยิ่ง ผู้ใช้ ไม่สามารถ :
- ใช้
cdเพื่อเปลี่ยนไดเร็กทอรีการทำงาน - เปลี่ยนค่าของตัวแปรสภาพแวดล้อม
$PATH,$SHELL,$BASH_ENVหรือ$ENV(แต่สามารถอ่านค่าปัจจุบันได้) - อ่านหรือเปลี่ยนตัวเลือกสภาวะแวดล้อมเชลล์
$SHELLOPTS - เปลี่ยนเส้นทางผลลัพธ์ของคำสั่ง
- เรียกใช้คำสั่งที่ต้องการเส้นทางเพื่อค้นหา นั่นคือ คุณไม่สามารถออกคำสั่งที่มีเครื่องหมายทับ “
/” อยู่ได้ - เรียกใช้
execเพื่อแทนที่กระบวนการอื่นสำหรับเชลล์ - ใช้คุณลักษณะที่จำกัดใดๆ ในสคริปต์
คุณสามารถเรียกใช้ Bash shell ที่จำกัดได้โดยใช้ตัวเลือก -r (จำกัด) การพยายามทำงานง่ายๆ เช่น เปลี่ยนไดเร็กทอรีการทำงานเป็นสิ่งต้องห้าม ข้อความสั้นๆ บอกคุณว่า cd ถูกจำกัด
bash -r
cd Documents

เชลล์ Bash ยังสามารถตรวจจับได้เมื่อมีการเรียกใช้โดยใช้ “rbash” แทน “bash” ซึ่งทำให้เริ่มเป็นเชลล์จำกัดได้เช่นกัน นี่เป็นวิธีที่สะดวกในการตั้งค่าเชลล์เริ่มต้นสำหรับผู้ใช้รายใดรายหนึ่ง ซึ่งเราจะใช้ในเร็วๆ นี้
หากเราใช้คำสั่ง whereis บน Ubuntu เพื่อค้นหาไฟล์ rbash เราจะเห็นว่าไฟล์สั่งการนั้นอยู่ในไดเร็กทอรี "usr/bin" man page อยู่ในไดเร็กทอรี "/usr/share/man/man1"
การใช้คำสั่ง ls พร้อมตัวเลือก -l (แบบยาว) เผยให้เห็นว่า rbash เป็นลิงก์สัญลักษณ์เพื่อ bash
rbash อยู่ที่ไหน
ls -l /usr/bin/rbash

ใน Manjaro และ Fedora ต้องสร้างลิงก์สัญลักษณ์ rbash ใช้ได้กับทั้งการแจกแจง:
rbash อยู่ที่ไหน
sudo ln -s /bin/bash /bin/rbash
rbash อยู่ที่ไหน

ครั้งที่สองที่เราใช้คำสั่ง whereis จะพบ rbash ในไดเร็กทอรี "/usr/bin"
การจำกัดผู้ใช้
มาสร้างบัญชีผู้ใช้ใหม่ชื่อ “มินนี่” เราจะตั้งค่าเชลล์เป็นเชลล์จำกัดโดยใช้ตัวเลือก -s (shell) ของคำสั่ง useradd นอกจากนี้เรายังจะตั้งรหัสผ่านของบัญชีโดยใช้คำสั่ง passwd และเราจะสร้างโฟลเดอร์เริ่มต้นสำหรับพวกเขา
แฟล็ก -p (พาเรนต์) ในคำสั่ง mkdir บอกให้ mkdir สร้างไดเร็กทอรีเป้าหมายและไดเร็กทอรีพาเรนต์ที่จำเป็นต้องสร้างด้วย ดังนั้นโดยการสร้างไดเร็กทอรี "/home/minnie/bin" เราจึงสร้างไดเร็กทอรี "/home/minnie" พร้อมกัน
sudo useradd minnie -s /bin/rbash
sudo passwd มินนี่
sudo mkdir -p /home/minnie/bin

เมื่อมินนี่เข้าสู่ระบบ เธอจะทำงานในเชลล์ที่จำกัด
ซีดี

เธอไม่สามารถเรียกใช้คำสั่งที่จำเป็นต้องมีเครื่องหมายทับ " / ":
/usr/bin/ping

อย่างไรก็ตาม เธอยังคงสามารถรันคำสั่งที่พบในเส้นทางได้
ปิง

นั่นไม่ใช่พฤติกรรมที่คุณคาดหวัง และแน่นอนว่าไม่ใช่สิ่งที่เราต้องการ เพื่อกระชับข้อจำกัดเพิ่มเติม เราต้องเปลี่ยนพาธที่เชลล์ของมินนี่จะใช้เพื่อค้นหาคำสั่ง
กระชับข้อ จำกัด
เมื่อเราสร้างโฮมไดเร็กทอรี "/home/minnie" ของ minnie เราก็ได้สร้างไดเร็กทอรี "/home/minnie/bin" ด้วย นี่คือที่ที่ไดเร็กทอรีเข้ามาเล่น

เราจะแก้ไขไฟล์ “.bash_profile” ของมินนี่ และตั้งค่าพาธของเธอให้ชี้ไปที่ไดเร็กทอรีนั้นเท่านั้น นอกจากนี้ เราจะจำกัดไฟล์ “.bash_profile” ของมินนี่ เพื่อให้มีเพียงรูทเท่านั้นที่สามารถแก้ไขได้ นั่นหมายความว่าไม่มีผู้ใช้รายอื่นสามารถแก้ไขไฟล์นั้นและเปลี่ยนเส้นทางของเธอได้
sudo gedit /home/minnie/.bash_profile

แก้ไข "PATH=" ที่มีอยู่หรือเพิ่มบรรทัดต่อไปนี้:
PATH=$HOME/bin

บันทึกไฟล์. เราจะเปลี่ยนเจ้าของไฟล์เป็นรูทโดยใช้คำสั่ง chown และเปลี่ยนสิทธิ์ของไฟล์โดยใช้คำสั่ง chmod เฉพาะผู้ใช้รูทเท่านั้นที่จะสามารถแก้ไขไฟล์ได้
sudo chown root:root /home/minnie/.bash_profile
sudo chmod 755 /home/minnie/.bash_profile
ls -l /home/minnie/.bash_profile

ครั้งต่อไปที่ผู้ใช้ minnie เข้าสู่ระบบ เส้นทางของเธอจะชี้ไปที่โฟลเดอร์เดียว

minnie ผู้ใช้ที่ถูกจำกัดของเราสามารถใช้ได้เฉพาะคำสั่งในตัวของ Bash เช่น echo , alias และ logout เธอไม่สามารถใช้ ls ได้ด้วยซ้ำ!
ลส

เราจะต้องคลายกำมือของเราเล็กน้อยถ้าเราต้องการให้พวกเขาสามารถทำอะไรที่เป็นประโยชน์ได้เลย เราจะสร้างลิงก์สัญลักษณ์จากไดเร็กทอรี "bin" ของ minnie ไปยังคำสั่งที่เราต้องการให้ minnie สามารถใช้ได้
sudo ln -s /bin/ls /home/minnie/bin
sudo ln -s /bin/top /home/minnie/bin
sudo ln -s /bin/uptime /home/minnie/bin
sudo ln -s /bin/pinky /home/minnie/bin

เมื่อมินนี่เข้าสู่ระบบในครั้งต่อไป เธอจะพบว่าเธอสามารถใช้คำสั่งในตัวของ Bash ได้ บวกกับคำสั่งเหล่านั้นที่เชื่อมโยงกับ
ลส
พิ้งกี้ เดฟ
เวลาทำงาน

การจำกัดผู้ใช้ที่มีอยู่
เราสร้างมินนี่ในฐานะผู้ใช้ใหม่ ในการเปลี่ยนเชลล์ของผู้ใช้ที่มีอยู่ เราสามารถใช้ตัวเลือก -s (shell) ของคำสั่ง usermod
sudo usermod -s /bin/rbash mary

คุณสามารถใช้คำสั่ง less ในไฟล์ “/etc/passwd” เพื่อดูว่าเชลล์ใดถูกตั้งค่าเป็นเชลล์เริ่มต้นของผู้ใช้ได้อย่างรวดเร็ว
น้อยกว่า /etc/passwd

เราจะเห็นว่าผู้ใช้ mary จะใช้เชลล์แบบจำกัดเมื่อเธอเข้าสู่ระบบครั้งต่อไป

อย่าลืมใช้การเปลี่ยนแปลงอื่นๆ เพื่อจำกัดตัวแปรสภาพแวดล้อม $PATH และตั้งค่าคำสั่งที่คุณต้องการให้ผู้ใช้แมรี่สามารถดำเนินการได้
การจำกัดสคริปต์
ผู้ใช้ทั่วไปที่ไม่ถูกจำกัดสามารถเรียกใช้สคริปต์ที่ดำเนินการในเชลล์ที่ถูกจำกัด คัดลอกบรรทัดต่อไปนี้แล้ววางลงในเอดิเตอร์ บันทึกไฟล์เป็น "restricted.sh" และปิดตัวแก้ไข
#!/bin/bash # สคริปต์เริ่มต้นใน Bash shell ปกติ echo "## ในโหมดไม่จำกัด! ##" เสียงก้อง echo "ไดเรกทอรีปัจจุบัน: `pwd`" echo "กำลังเปลี่ยนไดเร็กทอรี" cd /usr/share echo "ตอนนี้อยู่ในไดเรกทอรี: `pwd`" echo "กำลังเปลี่ยนเป็นโฮมไดเร็กตอรี่" ซีดี ~ echo "ตอนนี้อยู่ในไดเรกทอรี: `pwd`" # การตั้งค่าโหมด จำกัด ตั้ง -r เสียงก้อง echo "## ในโหมดจำกัด! ##" เสียงก้อง echo "ไดเรกทอรีปัจจุบัน: `pwd`" echo "กำลังเปลี่ยนไดเร็กทอรีเป็น /home/" cd /home echo "ยังอยู่ในไดเรกทอรี: `pwd`" เสียงก้อง echo "กำลังพยายามเริ่มเชลล์อื่น" /bin/bash เสียงก้อง echo "กำลังพยายามเปลี่ยนเส้นทางเอาต์พุตคำสั่ง" ls -l $HOME > my_files.txt cat my_files.txt เสียงก้อง ทางออก 0
เราจำเป็นต้องใช้คำสั่ง chmod กับแฟล็ก +x (execute) เพื่อให้สคริปต์ทำงานได้
chmod +x จำกัด.sh

ส่วนแรกของสคริปต์ทำงานในเชลล์ปกติ
./จำกัด.sh

ส่วนที่สองของสคริปต์—บิตหลังบรรทัด “set -r”—ทำงานในเชลล์แบบจำกัด

ไม่มีการดำเนินการใดที่พยายามทำสำเร็จในส่วนที่จำกัดของสคริปต์
สคริปต์ทั้งหมดสามารถสร้างให้ทำงานในเชลล์ที่จำกัดโดยเพิ่ม -r ที่บรรทัดแรก:
!#/bin/bash -r
จำฮูดินี่
กระสุนที่ถูกจำกัดนั้นมีประโยชน์ แต่ไม่ผิดพลาดอย่างสมบูรณ์ ผู้ใช้ที่มีทักษะเพียงพออาจสามารถหลบหนีได้ แต่เมื่อใช้อย่างรอบคอบ จะเป็นวิธีที่มีประโยชน์ในการสร้างชุดข้อจำกัดสำหรับบัญชีใดบัญชีหนึ่ง
