Trong hệ điều hành Linux và các hệ điều hành tương tự Unix khác, chỉ người dùng root mới có thể chạy tất cả các lệnh và thực hiện một số hoạt động quan trọng trên hệ thống như cài đặt và cập nhật, gỡ bỏ các gói tin, tạo người dùng và nhóm, chỉnh sửa các tệp cấu hình hệ thống quan trọng và vân vân.
Tuy nhiên, một quản trị viên hệ thống người giả định là người dùng root có thể cho phép người dùng hệ thống bình thường khác với sự trợ giúp của lệnh sudo và một số cấu hình để chạy một số lệnh cũng như thực hiện một số hoạt động quan trọng của hệ thống bao gồm những hoạt động đã được đề cập ở trên.
Hoặc, quản trị viên hệ thống có thể chia sẻ mật khẩu người dùng root (đây không phải là phương pháp được khuyến nghị) để người dùng hệ thống bình thường có quyền truy cập vào tài khoản người dùng root thông qua lệnh su.
sudo cho phép người dùng được phép thực thi một lệnh như người dùng root (hoặc người dùng khác), như được chỉ định bởi chính sách bảo mật:
- Nó đọc và phân tích /etc/sudoers, tìm kiếm người gọi và quyền của người gọi,
- rồi yêu cầu người gọi nhập mật khẩu (thông thường là mật khẩu của người dùng, nhưng cũng có thể là mật khẩu của người dùng mục tiêu. Hoặc nó có thể được bỏ qua với tag NOPASSWD),
- sau đó, sudo tạo một tiến trình con trong đó nó gọi lệnh setuid() để chuyển sang người dùng mục tiêu
- tiếp theo, nó thực thi một shell hoặc lệnh được truyền vào như đối số trong tiến trình con trên.
Dưới đây là mười cấu hình tệp /etc/sudoers để thay đổi hành vi của lệnh sudo sử dụng các mục Defaults.
$ sudo cat /etc/sudoers
Tệp /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Defaults logfile="/var/log/sudo.log"
Defaults lecture="always"
Defaults badpass_message="Password is wrong, please try again"
Defaults passwd_tries=5
Defaults insults
Defaults log_input,log_output
Các mục Defaults khác nhau
Defaults parameter, parameter_list #affect all users on any host
Defaults@Host_List parameter, parameter_list #affects all users on a specific host
Defaults:User_List parameter, parameter_list #affects a specific user
Defaults!Cmnd_List parameter, parameter_list #affects a specific command
Defaults>Runas_List parameter, parameter_list #affects commands being run as a specific user
Trong phạm vi hướng dẫn này, chúng ta sẽ tập trung vào loại đầu tiên trong các Defaults dưới đây. Các tham số có thể là các cờ, giá trị số nguyên, chuỗi hoặc danh sách.
Bạn nên lưu ý rằng các cờ mặc định là boolean và có thể được tắt bằng toán tử '!'
, và danh sách có hai toán tử gán bổ sung, +=
(thêm vào danh sách) và -=
(xóa khỏi danh sách).
Defaults parameter
OR
Defaults parameter=value
OR
Defaults parameter -=value
Defaults parameter +=value
OR
Defaults !parameter
1. Thiết lập đường dẫn an toàn
Đây là đường dẫn được sử dụng cho mọi lệnh chạy bằng sudo, nó có hai ý nghĩa quan trọng:
- Được sử dụng khi một quản trị viên hệ thống không tin tưởng rằng người dùng sudo có biến môi trường đường dẫn an toàn
- Để tách biệt “đường dẫn root“ và “đường dẫn người dùng“, chỉ những người dùng được xác định bởi exempt_group không bị ảnh hưởng bởi cài đặt này.
Để thiết lập, thêm dòng sau:
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
2. Kích hoạt sudo trong TTY User Login Session
Để kích hoạt việc gọi sudo từ một tty thực sự nhưng không thông qua các phương pháp như cron hoặc cgi-bin scripts, thêm dòng sau:
Defaults requiretty
3. Chạy lệnh sudo bằng pty
Một vài lần, kẻ tấn công có thể chạy một chương trình độc hại (như một virus hoặc phần mềm độc hại) sử dụng sudo, làm cho phân quyền một tiến trình nền mà vẫn tồn tại trên thiết bị terminal của người dùng ngay cả khi chương trình chính đã kết thúc.
Để tránh tình huống như vậy, bạn có thể cấu hình sudo để chỉ chạy các lệnh khác từ psuedo-pty bằng cách sử dụng tham số use_pty
, bất kể việc ghi I/O đã được bật hay không, như sau:
Defaults use_pty
4. Tạo một tệp nhật ký sudo
Theo mặc định, sudo ghi nhật ký qua syslog(3). Tuy nhiên, để chỉ định một tệp nhật ký tùy chỉnh, sử dụng tham số logfile như sau:
Defaults logfile="/var/log/sudo.log"
Để ghi nhật ký tên máy chủ và năm bốn chữ số trong tệp nhật ký tùy chỉnh, sử dụng các tham số log_host và log_year tương ứng như sau:
Defaults log_host, log_year, logfile="/var/log/sudo.log"
Dưới đây là một ví dụ về tệp nhật ký sudo tùy chỉnh:
5. Ghi nhập/xuất lệnh sudo
Các tham số log_input và log_output cho phép sudo chạy lệnh trong pseudo-tty và ghi lại mọi lệnh nhập của người dùng và mọi kết quả được gửi đến màn hình tương ứng.
Thư mục ghi I/O mặc định là /var/log/sudo-io, và nếu có một số phiên tuần tự, nó sẽ được lưu trữ trong thư mục này. Bạn có thể chỉ định một thư mục tùy chỉnh thông qua tham số iolog_dir.
Defaults log_input, log_output
Một số chuỗi escape được hỗ trợ, ví dụ như %{seq}
được mở rộng thành một số dấu thập phân tăng dần cơ số 36, chẳng hạn như 000001, trong đó mỗi hai chữ số được sử dụng để tạo ra một thư mục mới, ví dụ 00/00/01 như trong ví dụ dưới đây:
$ cd /var/log/sudo-io/
$ ls
$ cd 00/00/01
$ ls
$ cat log
Bạn có thể xem các tệp còn lại trong thư mục đó bằng lệnh cat.
6. Giảng dạy người dùng sudo
Để giảng dạy người dùng sudo về việc sử dụng mật khẩu trên hệ thống, sử dụng tham số lecture như sau.
Nó có 3 giá trị có thể:
- always – luôn giảng dạy một người dùng.
- once – chỉ giảng dạy một người dùng lần đầu tiên họ thực thi lệnh sudo (điều này được sử dụng khi không có giá trị được chỉ định)
- never – không bao giờ giảng dạy người dùng.
Defaults lecture="always"
Ngoài ra, bạn có thể thiết lập một tệp giảng dạy tùy chỉnh với tham số lecture_file, nhập thông báo thích hợp vào trong tệp:
Defaults lecture_file="/path/to/file"
7. Hiển thị thông báo tùy chỉnh khi bạn nhập sai mật khẩu sudo
Khi người dùng nhập sai mật khẩu, một thông báo cụ thể được hiển thị trên dòng lệnh. Thông báo mặc định là “xin lỗi, hãy thử lại”, bạn có thể sửa thông báo bằng cách sử dụng tham số badpass_message như sau:
Defaults badpass_message="Password is wrong, please try again"
8. Tăng giới hạn thử mật khẩu sudo
Tham số passwd_tries được sử dụng để chỉ định số lần một người dùng có thể thử nhập mật khẩu.
Giá trị mặc định là 3:
Defaults passwd_tries=5
Để đặt thời gian chờ mật khẩu (mặc định là 5 phút) bằng tham số passwd_timeout, thêm dòng sau:
Defaults passwd_timeout=2
9. Sử dụng khiển khi bạn nhập sai mật khẩu
Trong trường hợp người dùng nhập sai mật khẩu, sudo sẽ hiển thị thông điệp khiển trên thiết bị terminal với tham số khiển. Điều này sẽ tự động tắt tham số badpass_message.
Defaults insults
10. Tìm hiểu thêm cấu hình sudo
Ngoài ra, bạn có thể tìm hiểu thêm các cấu hình lệnh sudo bằng cách đọc: Sự khác biệt giữa su và sudo và Cách cấu hình sudo trong Linux.
Trên đây là tất cả! Bạn có thể chia sẻ các cấu hình hoặc mẹo và thủ thuật hữu ích khác về lệnh sudo với cộng đồng người dùng Linux qua phần nhận xét bên dưới.