10 cấu hình Sudoers hữu ích để thiết lập 'sudo' trên Linux

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:

  1. 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,
  2. 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),
  3. 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
  4. 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:

  1. Đượ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
  2. Để 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:

Create Custom Sudo Log File

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
Log sudo Input Output

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ể:

  1. always – luôn giảng dạy một người dùng.
  2. 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)
  3. 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"
Lecture Sudo Users

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 
Increase Sudo Password Attempts

Để đặ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 
Let's Sudo Insult You When Enter Wrong Password

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.