Cho phép người dùng không root để khởi động lại dịch vụ


27

Lý lịch :

Tôi đã tạo một ứng dụng được gọi myappvới Spring-boot. Nó bao gồm một jar tự thực thi và tương thích với các dịch vụ systemd. Bây giờ, tôi đang cố gắng tích hợp nó với jenkins.

Những gì tôi muốn:

Tôi muốn jenkins có thể:

  • dừng dịch vụ
  • thay bình.
  • khởi động lại dịch vụ.

Vấn đề:

Cho đến nay, chỉ sudoers có thể bắt đầu / dừng dịch vụ. Tôi không muốn jenkins là một sudoer (có vẻ lộn xộn).

Cấu trúc hiện tại:

Tôi có một người dùng myappcó một /home/myappthư mục. Bình được tạo ra được gọi myappvà được đặt tại /home/myapp. Người dùng myapplà chủ sở hữu của jar được tạo:

myapp@myserver:~/backend$ ll
total 53900
drwxrwxr-x 2 myapp myapp     4096 Apr 25 17:09 ./
drwxr-xr-x 6 myapp myapp     4096 Apr 25 17:08 ../
-rw-rw-r-- 1 myapp myapp      511 Apr 20 16:13 application.properties
-rwxr--r-- 1 myapp myapp 55175294 Apr 20 19:06 backend-1.0-SNAPSHOT.jar*
lrwxrwxrwx 1 myapp myapp       24 Apr 20 19:20 myapp -> backend-1.0-SNAPSHOT.jar*
-rw-r--r-- 1 myapp myapp      179 Apr 20 19:26 myapp.service

Tôi đã đặt một khóa ssh để jenkins có thể đăng nhập như myapp@myserver.

myappchủ sở hữu của bình, tôi nghĩ rằng có thể có một tùy chọn cho phép người dùng myappgọi systemctl start/stop myapp. Trên thực tế, tôi có thể gọi systemctl status myappnhưng không start/stop(mật khẩu gốc được hỏi).

Bất kỳ đề xuất?


Tôi không thấy lý do để xem xét sudolộn xộn, đó thường là cách bạn nên thực hiện một cái gì đó như thế này. Tạo một nhóm, phân công người dùng Jenkins của bạn để nó và sử dụng visudocung cấp một tập lệnh hạn chế cho nhóm đó để quản lý dịch vụ
brent

@brent Có cách nào chỉ cho phép myappgọi sudo systemctlcho dịch vụ riêng của mình không?
Arnaud Denoyelle

Câu trả lời:


24

sudolà con đường để đi Tạo một nhóm mới ( appadminví dụ), đưa jenkinsngười dùng của bạn vào đó và sử dụng visudothêm một mục mới với danh sách lệnh giới hạn, ví dụ:

Cmnd_Alias MYAPP_CMNDS = /bin/systemctl start myapp, /bin/systemctl stop myapp
%appadmin ALL=(ALL) MYAPP_CMNDS

Nếu bạn muốn appadminnhóm có thể vận hành dịch vụ mà không cần nhập mật khẩu trước (hữu ích nếu người dùng chỉ được xác thực bằng khóa SSH chẳng hạn),

Cmnd_Alias MYAPP_CMNDS = /bin/systemctl start myapp, /bin/systemctl stop myapp
%appadmin ALL=(ALL) NOPASSWD: MYAPP_CMNDS

1
Đừng quên thứ tự tuyên bố unix.stackexchange.com/a/13058/86443
Gilberto
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.