Một trình bao hạn chế giới hạn những gì tài khoản người dùng có thể làm trên Linux. Người dùng bị hạn chế không thể thay đổi thư mục của họ và bạn kiểm soát những lệnh nào họ có quyền truy cập. Đây là cách thiết lập một trình bao bị hạn chế trên Linux.
Vỏ hạn chế
Một trình bao hạn chế không phải là một trình bao khác. Đó là một chế độ khác của một trình bao tiêu chuẩn. Bash, Korn, Fish và các shell khác đều có thể được khởi động ở chế độ shell bị hạn chế. Chúng tôi sẽ sử dụng Bash trong bài viết này, nhưng các nguyên tắc tương tự cũng áp dụng cho các trình bao khác.
Bởi vì các trình bao bị hạn chế chỉ là một cách khác để sử dụng trình bao tiêu chuẩn của bạn, chúng rất dễ thiết lập. Không có gì để cài đặt và chúng có sẵn ở bất kỳ đâu Linux.
Các trình bao bị hạn chế cũng có thể được áp dụng cho các tập lệnh. Điều đó đảm bảo rằng bất kỳ thiệt hại nào mà họ có thể gây ra nếu viết sai chỉ giới hạn trong phạm vi giới hạn của thế giới hạn chế của họ và họ không có quyền truy cập vào toàn bộ máy tính của bạn.
Tuy nhiên, hãy lưu ý rằng các vỏ hạn chế không hoàn toàn chống thoát. Ai đó có đủ kiến thức có thể thoát khỏi lớp vỏ hạn chế. Chúng tuyệt vời để đặt ranh giới an toàn cho người dùng bình thường, nhưng không dựa vào các trình bao bị hạn chế cho bất kỳ bảo mật trong thế giới thực nào trên hệ thống sản xuất.
LIÊN QUAN: Sự khác biệt giữa Bash, Zsh và các Shell Linux khác là gì?
Bash bị hạn chế
Khi bạn chạy Bash dưới dạng trình bao bị hạn chế, người dùng có một số khả năng bị xóa khỏi chúng. Cụ thể, người dùng không thể:
- Sử dụng
cd
để thay đổi thư mục làm việc. - Thay đổi các giá trị của
$PATH
,$SHELL
,$BASH_ENV
, hoặc là$ENV
các biến môi trường (nhưng chúng có thể đọc các giá trị hiện tại). - Đọc hoặc thay đổi
$SHELLOPTS
tùy chọn môi trường vỏ. - Chuyển hướng đầu ra của một lệnh.
- Gọi các lệnh yêu cầu một đường dẫn để xác định vị trí của chúng. Đó là, bạn không thể đưa ra một lệnh có một hoặc nhiều dấu gạch chéo “
/
” trong đó. - Mời
exec
để thay thế một quy trình khác cho shell. - Sử dụng bất kỳ tính năng bị hạn chế nào trong một tập lệnh.
Bạn có thể gọi một trình bao Bash bị hạn chế bằng cách sử dụng -r
(bị hạn chế) tùy chọn. Việc cố gắng thực hiện một tác vụ đơn giản như thay đổi thư mục làm việc bị cấm. Một tin nhắn ngắn gọn cho bạn biết rằng cd
bị hạn chế.
bash -r
cd Documents
Bash shell cũng có thể phát hiện khi nào nó được gọi bằng cách sử dụng “rbash” thay vì “bash”. Điều này khiến nó cũng bắt đầu như một trình bao bị hạn chế. Điều này cung cấp một cách thuận tiện để đặt trình bao mặc định cho một người dùng cụ thể mà chúng tôi sẽ sớm sử dụng.
Nếu chúng ta sử dụng whereis
lệnh trên Ubuntu để tìm kiếm rbash
, chúng ta sẽ thấy rằng tệp thực thi nằm trong thư mục “usr / bin”. Trang người đàn ông nằm trong thư mục “/ usr / share / man / man1”.
Sử dụng ls
ra lệnh với -l
(dài) tùy chọn tiết lộ rằng rbash
thực sự là một liên kết tượng trưng đến bash
.
whereis rbash
ls -l /usr/bin/rbash
Trên Manjaro và Fedora, rbash
liên kết tượng trưng phải được tạo. Điều này hoạt động trên cả hai bản phân phối:
whereis rbash
sudo ln -s /bin/bash /bin/rbash
whereis rbash
Lần thứ hai chúng tôi sử dụng whereis
lệnh, nó tìm thấy rbash
trong thư mục “/ usr / bin”.
Hạn chế người dùng
Hãy tạo một tài khoản người dùng mới có tên là “Minnie”. Chúng tôi sẽ đặt trình bao của chúng thành trình bao bị hạn chế bằng cách sử dụng -s
(shell) tùy chọn của useradd
chỉ huy. Chúng tôi cũng sẽ đặt mật khẩu của tài khoản bằng cách sử dụngpasswd
và chúng tôi sẽ tạo một thư mục chính cho chúng.
Các -p
(cha mẹ) gắn cờ trong mkdir
lệnh nói với mkdir
để tạo thư mục đích và bất kỳ thư mục mẹ nào mà nó cũng cần tạo. Vì vậy, bằng cách tạo thư mục “/ home / minnie / bin”, chúng tôi tạo thư mục “/ home / minnie” cùng một lúc.
sudo useradd minnie -s /bin/rbash
sudo passwd minnie
sudo mkdir -p /home/minnie/bin
Khi minnie đăng nhập, cô ấy sẽ chạy trong một trình bao bị hạn chế.
cd
Cô ấy không thể gọi các lệnh cần bao gồm một dấu gạch chéo “/
“:
/usr/bin/ping
Tuy nhiên, cô ấy vẫn có thể thực hiện các lệnh được tìm thấy trong đường dẫn.
ping
Đó không phải là hành vi mà bạn có thể mong đợi, và nó chắc chắn không phải là những gì chúng tôi muốn. Để thắt chặt các hạn chế hơn nữa, chúng ta cần thay đổi đường dẫn mà trình bao của minnie sẽ sử dụng để tìm kiếm các lệnh.
Thắt chặt các hạn chế
Khi chúng tôi tạo thư mục chính của minnie “/ home / minnie”, chúng tôi cũng tạo một thư mục “/ home / minnie / bin”. Đây là nơi mà thư mục đó phát huy tác dụng.
Chúng tôi sẽ chỉnh sửa tệp “.bash_profile” của minnie và đặt đường dẫn của cô ấy chỉ trỏ đến thư mục đó. Chúng tôi cũng sẽ hạn chế tệp “.bash_profile” của minnie để chỉ người chủ mới có thể chỉnh sửa nó. Điều đó có nghĩa là không người dùng nào khác có thể chỉnh sửa tệp đó và thay đổi đường dẫn của cô ấy.
sudo gedit /home/minnie/.bash_profile
Chỉnh sửa “PATH =” hiện có hoặc thêm dòng sau:
PATH=$HOME/bin
Lưu các tập tin. Chúng tôi sẽ thay đổi chủ sở hữu của tệp thành root bằng cách sử dụng chown
lệnh và thay đổi quyền đối với tệp bằng cách sử dụng chmod
chỉ huy. Chỉ người dùng root mới có thể chỉnh sửa tệp.
sudo chown root:root /home/minnie/.bash_profile
sudo chmod 755 /home/minnie/.bash_profile
ls -l /home/minnie/.bash_profile
Lần tiếp theo khi người dùng minnie đăng nhập, đường dẫn của cô ấy sẽ trỏ đến một thư mục duy nhất.
Người dùng bị hạn chế minnie của chúng tôi chỉ có thể sử dụng các lệnh tích hợp sẵn của Bash như echo
, alias
, và logout
. Cô ấy thậm chí không thể sử dụng ls
!
ls
Chúng ta sẽ cần phải nới lỏng vòng vây của chúng ta một chút nếu chúng ta muốn chúng có thể làm bất cứ điều gì hữu ích. Chúng tôi sẽ tạo một số liên kết tượng trưng từ thư mục “bin” của minnie đến các lệnh mà chúng tôi muốn minnie có thể sử dụng.
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
Khi minnie đăng nhập tiếp theo, cô ấy sẽ thấy rằng cô ấy có thể sử dụng các lệnh tích hợp sẵn của Bash, cộng với các lệnh đã được liên kết với.
ls
pinky dave
uptime
Hạn chế người dùng hiện tại
Chúng tôi đã tạo minnie với tư cách là một người dùng mới. Để thay đổi giao diện người dùng hiện tại, chúng ta có thể sử dụng -s
(shell) tùy chọn của usermod
chỉ huy.
sudo usermod -s /bin/rbash mary
Bạn có thể dùng less
trên tệp “/ etc / passwd” để nhanh chóng xem trình bao nào được đặt làm trình bao mặc định của người dùng.
less /etc/passwd
Chúng ta có thể thấy rằng người dùng mary sẽ sử dụng shell bị hạn chế khi cô ấy đăng nhập lần sau.
Hãy nhớ áp dụng các thay đổi khác để hạn chế $PATH
biến môi trường và để đặt các lệnh bạn muốn người dùng mary có thể thực thi.
Tập lệnh Hạn chế
Một người dùng thông thường, không bị giới hạn có thể khởi chạy các tập lệnh được thực thi trong một trình bao bị hạn chế. Sao chép các dòng sau và dán chúng vào trình chỉnh sửa. Lưu tệp dưới dạng “limited.sh” và đóng trình chỉnh sửa.
#!/bin/bash # script starts in normal Bash shell echo "## In UNrestricted mode! ##" echo echo "Current directory: `pwd`" echo "Changing directory" cd /usr/share echo "Now in directory: `pwd`" echo "Changing to home directory" cd ~ echo "Now in directory: `pwd`" # Setting restricted mode set -r echo echo "## In restricted mode! ##" echo echo "Current directory: `pwd`" echo "Changing directory to /home/" cd /home echo "Still in directory: `pwd`" echo echo "Trying to start another shell" /bin/bash echo echo "Trying to redirect command output" ls -l $HOME > my_files.txt cat my_files.txt echo exit 0
Chúng ta cần sử dụng chmod
ra lệnh với +x
cờ (thực thi) để làm cho tập lệnh có thể thực thi được.
chmod +x restricted.sh
Phần đầu tiên của tập lệnh chạy trong một trình bao bình thường.
./restricted.sh
Phần thứ hai của tập lệnh — bit sau dòng “set -r” — chạy trong một trình bao bị hạn chế.
Không có hành động đã cố gắng nào thành công trong phần bị hạn chế của tập lệnh.
Toàn bộ tập lệnh có thể được thực hiện để chạy trong một trình bao bị hạn chế bằng cách thêm -r
đến dòng đầu tiên:
!#/bin/bash -r
Nhớ Houdini
Vỏ hạn chế rất hữu ích, nhưng không hoàn toàn sai lầm. Một người dùng đủ kỹ năng có thể thoát khỏi chúng. Nhưng khi được sử dụng một cách thận trọng, chúng là một cách hữu ích để thiết lập một tập hợp các giới hạn cho một tài khoản cụ thể.