Thêm NOPASSWD vào / etc / sudoers không hoạt động


45

Ngày 14.04 tại đây. Tôi đã SSH vào máy của mình, thêm dòng sau vào /etc/sudoers:

myuser   ALL=NOPASSWD: ALL

Và sau đó thử chạy:

sudo mkdir /etc/blah

... Và tôi đang được hỏi mật khẩu. Tại sao?!?

Tôi không muốn được hỏi mật khẩu khi thực hiện thao tác này. Xin lưu ý rằng khi tôi chạy, ls -ltr /tôi nhận được:

drwxr-xr-x 94 root root  4096 Jul 30 13:28 etc

Nhưng tôi không nghĩ vấn đề này là vì tôi đã tự đặt mình là một "sudoer", phải không?

Quan trọng hơn, tôi cần làm gì để tôi có thể chạy sudo mkdir /etc/blahnhư người dùng hiện tại ( myuser) mà không bị yêu cầu nhập mật khẩu?

Đây là toàn bộ /etc/sudoerstập tin của tôi :

#
# 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
fizzbuzz  ALL=NOPASSWD: ALL
chadmin   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

Bạn có thể gửi tập tin sudoers của bạn? Lệnh này là đúng, nhưng nó không thể hoạt động do bối cảnh.
Lety

Cảm ơn @Letizia - vui lòng xem cập nhật của tôi, có gì nhảy ra khỏi bạn không?
Zac

Tôi đoán tôi cũng nên lưu ý rằng tôi đã không sử dụng visudotuy nhiên mọi chỉnh sửa thủ công cho tệp này không phải là công việc sao chép-dán, tôi đã nhập mọi thứ theo nguyên trạng. Nhưng có visudochỉnh sửa các tập tin khác ngoài cái này không? Đó có thể là ...
Zac


Ngoài ra, hãy kiểm tra bất kỳ tệp nào trong đó /etc/sudoers.d/, chúng có thể ghi đè mọi thứ từ/etc/sudoers
tokland

Câu trả lời:


68

Đó là trình tự / thứ tự của các quy tắc gây ra điều này. Quy tắc cuối cùng có ưu tiên.

Để khắc phục sự cố của bạn, chỉ cần di chuyển các dòng của bạn,

fizzbuzz  ALL=NOPASSWD: ALL
chadmin   ALL=NOPASSWD: ALL

từ sudoerstập tin đến

sudo visudo -f /etc/sudoers.d/myOverrides 

Đây là cách tiếp cận tốt hơn so với chỉnh sửa sudoerstệp bằng trình soạn thảo văn bản thuần túy. Nếu bạn vô tình chèn lỗi vào tệp, bạn có thể không chạy được sudonữa. Luôn luôn sử dụng visudo, để cú pháp được kiểm tra và bạn nhận được cảnh báo về những sai lầm!

Lệnh của bạn không hoạt động vì nó bị ghi đè bởi:

%admin ALL=(ALL) ALL
%sudo   ALL=(ALL:ALL) ALL

Nếu bạn chạy groupslệnh, bạn sẽ thấy rằng người dùng của bạn thuộc về các nhóm này.


Tên của tệp phải tuân theo quy ước nn-somename, ví dụ/etc/sudoers.d/20-myoverrides
shimatai

Vâng, tất nhiên, nếu bạn có nhiều hơn một tệp, chúng được phân tích cú pháp theo thứ tự từ vựng được sắp xếp, vì vậy nên sử dụng một số và sẽ dễ dàng biết được thứ tự đó.
Lety

21

Nếu myuser nằm trong nhóm sudo , thì thứ tự các dòng này sẽ không cung cấp quyền truy cập không cần mật khẩu (như được ghi chú bởi Florian Diesch), bởi vì dòng thứ 3 ghi đè lên dòng thứ nhất.

myuser    ALL=(www-data:www-data) NOPASSWD: ALL
# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

Vì vậy, chỉ cần đặt các dòng theo thứ tự này:

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL
myuser    ALL=(www-data:www-data) NOPASSWD: ALL

Trong tài khoản myuser sử dụng sudo -lđể kiểm tra xem myuser có quyền gì .


10

Nếu nhiều mục khớp với người dùng, mục cuối cùng sẽ được sử dụng. Vì vậy, nếu fizzbuzzchadminlà thành viên của các nhóm adminhoặc sudohọ sẽ vẫn được yêu cầu nhập mật khẩu.

Đặt hai dòng ở cuối sudoerstập tin sau #includedirdòng.


Thật vậy, do đó, sự kết hợp giữa @ Letizia và câu trả lời của bạn là tốt nhất, vì đây #includedirlà mục cuối cùng sudoerstheo mặc định.
muru

0

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 thì 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. Bạn KHÔNG BAO GIỜ nên cấp NOPASSWDcho ALLcác lệnh.

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

Chèn quyền cấp dòng của bạn: myuser ALL= NOPASSWD: /bin/mkdir

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 ghi 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ì.

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.