(91) 350-9520 support@omarine.org M-F: 7 AM - 7 PM; Weekends: 9 AM - 5 PM

Điều khiển Sudo

Gói Sudo phiên bản hiện hành là sudo-1.8.11p1. Giống như Su, Sudo là phương tiện ủy quyền để một người sử dụng bình thường có thể thực hiện các tác vụ như người sử dụng đặc quyền, thường là root, với hạn chế nhất định, chủ yếu là giới hạn có kiểm soát về lệnh, môi trường lệnh, và đối tượng áp dụng với cách thức xác minh kèm theo. Phạm vi ủy quyền tùy thuộc vào cấu hình, việc này có thể được thực hiện một cách mềm dẻo bởi nhà quản trị hệ thống, thông qua tệp cấu hình /etc/sudoers, và trở thành chính sách bảo mật sudoers. Tinh thần của chính sách là người sử dụng tự xem xét phạm vi ủy quyền dành cho mình trước khi sử dụng Sudo. Bạn có thể kiểm tra xem mình có được sử dụng Sudo hợp lệ hay không bằng cách chạy lệnh trợ giúp dưới đây, đó là lệnh sudo với lựa chọn -l, lệnh này cung cấp cả thông tin về lệnh và môi trường của người sử dụng yêu cầu

sudo -l

Cấu hình Sudo thông qua tệp sudoers không phải là cách duy nhất, Sudo còn phối hợp với các bộ phận bảo mật khác trong hệ thống chẳng hạn như PAM để điều chỉnh giới hạn, thông qua dịch vụ bảo mật sudo. Từ phiên bản sudo-1.8.8, sudoers có thể qui định dịch vụ PAM phối hợp. Chúng ta có thể chọn dịch vụ su hay su-1, hoặc một dịch vụ nào đó thay vì sudo. Tuy nhiên điều này chỉ có ý nghĩa về tên dịch vụ, và không có nghĩa rằng sudoers có thể can thiệp vào nội dung của dịch vụ. Khi có xung đột trùng tên biến, sudoers sẽ chiếm ưu tiên cao hơn.

Một sự linh hoạt trong biện pháp xác minh, Sudo cung cấp một vé cho mỗi phiên làm việc với thời hạn timeout mặc định là 5 phút(có thể cấu hình để thay đổi mặc định). Trong thời hạn của vé, thực hiện lệnh không phải xác minh. Đây là điều thuận tiện đối với những công việc đòi hỏi chuyển đổi qua lại liên tục giữa quyền thực hiện thông thường và quyền đặc biệt của người sử dụng mục tiêu, thường là root. Vé có thể hủy lập tức với lệnh sudo -k .Điểm mạnh nữa so với Su là sau mỗi lệnh thực hiện, sự trở lại người sử dụng bình thường được tiến hành tự động. Sự thường xuyên ở vai trò người sử dụng bình thường là một thói quen tốt và an toàn, tránh mang đặc quyền có thể vô tình phá hỏng hệ thống.

Để tăng tính an toàn, Sudo mặc định được cấu hình với một môi trường riêng khá nhỏ hẹp, không liên quan tới các biến môi trường của người sử dụng hiện hành. Đó là một môi trường mới với một danh sách trắng(whitelist) các biến môi trường. Sudoers cũng có thể được cấu hình không xác lập môi trường mới mà kế thừa môi trường hiện hành với sự sàng lọc qua một danh sách đen(blacklist) các biến môi trường nguy hiểm tiềm tàng, nhưng cách lựa chọn này không an toàn và không được khuyến khích. Như vậy, với môi trường nhỏ hẹp ban đầu, Sudo dù mạnh cũng chỉ làm được những việc đơn giản mà thôi. Bài này giới thiệu các cách mở rộng môi trường cho Sudo vừa đủ để thực hiện một công việc cần thiết cụ thể.

