Tập tin Sudoers, kích hoạt NOPASSWD cho người dùng, tất cả các lệnh


142

Lời nói đầu

Đây là một câu hỏi khá phức tạp liên quan đến tệp Sudoers và lệnh sudo nói chung.

LƯU Ý: Tôi đã thực hiện những thay đổi này trên một máy chuyên dụng chạy Ubuntu Desktop 13.04, mà tôi sử dụng hoàn toàn cho mục đích học tập. Tôi hiểu rằng đó là một rủi ro bảo mật rất lớn để kích hoạt NOPASSWD sudo.

Câu hỏi

Ban đầu, thay đổi duy nhất của tôi đối với tệp sudoers (/ etc / sudoers) là một dòng, một đặc tả người dùng nên kích hoạt 'nicholsonjf' để chạy tất cả các lệnh bằng sudo mà không phải nhập mật khẩu (xem dòng bắt đầu bằng 'nicholsonjf '):

# 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"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL
nicholsonjf    ALL=NOPASSWD: ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

Tuy nhiên, điều này không hoạt động và tôi vẫn được nhắc nhập mật khẩu mỗi lần tôi chạy một lệnh là 'nicholsonjf'. Tôi chỉ có thể bắt đầu chạy các lệnh sudo dưới dạng 'nicholsonjf' khi tôi xóa 'nicholsonjf' khỏi nhóm sudo và quản trị viên.

Bất cứ ai có thể giải thích tại sao điều này làm việc?

Có phải vì người dùng 'nicholsonjf' đã kế thừa quyền sudo từ hai thông số kỹ thuật của nhóm 'admin' và 'sudo' (được xem bên dưới trong tệp sudoers), đã ghi đè lên đặc tả người dùng 'nicholsonjf' vì chúng nằm sâu hơn trong tập tin cấu hình?


7
lưu ý: ALL = NOPASSWD: ALL phải là ALL = (ALL) NOPASSWD: ALL hoặc nếu không nó không hoạt động ...
André Verwijs


Câu trả lời:


164

Dòng bạn thêm đã bị ghi đè. Từ man sudoers:

Khi nhiều mục khớp với người dùng, chúng được áp dụng theo thứ tự. Trong trường hợp có nhiều trận đấu, trận đấu cuối cùng được sử dụng (không nhất thiết phải là trận đấu cụ thể nhất).

Trong trường hợp của bạn nicholsonjflà một thành viên của nhóm, sudovì vậy đối với anh ta, dòng này được áp dụng:

%sudo   ALL=(ALL:ALL) ALL

Nếu bạn muốn ghi đè các mục trong /etc/sudoerschỉ cần đặt các mục mới sau chúng.

Mục nhập mới sẽ giống như

myuser ALL=(ALL) NOPASSWD: ALL cho một người dùng, hoặc

%sudo ALL=(ALL) NOPASSWD: ALL cho một nhóm


6
Để có một giải pháp hoàn chỉnh, tôi muốn thấy điều gì đó NOPASSWDtrong câu trả lời này ...
Daniel Alder

22
Tôi nghĩ, giải pháp nên là:%sudo ALL=(ALL) NOPASSWD:ALL
Daniel Alder

3
@DanielAlder: Dòng đặc tả từ câu hỏi nicholsonjf ALL=NOPASSWD: ALLlà chính xác. Nó chỉ ở một chỗ sai như tôi đã giải thích trong câu trả lời. ------ Đặc Runasđiểm kỹ thuật - trong trường hợp của bạn (ALL)- là tùy chọn. Nếu bạn bỏ qua đặc tả, bạn có thể chạy các lệnh như rootvà bạn không thể sử dụng -u-gcác tùy chọn sudo.
pabouk

Đây là một rủi ro bảo mật tồi tệ hơn vì nó cho phép nhiều người dùng truy cập mật khẩu. Nếu đó là PC cá nhân của bạn thì điều đó không đáng kể - có lẽ. Tôi chỉ cần di chuyển dòng cá nhân, để cuối cùng.
Mark Williams

4
Một bổ sung, thay vì chỉnh sửa, nếu sử dụng một cái gì đó dựa trên debian / ubfox (có thể được áp dụng chung, không thấy ở nơi khác) Đặt cược thực hành tốt nhất tuyệt đối của bạn là thêm các lệnh tùy chỉnh vào một tệp trong /etc/sudoers.d/ và để lại sudoers chính nó được quản lý bởi người quản lý gói.
Aquarion

120

Đối với một người dùng, hãy thêm dòng này vào cuối sudoerstệp của bạn bằng cách sử dụngsudo visudo

superuser ALL=(ALL) NOPASSWD: ALL

Cho một nhóm

%supergroup  ALL=(ALL) NOPASSWD: ALL

