cho phép người dùng chạy các dịch vụ systemctl / systemd mà không cần mật khẩu


25

Tôi muốn người dùng mặc định, ubuntucó thể chạy một dịch vụ cụ thể mà không bị nhắc nhập mật khẩu.

Cụ thể systemctl restart unicorn_my_app.service.

Đã làm theo các hướng dẫn ở đây để thêm người dùng ubuntuvào một nhóm mới được tạo LimitedAdmins, được xác nhận với:

$ getent group LimitedAdmins
LimitedAdmins:x:1001:ubuntu

Tạo một tệp mới, limitedadmins(sử dụng sudo vim) trong /etc/sudoers.dthư mục chứa văn bản sau:

%LimitedAdmins ALL=NOPASSWD: /etc/init.d/unicorn_ofn_america restart, /etc/init.d/unicorn_ofn_america start

Tôi cũng đã thử:

%LimitedAdmins ALL=NOPASSWD: /bin/systemctl/unicorn_ofn_america restart, /bin/systemctl/unicorn_ofn_america start

(Và /bin/systemd)

Nội dung của /etc/sudoers/là mặc định như được xác nhận với sudo visudo(hoặc sudo cat /etc/sudoers):

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

    # 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

(Đăng nhập băm #includedirkhông phải là một nhận xét, mà là một phần của cú pháp chỉ thị #incoide ).

Tuy nhiên, vẫn còn một dấu nhắc mật khẩu sau khi chạy systemctl restart unicorn_my_app.service

Dịch vụ có trong init.dthư mục:

$ ls -l /etc/init.d | grep unicorn
-rwxr--r-- 1 ubuntu ubuntu 1874 Oct 29 06:47 unicorn_my_app

Đã thử chmodding 755trên ứng dụng, nhưng đừng nghĩ rằng điều đó sẽ tạo ra sự khác biệt, vì ubuntudù sao cũng sở hữu nó.

Thậm chí đã thử khởi động lại hệ thống mà không có sự khác biệt. Tôi có thiếu một bước, như khởi động lại / tải lại) không? Cấu hình cái gì sai?

Tôi cũng nên đề cập rằng tôi đã sử dụng vimđể tạo tệp mới bên trong /etc/sudoers.d, vì dường như visudolệnh này chỉ để chỉnh sửa /etc/sudoers.


Câu trả lời:


38

Các tập tin sudoers khá linh hoạt, và đi kèm với đó là sự phức tạp. Những gì bạn muốn ở đây là cho phép truy cập vào lệnh /bin/systemctl, với các tham số cụ thể:

%LimitedAdmins ALL=NOPASSWD: /bin/systemctl restart unicorn_my_app.service

Về cơ bản, bạn chỉ cần lấy dòng lệnh chính xác mà bạn sẽ nhập, mã hóa tên đường dẫn để đảm bảo an toàn và đặt nó vào tệp sudoers của bạn (hoặc /etc/sudoers.d). Và lưu ý rằng 'bắt đầu' và 'khởi động lại' hoàn toàn khác nhau khi có liên quan đến sudo; cho phép một người sẽ không cấp quyền truy cập cho người khác.


1
Dường như không hoạt động. Tôi có thể sao chép /bin/systemctl restart unicorn_my_app.servicetrực tiếp từ /etc/sudoers.d/limitedadminstệp và chạy nó trong CLI và được nhắc nhập mật khẩu. Người dùng ubuntucần tp được chỉ định ở đâu đó hay ALLmở nó cho tất cả người dùng cho tất cả các tên miền?
MikeiLL

5
Bạn sẽ chạy sudo /bin/systemctl restart unicorn_my_app.servicevà sau đó sẽ chạy mà không cần mật khẩu. (đăng dưới dạng nhận xét trong trường hợp câu trả lời của PsiOps được tách ra khỏi câu hỏi này)
rosuav

1
@rosuav Có cách nào để chúng ta có thể chạy nó trực tiếp systemctl restart myapp.servicemà không cần sử dụng sudo.
kabirbaidhya

Không thực sự, nhưng bạn có thể đặt lệnh vào một tập lệnh (hoàn thành với tiền tố sudo), sau đó đặt tập lệnh đó vào $ PATH. Hoặc làm cho nó một bí danh vỏ.
rosuav

3
Chú ý: Trên các bản phát hành khác systemctl là trong /usr/bin:-(.
guettli
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.