Tôi lấy ví dụ điển hình cần dùng Sudo. Khi xây dựng các gói phần mềm, chúng ta thường chạy cấu hình và biên dịch với vai trò người sử dụng bình thường, còn cài đặt(make install) với quyền root, tất nhiên là muốn dùng Sudo. Có một vấn đề đặt ra trong trường hợp xây dựng các gói KDE, quá trình make install không chỉ đơn giản là copy và sắp đặt các tệp nhị phân vào nơi cài đặt, mà còn thực hiện biên dịch thêm và kết nối đối tượng. Việc này đòi hỏi một đường dẫn đến các tệp tiêu đề của Qt phải hiện diện trong môi trường Sudo. Thiếu đường dẫn này, Sudo sẽ thực hiện lệnh thất bại. Trong tình huống này, lệnh trợ giúp sudo -l bên trên không giúp gì được cho chúng ta. Trên hệ thống Omarine, đó là đường dẫn tới thư mục /usr/lib64/qt/include/. Chúng ta phải đưa một biến môi trường tên là CPLUS_INCLUDE_PATH với giá trị là /usr/lib64/qt/include vào môi trường Sudo.

Bạn dùng chương trình visudo để soạn thảo tệp cấu hình /etc/sudoers, chạy visudo phải có quyền root

sudo visudo

và chèn vào dòng sau đây:

Defaults env_file = “/etc/environment”

(/etc/environment là tệp môi trường tiêu chuẩn, bạn có thể sử dụng tệp khác tùy thích)

Rồi đưa cặp “Khóa=Giá trị” của biến CPLUS_INCLUDE_PATH vào tệp môi trường:

sudo echo “CPLUS_INCLUDE_PATH=/usr/lib64/qt/include” >>/etc/environment

Chúng ta còn có cách giải quyết khác không dùng đến sudoers. mà sử dụng dịch vụ sudo của PAM như đã nêu trên. Chúng ta soạn thảo mục dịch vụ môi trường trong dịch vụ sudo. Mỗi dịch vụ PAM là một tệp văn bản. Dịch vụ sudo là tệp /etc/pam.d/sudo. Soạn thảo tệp này phải có quyền root, cho nên chúng ta mở nó bằng dòng lệnh

sudo -e /etc/pam.d/sudo

sudo

Dòng chữ trong ô chữ nhật màu xanh là dành cho môi trường Sudo, loại dịch vụ là xác minh(auth), điều khỉển là yêu cầu(required), module là thư viện môi trường pam_env.so. Mục nhập dịch vụ này đảm bảo module môi trường pam_env.so sẽ được tải vào hệ thống mỗi khi dịch vụ sudo được dùng đến.

Cặp “Khóa=Giá trị” của biến CPLUS_INCLUDE_PATH cũng cần đưa vào tệp môi trường như phương pháp thứ nhất

sudo echo “CPLUS_INCLUDE_PATH=/usr/lib64/qt/include” >>/etc/environment

Lệnh sudo soạn thảo: sudo -e <file>

Bên trên chúng ta dùng lệnh sudo -e /etc/pam.d/sudo để soạn thảo tệp dịch vụ sudo và cửa sổ soạn thảo Kate mở ra thay vì chương trình vi mặc định vì tôi đã thay đổi giá trị mặc định của biến editor bằng cách bổ sung vào tệp cấu hình sudoers dòng sau

Defaults editor = “/usr/bin/kate:/usr/bin/vi”

Từ đây chúng ta có thể soạn thảo trực tiếp các tệp văn bản hệ thống, là các tệp chỉ được soạn thảo với quyền root, bằng trình soạn thảo văn bản Kate rất thuận tiện.

Khi cần thay đổi trình soạn thảo mặc định, chẳng hạn thay đổi về vi, bạn chỉ cần xuất một biến SUDO_EDITOR, VISUAL hoặc EDITOR, việc này có thể thực hiện ngay trong môi trường người sử dụng, ví dụ: export EDITOR=/usr/bin/vi

Khác với các trường hợp Sudo chạy lệnh, một môi trường mới được xác lập, khi Sudo chạy trình soạn thảo, như trên, chúng ta thấy biến môi trường EDITOR của người sử dụng không thay đổi.

Advertisements

Gửi phản hồi

Website này sử dụng Akismet để hạn chế spam. Tìm hiểu bình luận của bạn được duyệt như thế nào.

%d bloggers like this: