Nếu tôi hiểu chính xác ý kiến của bạn, vấn đề ở đây là lệnh sẽ được ban hành thông qua kết nối không có khả năng nhập mật khẩu mà sudo mặc định yêu cầu. Ngoài ra, trong nhiều bản phân phối HĐH, sudo sẽ mặc định yêu cầu TTY - điều mà chương trình này có thể không có.
Tuy nhiên, sudo có thể có cấu trúc quyền rất chi tiết, cho phép có thể cho phép một hoặc nhiều người dùng phát hành một lệnh cụ thể mà không cần mật khẩu và TTY. Dưới đây, tôi sẽ chỉ ra ba cách để cấu hình điều này cho nhu cầu của bạn. Cho dù bạn chọn loại nào, người dùng sẽ có thể ra lệnh sudo rndc reload
mà không cần phải nhập mật khẩu.
(Ngoài ra, điều này có thể không cần thiết, nhưng ... vui lòng nhớ tạo một bản sao lưu của tệp sudoers của bạn trước khi chỉnh sửa nó, để giữ một vỏ trong đó bạn đã mở root trong trường hợp bạn cần quay lại bản sao lưu và chỉnh sửa sử dụng visudo
thay vì sudo vi /etc/sudoers
. Hy vọng rằng các biện pháp phòng ngừa này sẽ không cần thiết, nhưng ... tốt hơn là có chúng và không cần chúng hơn là ngược lại!)
1. Nếu bạn không muốn yêu cầu TTY cho bất kỳ yêu cầu nào
Cách đơn giản nhất để thoát khỏi các yêu cầu TTY (nếu có) là để đảm bảo rằng các dòng bắt đầu bằng Defaults
trong /etc/sudoers
không chứa từ requiretty
- thay vào đó, nó nên chứa !requiretty
. Tuy nhiên, nếu bạn làm điều này, điều đó có nghĩa là không có lệnh sudo nào sẽ yêu cầu một tty!
Bạn cũng sẽ cần thêm dòng
rndcuser ALL = (root) NOPASSWD: /path/to/rndc reload, /path/to/dnssec-keygen, /path/to/other/program
2. Nếu bạn muốn yêu cầu TTY cho tất cả người dùng ngoại trừ người dùng này
Điều này có thể được thực hiện bằng cách đặt mặc định cho một người dùng này, như thế này:
Defaults:rndcuser !requiretty
rndcuser ALL = (root) NOPASSWD: /path/to/rndc reload, /path/to/dnssec-keygen, /path/to/other/program
3. Nếu bạn muốn yêu cầu TTY cho tất cả các lệnh ngoại trừ một lệnh này bởi một người dùng này
Điều này phức tạp hơn một chút, do cú pháp của tệp sudoers. Bạn cần tạo bí danh lệnh cho lệnh và sau đó đặt mặc định cho bí danh lệnh đó, như sau:
Cmnd_Alias RNDC_CMD = /path/to/rndc reload, /path/to/dnssec-keygen, /path/to/other/program
Defaults!RNDC_CMD !requiretty
rndcuser ALL = (root) NOPASSWD: RNDC_CMD
sudo
là cho. Sự phản đối kinh doanh của bạn đối với anh ấy sử dụngsudo
cho việc này là gì?