Các chroot
lệnh có thể đưa bạn vào tù, giữ cho môi trường phát triển hoặc thử nghiệm của bạn bị cô lập hoặc chỉ cải thiện bảo mật hệ thống của bạn. Chúng tôi chỉ cho bạn cách dễ dàng nhất để sử dụng nó.
Chroot là gì?
Nếu bạn cố gắng đo lường mức độ hữu ích của một lệnh, bạn phải tính đến chức năng mà nó cung cấp và tính dễ sử dụng của nó. Nếu nó quá phức tạp để mọi người sử dụng hoặc quá dài dòng khiến họ muốn cố gắng sử dụng nó, thì chức năng cũng có thể bằng không. Nếu không ai sử dụng nó, nó sẽ không cung cấp bất kỳ chức năng nào.
Trong các cuộc thảo luận với người dùng Linux — trực tiếp và trên các diễn đàn — có vẻ như chroot
Lệnh là một lệnh được đánh giá là khó sử dụng hoặc quá khó và tẻ nhạt để thiết lập. Có vẻ như tiện ích tuyệt vời này không được sử dụng nhiều như nó có thể.
Với chroot
bạn có thể thiết lập và chạy các chương trình hoặc trình bao tương tác chẳng hạn như Bash trong một hệ thống tệp đóng gói được ngăn không cho tương tác với hệ thống tệp thông thường của bạn. Mọi thứ trong chroot
môi trường được penned trong và chứa. Không có gì trong chroot
môi trường có thể nhìn ra thư mục gốc, đặc biệt, của riêng nó mà không cần chuyển sang đặc quyền root. Điều đó đã khiến loại môi trường này có biệt danh là chroot
nhà giam. Thuật ngữ “tù” không nên nhầm lẫn với FreeBSD’s jail
lệnh, tạo ra một chroot
môi trường an toàn hơn bình thường chroot
Môi trường.
Nhưng trên thực tế, có một cách rất đơn giản để sử dụng chroot
, mà chúng ta sẽ từng bước qua. Chúng tôi đang sử dụng các lệnh Linux thông thường sẽ hoạt động trên tất cả các bản phân phối. Một số bản phân phối Linux có các công cụ chuyên dụng để thiết lập chroot
các môi trường, chẳng hạn như debootstrap cho Ubuntu, nhưng chúng tôi đang bị phân tán bất khả tri ở đây.
Khi nào bạn nên sử dụng chroot?
A chroot
môi trường cung cấp chức năng tương tự như của một máy ảo, nhưng nó là một giải pháp nhẹ hơn. Hệ thống cố định không cần cài đặt và cấu hình hypervisor, chẳng hạn như VirtualBox hoặc Virtual Machine Manager. Nó cũng không cần phải cài đặt hạt nhân trong hệ thống bị giam giữ. Hệ thống bị giam giữ chia sẻ hạt nhân hiện có của bạn.
Ở một khía cạnh nào đó, chroot
môi trường gần với các vùng chứa chẳng hạn như LXC hơn là với các máy ảo. Chúng có trọng lượng nhẹ, triển khai nhanh chóng và việc tạo và kích hoạt một ứng dụng có thể được tự động hóa. Giống như các thùng chứa, một cách thuận tiện để định cấu hình chúng là cài đặt vừa đủ hệ điều hành để bạn hoàn thành những gì được yêu cầu. Câu hỏi “bắt buộc phải có” được trả lời bằng cách xem xét cách bạn sẽ sử dụng chroot
Môi trường.
Một số cách sử dụng phổ biến là:
Phát triển phần mềm và xác minh sản phẩm. Các nhà phát triển viết phần mềm và nhóm xác minh sản phẩm (PV) kiểm tra nó. Đôi khi PV tìm thấy các vấn đề không thể tái tạo trên máy tính của nhà phát triển. Nhà phát triển có tất cả các loại công cụ và thư viện được cài đặt trên máy tính phát triển của họ mà người dùng bình thường — và PV — sẽ không có. Thông thường, phần mềm mới phù hợp với nhà phát triển nhưng không phù hợp với người khác hóa ra đang sử dụng tài nguyên trên PC của nhà phát triển chưa được bao gồm trong bản phát hành thử nghiệm của phần mềm. chroot
cho phép các nhà phát triển có một môi trường nuôi nhốt vani đơn giản trên máy tính của họ mà họ có thể nhúng phần mềm vào trước khi đưa nó cho PV. Môi trường cố định có thể được cấu hình với các phụ thuộc tối thiểu mà phần mềm yêu cầu.
Giảm rủi ro phát triển. Nhà phát triển có thể tạo ra một môi trường phát triển chuyên dụng để không có điều gì xảy ra trong đó có thể làm hỏng PC thực tế của họ.
Đang chạy phần mềm không được dùng nữa. Đôi khi bạn chỉ cần có một phiên bản cũ của thứ gì đó đang chạy. Nếu phần mềm cũ có các yêu cầu xung đột hoặc không tương thích với phiên bản Linux của bạn, bạn có thể chroot
một môi trường cho phần mềm có vấn đề.
Phục hồi và nâng cấp hệ thống tập tin: Nếu cài đặt Linux không hoạt động được, bạn có thể sử dụng chroot
để gắn hệ thống tập tin bị hỏng vào một điểm gắn kết trên Live CD. Điều này cho phép bạn làm việc trong hệ thống bị hỏng và cố gắng sửa chữa nó như thể nó đã được gắn kết bình thường tại root /. Điều này có nghĩa là các đường dẫn tệp dự kiến trong hệ thống bị hỏng sẽ được tham chiếu chính xác từ thư mục gốc chứ không phải từ điểm gắn kết của Live CD. Một kỹ thuật tương tự đã được sử dụng trong bài viết mô tả cách di chuyển hệ thống tệp Linux từ ext2 hoặc ext3 sang ext4.
Ứng dụng đấu kiếm. Chạy máy chủ FTP hoặc thiết bị được kết nối internet khác bên trong chroot
môi trường hạn chế thiệt hại mà kẻ tấn công bên ngoài có thể gây ra. Đây có thể là một bước quan trọng trong việc tăng cường bảo mật cho hệ thống của bạn.
LIÊN QUAN: Cách di chuyển hệ thống tệp Ext2 hoặc Ext3 sang Ext4 trên Linux
Tạo môi trường chroot
Chúng tôi cần một thư mục để hoạt động như thư mục gốc của chroot
Môi trường. Để chúng ta có một cách hiểu ngắn gọn về thư mục đó, chúng ta sẽ tạo một biến và lưu tên của thư mục trong đó. Ở đây chúng tôi đang thiết lập một biến để lưu trữ một đường dẫn đến thư mục “testroot”. Không quan trọng nếu thư mục này chưa tồn tại, chúng tôi sẽ sớm tạo nó. Nếu thư mục tồn tại, nó phải trống.
chr=/home/dave/testroot
Nếu thư mục không tồn tại, chúng ta cần tạo nó. Chúng ta có thể làm điều đó với lệnh này. Các -p
(cha mẹ) tùy chọn đảm bảo mọi thư mục mẹ bị thiếu được tạo cùng một lúc:
mkdir -p $chr
Chúng ta cần tạo các thư mục để chứa các phần của hệ điều hành chroot
môi trường sẽ yêu cầu. Chúng tôi sẽ thiết lập một môi trường Linux tối giản sử dụng Bash làm trình bao tương tác. Chúng tôi cũng sẽ bao gồm touch
, rm
, và ls
các lệnh. Điều đó sẽ cho phép chúng tôi sử dụng tất cả các lệnh tích hợp của Bash và touch
, rm
, và ls
. Chúng tôi sẽ có thể tạo, liệt kê và xóa tệp cũng như sử dụng Bash. Và — trong ví dụ đơn giản này — đó là tất cả.
Liệt kê các thư mục bạn cần tạo trong {}
mở rộng nẹp.
mkdir -p $chr/{bin,lib,lib64}
Bây giờ chúng tôi sẽ thay đổi thư mục thành thư mục gốc mới của chúng tôi.
cd $chr
Hãy sao chép các tệp nhị phân mà chúng ta cần trong môi trường Linux tối giản từ thư mục “/ bin” thông thường của bạn vào chroot
Thư mục “/ bin”. Các -v
(dài dòng) tùy chọn làm cho cp
cho chúng tôi biết nó đang làm gì khi nó thực hiện mỗi hành động sao chép.
cp -v /bin/{bash,touch,ls,rm} $chr/bin
Các tệp được sao chép cho chúng tôi:
Các mã nhị phân này sẽ có các phụ thuộc. Chúng tôi cần khám phá chúng là gì và sao chép những, cái đó các tệp vào môi trường của chúng tôi, nếu không bash
, touch
, rm
, và ls
sẽ không thể hoạt động. Chúng ta cần làm điều này lần lượt cho từng lệnh đã chọn của chúng ta. Chúng tôi sẽ thực hiện Bash trước. Các ldd
lệnh sẽ liệt kê các phụ thuộc cho chúng ta.
ldd /bin/bash
Các phần phụ thuộc được xác định và liệt kê trong cửa sổ đầu cuối:
Chúng tôi cần sao chép các tệp đó vào môi trường mới của chúng tôi. Chọn các chi tiết trong danh sách đó và sao chép chúng lần lượt sẽ tốn thời gian và dễ xảy ra lỗi.
Rất may, chúng tôi có thể bán tự động hóa nó. Chúng tôi sẽ liệt kê lại các phần phụ thuộc và lần này chúng tôi sẽ tạo thành một danh sách. Sau đó, chúng tôi sẽ lặp lại danh sách sao chép các tệp.
Ở đây chúng tôi đang sử dụng ldd
để liệt kê các phụ thuộc và cung cấp kết quả thông qua một đường ống dẫn vào egrep
. Sử dụng egrep
cũng giống như việc sử dụng grep
với -E
(biểu thức chính quy mở rộng). Các -o
(chỉ kết hợp) tùy chọn hạn chế đầu ra cho các phần phù hợp của dòng. Chúng tôi đang tìm kiếm các tệp thư viện phù hợp có kết thúc bằng số [0-9]
.
list="$(ldd /bin/bash | egrep -o '/lib.*.[0-9]')"
Chúng tôi có thể kiểm tra nội dung của danh sách bằng cách sử dụng echo
:
echo $list
Bây giờ chúng ta đã có danh sách, chúng ta có thể xem qua nó bằng vòng lặp sau, sao chép các tệp một lần. Chúng tôi đang sử dụng biến i
để xem qua danh sách. Đối với mỗi thành viên trong danh sách, chúng tôi sao chép tệp vào chroot
thư mục gốc là giá trị được giữ trong $chr
.
Các -v
(dài dòng) tùy chọn nguyên nhân cp
để thông báo từng bản sao khi nó thực hiện nó. Các --parents
tùy chọn đảm bảo mọi thư mục mẹ bị thiếu đều được tạo trong chroot
Môi trường.
for i in $list; do cp -v --parents "$i" "${chr}"; done
Và đây là đầu ra:
Chúng tôi sẽ sử dụng kỹ thuật đó để nắm bắt sự phụ thuộc của từng lệnh khác. Và chúng tôi sẽ sử dụng kỹ thuật vòng lặp để thực hiện sao chép thực tế. Tin tốt là chúng ta chỉ cần thực hiện một chỉnh sửa nhỏ đối với lệnh tập hợp các phụ thuộc.
Chúng ta có thể lấy lệnh từ lịch sử lệnh của mình bằng cách nhấn vào Up Arrow
phím một vài lần và sau đó thực hiện chỉnh sửa. Lệnh sao chép lặp lại không cần thay đổi gì cả.
Ở đây chúng tôi đã sử dụng Up Arrow
phím để tìm lệnh và chúng tôi đã chỉnh sửa nó để nói touch
thay vì bash
.
list="$(ldd /bin/touch | egrep -o '/lib.*.[0-9]')"
Bây giờ chúng ta có thể lặp lại lệnh lặp chính xác như trước:
for i in $list; do cp -v --parents "$i" "${chr}"; done
Và các tệp của chúng tôi được sao chép cho chúng tôi:
Bây giờ chúng tôi có thể chỉnh sửa list
dòng lệnh cho ls
:
list="$(ldd /bin/ls | egrep -o '/lib.*.[0-9]')"
Một lần nữa, chúng ta sẽ sử dụng cùng một lệnh lặp. Nó không quan tâm những tệp có trong danh sách. Nó hoạt động một cách mù quáng thông qua danh sách sao chép các tệp cho chúng tôi.
for i in $list; do cp -v --parents "$i" "${chr}"; done
Và các phụ thuộc cho ls
được sao chép cho chúng tôi:
Chúng tôi chỉnh sửa list
dòng lệnh lần cuối cùng, làm cho nó hoạt động rm
:
list="$(ldd /bin/ls | egrep -o '/lib.*.[0-9]')"
Chúng tôi sử dụng lệnh sao chép lặp lại lần cuối:
for i in $list; do cp -v --parents "$i" "${chr}"; done
Phần phụ thuộc cuối cùng của chúng tôi được sao chép vào chroot
Môi trường. Cuối cùng chúng tôi đã sẵn sàng để sử dụng chroot
chỉ huy. Lệnh này đặt gốc của chroot
môi trường và chỉ định ứng dụng nào sẽ chạy dưới dạng trình bao.
sudo chroot $chr /bin/bash
Của chúng tôi chroot
môi trường hiện đang hoạt động. Lời nhắc cửa sổ đầu cuối đã thay đổi và trình bao tương tác đang được xử lý bởi bash
vỏ trong môi trường của chúng ta.
Chúng ta có thể thử các lệnh mà chúng ta đã đưa vào môi trường.
ls
ls /home/dave/Documents
Các ls
lệnh hoạt động như chúng ta mong đợi khi chúng ta sử dụng nó trong môi trường. Khi chúng tôi cố gắng truy cập một thư mục bên ngoài môi trường, lệnh không thành công.
Chúng ta có thể sử dụng touch
để tạo một tệp, ls
để liệt kê nó, và rm
Để loại bỏ nó.
touch sample_file.txt
ls
rm sample_file.txt
ls
Tất nhiên, chúng ta cũng có thể sử dụng các lệnh có sẵn mà Bash shell cung cấp. Nếu bạn gõ help
tại dòng lệnh, Bash sẽ liệt kê chúng cho bạn.
help
Sử dụng lối ra để rời khỏi chroot
Môi trường:
exit
Nếu bạn muốn loại bỏ chroot
môi trường, bạn có thể chỉ cần xóa nó:
rm -r testroot/
Thao tác này sẽ xóa đệ quy các tệp và thư mục trong chroot
Môi trường.
Tự động hóa để thuận tiện
Nếu bạn đang nghĩ rằng chroot
môi trường có thể hữu ích cho bạn, nhưng chúng hơi khó thiết lập, hãy nhớ rằng bạn luôn có thể chịu khó khăn và rủi ro từ các tác vụ lặp đi lặp lại bằng cách sử dụng bí danh, hàm và tập lệnh.
LIÊN QUAN: Cách tạo Bí danh và Hàm Shell trên Linux