วิธีใช้ Restricted Shell เพื่อจำกัดสิ่งที่ผู้ใช้ Linux สามารถทำได้

เผยแพร่แล้ว: 2022-01-29
หน้าต่างเทอร์มินัลบนระบบ Linux
Fatmawati Achmad Zaenuri/Shutterstock

เชลล์แบบจำกัดจำกัดสิ่งที่บัญชีผู้ใช้สามารถทำได้บน 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

จำฮูดินี่

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