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