Tại sao tùy chọn sudoers NOPASSWD không hoạt động?


75

Tôi có một dòng NOPASSWD trong / etc / sudoers (được chỉnh sửa bằng visudo)

gatoatigrado    ALL=(ALL) NOPASSWD: /bin/set-slow-cpufreq

Tuy nhiên, đầu ra là,

gatoatigrado@coral:~> sudo -n /bin/set-slow-cpufreq
sudo: sorry, a password is required to run sudo

Loại lệnh này hoạt động trên máy OpenSuSE, nhưng không phải trên Ubuntu 11.10. Tôi đang làm gì sai?

Lưu ý : Tôi không thể tìm thấy bất kỳ thông điệp nhật ký hệ thống có liên quan, ví dụ như thông qua tail -f /var/log/syslog.

biên tập

Đây là / etc / sudoers.

Defaults    env_reset

# things I've tried copying from an opensuse machine
Defaults always_set_home
Defaults env_keep = "LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS XDG_SESSION_COOKIE"

root    ALL=(ALL:ALL) ALL
gatoatigrado ALL=NOPASSWD: /bin/set-slow-cpufreq
%admin ALL=(ALL) ALL
%sudo   ALL=(ALL:ALL) ALL

2
Bạn có thể hiển thị đầy đủ sudoers, thứ tự của các quy tắc không phải là không liên quan.
enzotib

Câu trả lời:


117

Bạn nên đặt dòng đó sau dòng với quy tắc cho sudonhóm, bởi vì, như sudoerstrang man nêu:

   When multiple entries match for a user, they are applied in order.
   Where there are multiple matches, the last match is used (which is not
   necessarily the most specific match).

5
như một lưu ý bổ sung, điều này cũng áp dụng cho người dùng trong nhiều nhóm: ví dụ: người dùng nằm trong nhóm quản trị viên và nhóm sudo nếu quy tắc cho sudo là sau quản trị viên thì quy tắc sudo sẽ ghi đè quy tắc quản trị viên cho người dùng trong cả hai nhóm.
Populus

2
Cảm ơn! Tôi đã thêm dòng của tôi vào cuối /etc/sudoersvà bây giờ nó hoạt động. Giải thích đầy đủ ở đây cho những người quan tâm: techglimpse.com/ubfox-sudoers-nopasswd-option-not- làm việc
Elimisteve

4

Lý tưởng nhất là nếu bạn đang tùy chỉnh những lệnh nào có thể được chạy qua, sudobạn nên thực hiện những thay đổi này trong một tệp riêng /etc/sudoers.d/thay vì chỉnh sửa sudoerstệp trực tiếp. Bạn cũng nên luôn luôn sử dụng visudođể chỉnh sửa (các) tệp.

Thí dụ: sudo visudo -f /etc/sudoers.d/slowcpu

Chèn quyền cấp dòng của bạn: gatoatigrado ALL=NOPASSWD: /bin/set-slow-cpufreq

Sau đó lưu và thoát và visudosẽ cảnh báo bạn nếu bạn có bất kỳ lỗi cú pháp.

Bạn có thể chạy sudo -lđể xem các quyền mà người dùng của bạn đã được cấp, nếu bất kỳ NOPASSWDlệnh cụ thể nào của người dùng xuất hiện TRƯỚC bất kỳ %groupyouarein ALL=(ALL) ALLlệnh nào trong đầu ra, bạn sẽ được nhắc nhập mật khẩu.

Nếu bạn thấy mình tạo ra nhiều tệp sudoers.d này thì có lẽ bạn sẽ muốn tạo chúng có tên cho mỗi người dùng để họ dễ hình dung hơn. Hãy nhớ rằng thứ tự của TÊN TÊN TÊN và các QUY TẮC trong tệp là rất quan trọng, LAST một lần tải sẽ thắng, cho dù đó là THÊM hay ÍT hơn so với các mục trước.

Bạn có thể kiểm soát thứ tự tên tệp bằng cách sử dụng tiền tố 00-99 hoặc aa / bb / cc, tuy nhiên, hãy nhớ rằng nếu bạn có BẤT K file tệp nào không có tiền tố số, chúng sẽ tải sau các tệp được đánh số, ghi đè các thiết lập. Điều này là do tùy thuộc vào cài đặt ngôn ngữ của bạn, "sắp xếp từ vựng", vỏ sử dụng các số sắp xếp trước và sau đó có thể xen kẽ chữ hoa và chữ thường khi sắp xếp theo thứ tự "tăng dần".