8
Trước khi tôi đọc câu trả lời này, tôi đã làm %sudo ALL=NOPASSWD: ALLvà nó hoạt động. Tôi có phải là người duy nhất tìm thấy Extended Backus-Naur Form thực sự khó hiểu không?
Vince

4
@Vince Khi sử dụng lệnh của bạn, tôi không thể không sudocó mật khẩu là người dùng mà không có đặc quyền sudo. Ví dụ sudo -u root -i, hoạt động, nhưng sudo -u git -ikhông.
NeverEinatingQueue

Đây là một câu trả lời hữu ích hơn đáng kể so với câu trả lời được chấp nhận, trong khi nó trả lời câu hỏi của OP, có lẽ không phải là điều mà hầu hết mọi người truy cập trang này thông qua Google tìm kiếm.
Mahmoud Al-Qudsi

3

Để không bao giờ nhắc nhở người dùng hiện tại cho một mật khẩu khi người dùng sử dụng sudolàm

echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/dont-prompt-$USER-for-password

điều này sẽ tạo một tệp được gọi /etc/sudoers.d/dont-prompt-<YOUR USERNAME>-for-sudo-passwordvà sẽ có nghĩa là người dùng mà bạn đã chạy lệnh đó sẽ không được nhắc nhập mật khẩu của họ khi thực hiện sudolệnh. Bạn vẫn sẽ được nhắc nhập mật khẩu trong các ngữ cảnh khác, chẳng hạn như cài đặt nội dung từ ứng dụng đồ họa Phần mềm Ubuntu .

Những lợi ích của việc thực hiện theo cách này so với việc thêm dòng trong echolệnh vào /etc/sudoerssử dụng sudo visudo(như được đề xuất bởi các câu trả lời khác) là

  1. /etc/sudoersđôi khi được sửa đổi bởi các bản cập nhật hệ thống, trong khi các tệp /etc/sudoers.dkhông
  2. các sudo visudophương pháp là dễ bị lỗi (bằng chứng là câu hỏi này rất), trong khi sao chép / dán một lệnh được khó khăn hơn nhiều để mess up

Theo sudo cat /etc/sudoers.d/READMEtính năng này (đưa các tệp sudoer bổ sung vào /etc/sudoers.d) đã được bật theo mặc định kể từ Debian 1.7.2p1-1, xuất hiện vào cuối những năm 1990 (Ubuntu dựa trên Debian ).


(vui lòng chỉnh sửa câu trả lời của tôi nếu bạn có thể đưa ra một tên tệp tốt hơn)
Boris

0

Như Vince đã đề cập trong một bình luận , bạn có thể sử dụng dòng này:

%sudo ALL=NOPASSWD: ALL

(Điều này khác với các dòng được hiển thị trong các câu trả lời đó và nó đã giải quyết vấn đề cho tôi.)


@Eliah đây không phải là khác với các câu trả lời khác. Tất cả những gì nó làm là thay thế trình giữ chỗ supergrouptrong câu trả lời của Fedir bằng sudo. Điều gì tiếp theo, một người dùng khác cho nhóm wheel? Hoặc bất kỳ nhóm nào khác mà người dùng tình cờ đang sử dụng?
muru

1
@muru "Tất cả những gì nó làm là thay thế trình giữ chỗ supergrouptrong câu trả lời của Fedir bằng sudo." Gì? Thay thế supergroupbằng sudotrong %supergroup ALL=(ALL) NOPASSWD:ALLsản lượng dòng %sudo ALL=(ALL) NOPASSWD:ALL, không %sudo ALL=NOPASSWD: ALL.
Eliah Kagan

Điều này được cho là tồi tệ hơn, vì hiện tại NOPASSWD chỉ dành cho root là người dùng mục tiêu. Vì vậy, nó thậm chí không trả lời chính xác câu hỏi!
muru

@muru Điều thậm chí không thể tranh cãi , tuy nhiên, là sự thay thế supergroupbằng sudo. Đây là câu trả lời của riêng nó, không phải là một bài cảm ơn hay một bản sao của câu trả lời khác. Nhưng vâng, tôi đồng ý: trừ khi họ có ý định đó , điều này sẽ không tốt cho hầu hết người dùng như các phương pháp trong các câu trả lời khác. (Tuy nhiên, đặc biệt là xem xét các câu hỏi nói "tất cả các lệnh," không phải là "tất cả người dùng mục tiêu," Tôi không nghĩ rằng đây là có hiệu lực thậm chí không cố gắng trả lời các câu hỏi đã được.)
Eliah Kagan

Điều này làm việc cho tôi và tôi muốn chia sẻ với những người dùng khác :) (xóa nhận xét của tôi nếu muốn).
E. Pháo đài
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.