Làm thế nào để chạy lệnh sudo không có mật khẩu?


235

Làm thế nào để ubuntungười dùng trên các hình ảnh AWS cho Ubuntu Server 12.04 không có mật khẩu sudocho tất cả các lệnh khi không có cấu hình cho nó /etc/sudoers?

Tôi đang sử dụng máy chủ Ubuntu 12.04 trên Amazon. Tôi muốn thêm một người dùng mới có hành vi tương tự như người dùng Ubuntu mặc định. Cụ thể tôi muốn mật khẩu sudocho người dùng mới này.

Vì vậy, tôi đã thêm một người dùng mới và đi chỉnh sửa /etc/sudoers(tất nhiên là sử dụng visudo). Từ việc đọc tệp đó, có vẻ như ubuntungười dùng mặc định đã nhận được mật khẩu sudotừ việc là thành viên của adminnhóm. Vì vậy, tôi đã thêm người dùng mới của tôi vào đó. Mà đã không làm việc. Sau đó, tôi đã cố gắng thêm NOPASSWDchỉ thị vào sudoers. Mà cũng không làm việc.

Dù sao, bây giờ tôi chỉ tò mò. Làm thế nào để ubuntungười dùng có được đặc quyền không mật khẩu nếu họ không được xác định /etc/sudoers. Cơ chế cho phép điều này là gì?


Câu trả lời:


332

Được rồi, tôi đã phát hiện ra câu trả lời vì vậy cũng có thể đặt nó ở đây cho đầy đủ. Cuối cùng, /etc/sudoerscó những gì tôi nghĩ chỉ là một nhận xét:

#includedir /etc/sudoers.d

Tuy nhiên điều này thực sự bao gồm các nội dung của thư mục đó. Bên trong đó là tập tin /etc/sudoers.d/90-cloudimg-ubuntu. Trong đó có nội dung dự kiến

# ubuntu user is default user in cloud-images.
# It needs passwordless sudo functionality.
ubuntu ALL=(ALL) NOPASSWD:ALL

Vì vậy, đó là nơi cấu hình sudo cho người dùng ubfox mặc định sống.

Bạn nên chỉnh sửa tập tin này bằng visudo. Lệnh sau sẽ cho phép bạn chỉnh sửa tệp chính xác bằng visudo.

sudo visudo -f /etc/sudoers.d/90-cloudimg-ubuntu

Và thêm một dòng như:

aychedee ALL=(ALL) NOPASSWD:ALL

Cuối cùng.


4
Tôi khá chắc chắn rằng tôi phải thực hiện khởi động lại đầy đủ.
aychedee

2
quy tắc sudo mới sẽ được sử dụng cho mọi người dùng đã đăng nhập mới - vì vậy bạn cần đăng nhập lại ít nhất
bluszcz

32
'sudo service sudo restart' hoạt động :)
Laice

4
Trong các phiên bản sau (ví dụ 14.04), tệp được bao gồm là /etc/sudoers.d/90-cloud-init-users(để chỉnh sửa .. sudo visudo -f /etc/sudoers.d/90-cloud-init-users). Mặc dù nó sẽ sạch hơn để tạo các tệp bổ sung hơn là chỉnh sửa tệp được tạo. Lưu ý rằng các tệp có chứa một .hoặc kết thúc bằng ~sẽ không được bao gồm.
Molomby

2
@ Phil_1984_ Rất có thể, nó đã được thêm dưới dạng một nhận xét để cho phép tương thích với các phiên bản sudo (tiêu chuẩn?) Khác, không cho phép bao gồm, nhưng sẽ không bị vấp phải bởi một nhận xét kỳ lạ. (Tiêu chuẩn thật khó! ;-)
jpaugh

94

Tôi thấy rằng điều dễ dàng nhất để làm, để dễ dàng sao chép hành vi này trên nhiều máy chủ, là:

sudo visudo

Thay đổi dòng này:

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

đến dòng này:

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

Và di chuyển nó dưới dòng này:

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

bây giờ bạn nên có cái này:

# 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

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

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

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

#includedir /etc/sudoers.d

sau đó cho mọi người dùng cần truy cập sudo VỚI mật khẩu :

sudo adduser <user> sudo

và cho mọi người dùng cần truy cập sudo KHÔNG CÓ mật khẩu :

sudo adduser <user> admin

và cuối cùng, chạy nó:

sudo service sudo restart

Và đó là nó!

Chỉnh sửa: Bạn có thể phải thêm nhóm quản trị viên vì tôi không nghĩ nó tồn tại theo mặc định.

sudo groupadd admin