Hãy thử chạy printf '%s\n' {{0..99},{A-Z},{a-z}} | sortprintf '%s\n' {{0..99},{A-Z},{a-z}} | LANG=C sortđể xem liệu ngôn ngữ hiện tại của bạn in AaBbCcvv hay ABCsau đó abcđể xác định tiền tố chữ cái "cuối cùng" tốt nhất sẽ sử dụng là gì.


Tôi đồng ý với điều này. Một số logic trong việc chỉnh sửa tệp / etc / sudoers dường như phản tác dụng trực quan - Tôi không thể lấy% wheel ALL = (ALL) NOPASSWD: ALL để làm việc theo cách nó được viết bằng sudoers cho đến khi tôi đọc một bài đăng mà ai đó nói #includedir Dòng /etc/sudoers.d phải ở trước các dòng khác như% SUDO và% WHEEL. Khi tôi đặt thư mục #incoide bên trên các quyền của nhóm khác, chúng bắt đầu hoạt động. Vì vậy, sau đó tôi đã tạo các tệp cho mỗi nhóm trong /etc/sudoers.d/ được đánh số theo thứ tự giống như trong tệp sudoers, nhưng root ALL = (ALL) ALL vẫn phải là sudoers bên dưới dòng #includedir. Kỳ dị.
AveryFreeman

Trên thực tế tôi nghĩ rằng bao gồm nên ở cuối của sudoers. Những gì bạn có thể đã nhìn thấy là một trong những tệp khác trong sudoers.d của bạn đã hoàn tác thay đổi của bạn. Bạn cũng có thể có một dòng sâu hơn trong tệp chính của bạn đã giới hạn nhóm bánh xe. Hãy nhớ rằng sudoers được xử lý trong đó quy tắc cuối cùng để áp dụng cho lệnh hoặc nhóm sẽ thắng vì vậy sẽ giúp cụ thể hơn nhưng nếu lệnh ANY chung xuất hiện ở cuối và không có NOPASSWD thì nó sẽ ghi đè lên các ngoại lệ trước đó của bạn. Đây là lý do tại sao bạn nên có các quy tắc của mình trong các tệp riêng biệt để chúng được xử lý sau.
dragon788

Tôi không nghĩ vậy, đó là một bản cài đặt hoàn toàn mới của vòm. Tất cả những gì tôi đã làm là cố gắng và bỏ qua một dòng. Nhưng đó chắc chắn là một điều tốt để kiểm tra, cảm ơn.
AveryFreeman

Một số hệ thống không thực sự sử dụng bánh xe và thay vào đó sử dụng một nhóm được gọi là sudo hoặc adm hoặc admin. Tôi không thể nhớ lại hành vi Arch nhưng bạn có thể chạy idvà xem bạn thuộc nhóm nào.
dragon788

Arch sử dụng bánh xe.
AveryFreeman

4

Chỉ cần chạy vào đây quá.

Tình huống của tôi là tôi đang thiết lập một hệ thống từ xa sẽ chạy không đầu. Tôi đã kích hoạt mã hóa toàn bộ ổ đĩa (nếu không, kẻ tấn công có quyền truy cập vật lý có thể làm bất cứ điều gì anh ta muốn) Tôi chỉ muốn xác thực bằng khóa pub (tôi sẽ bỏ đặt mật khẩu để lược đồ "có gì đó, biết điều gì đó" sẽ là mật khẩu khóa bảo vệ - đăng nhập tất nhiên bị vô hiệu hóa hoàn toàn)

Trình cài đặt Ubuntu nhắc nhở người dùng quản trị viên không root được thêm vào nhóm sudo. Sau đó tôi đã tự thêm vào sudoerstệp bằng cách sử dụng sudo visudo:

my_username ALL=(ALL:ALL) NOPASSWD:ALL

LƯU Ý nếu bạn sử dụng nopasswd trên máy tính xách tay của mình, bạn phải luôn khóa máy tính khi bạn bỏ đi nếu không kẻ tấn công thông thường có thể thỏa hiệp rất nhiều trong khi bạn thức dậy để cho kem vào cà phê

Tôi vẫn phải xác thực mật khẩu.

Câu trả lời của enzotib là chìa khóa cho những gì đang diễn ra. Nhóm sudo xuất hiện trong sudoers sau khi nhập tên người dùng của tôi.

Thay vì di chuyển mục nhập của tôi bên dưới dòng sudo, tôi chỉ cần xóa dòng tôi đã thêm trước đó và sau đó thêm vào NOPASSWDmục nhập cho%sudo

Điều đó dường như làm việc. Một lần nữa chỉ sử dụng nopasswd nếu bạn thực sự cần nó (Trong trường hợp của tôi, đó chính xác là những gì tôi cần, đối với hầu hết người dùng yêu cầu mật khẩu cho hoạt động sudo là tốt nhất)

CẢNH BÁO bổ sung: Luôn chỉnh sửa sudoers bằng visudo. (sudo visudo) Ngoài ra, việc mở một cửa sổ khác chuyển sang người dùng root cho phép bạn khôi phục mọi lỗi bạn có thể mắc phải trong khi thay đổi tệp sudoers.


Không bao giờ nên cho phép NOPASSWD chống lại bất kỳ / tất cả các lệnh, điều này có nghĩa là bất kỳ ai vào hệ thống của bạn và quản lý để đưa người dùng vào nhóm sudo sẽ có thể thực hiện BẤT CỨ LÚC NÀO cho hệ thống của bạn RẤT nhanh chóng. Tôi có thể dễ dàng thực hiện việc này chỉ với vài phút truy cập bằng LiveCD hoặc bằng cách lừa người dùng của bạn chạy một cmd được gọi là sudosử dụng quyền của riêng bạn để thêm người dùng khác vào nhóm sudo ngoài việc chạy lệnh được yêu cầu của bạn.
dragon788

2
Đừng đưa ra những tuyên bố như thế này. Trên một hệ thống không đầu, không nên thiết lập mật khẩu đăng nhập (thay vào đó dựa vào bàn phím) Tôi đã kích hoạt mã hóa toàn bộ đĩa để rất may mắn với đĩa cd trực tiếp đó. (bằng cách này sẽ cho phép bạn thực hiện tất cả các loại điều thú vị trên một hệ thống không được mã hóa bất kể tệp sudoers) Ngoài ra, bạn không thể viết thư cho bất kỳ vị trí nào trong PATH của tôi và tôi sẽ không cung cấp cho bạn trình bao trừ khi tôi tin tưởng bạn không cố gắng lật đổ hệ thống. Mối quan tâm bảo mật của bạn không phải là không hợp lệ, nó đơn giản là lỗi thời và không thể áp dụng phổ biến như bạn ngụ ý.
jorfus

Đối với những người không có hiểu biết sâu sắc về bảo mật như bạn, loại khuyến nghị này có thể tốt hơn so với giải pháp thay thế nhưng tôi đồng ý rằng nó không lý tưởng.
dragon788

@ dragon788 Đúng vậy, có lẽ cả hai chúng ta đều có thể chỉnh sửa các câu trả lời của mình để giúp người dùng ở mọi cấp độ tiến một bước tới bảo mật tốt hơn. Tôi sẽ thêm cảnh báo để kích hoạt mã hóa toàn bộ đĩa để ngăn chặn sự thỏa hiệp khi kẻ tấn công có quyền truy cập vật lý và một lưu ý rằng nếu người dùng máy tính xách tay quên khóa máy tính của mình ở nơi công cộng, sudo nopasswd có thể dẫn đến thỏa hiệp nhanh chóng. (Mặc dù tôi sẽ đề xuất cài đặt khóa nhanh năm phút và khóa nhanh khóa màn hình thực sự có thể dẫn đến bảo mật tốt hơn.)
jorfus

Cập nhật tuyệt vời, câu trả lời của tôi không có bất kỳ khuyến nghị mạnh mẽ nào ngoài những bình luận này ở đây, và thật trớ trêu khi tôi sử dụng mã hóa toàn bộ đĩa, tôi đã kết thúc việc kích hoạt NOPASSWD vì tôi có mật khẩu rất an toàn khiến tôi phải gõ nhiều lần và tôi sử dụng xautolock để khóa máy sau một thời gian nhàn rỗi.
dragon788

0

Trên hệ thống từ xa, bỏ mã hóa, nhưng hãy để mọi thứ được sở hữu bởi một root như trong nhóm "Quản trị viên" - đó không phải là 0!
Bạn có thể sửa đổi #sudo -g Administrators những thứ cần truy cập đầy đủ - không phải trong sudo tệp, mà là .loginhồ sơ. Bất kỳ tập lệnh tiêu chuẩn nào hiện nay đều có thể có quyền truy cập vào điều khiển từ xa dưới dạng "root" và bạn có thể bảo vệ các tệp phải được bảo vệ.
Một "nhóm" tiện dụng khác là "Hộp cát" với một thư mục đăng nhập trong bộ đệm của trình duyệt và có thể đọc cái này một cách tự do và không có gì khác. Sử dụng chữ hoa đầu tiên.

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.