Bạn cũng có thể thêm ubuntungười dùng AWS mặc định vào adminnhóm thông qua lệnh này:

sudo usermod ubuntu -g admin

Lưu ý: Như @hata đã đề cập, bạn có thể cần sử dụng admlàm tên nhóm quản trị viên của mình, tùy thuộc vào phiên bản Ubuntu nào đang được sử dụng.


3
Lưu ý đến bản thân: Đó là một quy ước để di chuyển các quyền hạn chế thấp hơn trong ngăn xếp. Nhưng không làm điều đó sẽ không ảnh hưởng đến chức năng.
poweratom

2
Như jiminikiz đã giải thích, tôi đã phải đặt % admin sau % sudo trên Ubuntu GNOME 16.04 LTS của tôi. Thêm vào đó, id nhóm quản trị viên chính xác không phải là quản trị viên mà là adm trên Ubuntu của tôi. Không cần khởi động lại.
hata

5

Tôi sẽ tạo tệp của riêng mình trong thư mục /etc/sudoers.d/ - tệp được tạo bởi Amazon Cloud có thể bị ghi đè trong trường hợp có bất kỳ cập nhật nào. Sau khi tạo tệp của bạn trong /etc/sudoers.d, hãy thêm mục này,

<your user name> ALL=(ALL) NOPASSWD:ALL

Khởi động lại hệ thống và điều này sẽ làm việc.


2

Câu trả lời ngắn mà không sử dụng bất kỳ trình soạn thảo nào (đã thử nghiệm trên bash, rất rủi ro khi thực hiện trên các máy chủ từ xa).

Cấu hình sudo để hoạt động mà không cần mật khẩu cho người dùng hiện tại:

echo "$USER ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers

Kiểm tra chỉnh sửa với:

sudo visudo -c

Xác minh nếu bạn có thể sử dụng sudo mà không cần mật khẩu:

sudo cat /etc/sudoers | grep "$USER"

... Hoặc đơn giản là thử nó với:

sudo <anything>

21
Đây là lời khuyên khá nguy hiểm ... sao chép và dán sai và bạn sẽ tự khóa máy chủ của mình. Do đó lời khuyên để sử dụng visudo. Nó kiểm tra xem cú pháp có đúng không trước khi lưu vào đĩa. Vì vậy, cho bất cứ ai muốn sử dụng này. Đừng làm điều đó trên một máy chủ từ xa mà bạn quan tâm. Bạn có thể muốn bao gồm một cảnh báo về điều đó trong câu trả lời của bạn.
aychedee

8
Không sử dụng visudo là một ý tưởng khủng khiếp . Tin tôi đi, tôi biết mà.
kẻ phản diện

1
IMHO, sao chép-dán an toàn hơn chỉnh sửa thủ công. Một đơn giản hóa nhỏ:echo "$USER ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers
theartofrain

4
@theartofrain - Thông thường, tôi đồng ý, nhưng visudođặc biệt tốt khi không cho phép bạn phá tập tin sudoers, do đó không khóa bạn khỏi máy của bạn (hoặc ít nhất là sudo).
Jon V

3
@JonV Bạn cũng có thể mất quyền quản trị viên visudo, nhưng thường không phải do vô tình, vì visudochỉ lưu các thay đổi được định dạng tốt theo ngữ pháp cho các tệp sudoers . Hầu hết các sai lầm về mặt cú pháp, vì vậy chúng không gây hại visudo. Nếu /etc/sudoershoặc một tập tin trong /etc/sudoers.d vô hình thành, sudotừ chối nâng cao đặc quyền cho bất cứ ai như một biện pháp an ninh, đó là lý do tại sao không sử dụng visudorất nguy hiểm. (Mặc dù đôi khi pkexeccó thể sửa nó mà không cần khởi động lại.)
Eliah Kagan

0

Đây là cách tôi đã triển khai người dùng không root, không mật khẩu trong Hình ảnh Docker phù du để sử dụng trong đường ống CICD:

RUN \
    groupadd -g 999 foo && useradd -u 999 -g foo -G sudo -m -s /bin/bash foo && \
    sed -i /etc/sudoers -re 's/^%sudo.*/%sudo ALL=(ALL:ALL) NOPASSWD: ALL/g' && \
    sed -i /etc/sudoers -re 's/^root.*/root ALL=(ALL:ALL) NOPASSWD: ALL/g' && \
    sed -i /etc/sudoers -re 's/^#includedir.*/## **Removed the include directive** ##"/g' && \
    echo "foo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \
    echo "Customized the sudoers file for passwordless access to the foo user!" && \
    echo "foo user:";  su - foo -c id
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.