Upstart: cho phép người dùng bình thường dừng và bắt đầu dịch vụ tùy chỉnh của tôi


16

Tôi đã có ứng dụng máy chủ web của mình bắt đầu khởi động bằng cách sử dụng upstart. Đây là kịch bản mới nhất:

# web app node upstart file at /etc/init/webapp.conf

description "web application"

start on started mongodb
stop on runlevel [06]

respawn
respawn limit 10 100

env NODE_ENV=production

pre-start script
    ulimit -n 2048
end script

exec start-stop-daemon --start -c mainuser --exec /usr/bin/make -- -C /home/mainuser/app start-prod

Điều này hoạt động hoàn hảo trên máy chủ Ubuntu 10.04 LTS và tôi rất hài lòng về nó.

Tuy nhiên, tôi có một tập lệnh shell triển khai đăng nhập bằng SSH mainuser(đây không phải là sudoer) và sau đó sẽ cập nhật thư mục làm việc lên phiên bản triển khai mới nhất.

Vấn đề ở đây là dịch vụ cần được khởi động lại để các ứng dụng tải các tệp nguồn mới. Tuy nhiên, mainusercó được một ...

mainuser@Saturn101:~$ stop webapp
-bash: stop: command not found

... Khi cố gắng ngăn chặn nó. Tôi phải chạy sudo stop webapp, nhưng người dùng này không thể làm điều này vì anh ta không phải là một kẻ lừa đảo. Vì lý do bảo mật, tôi cũng không muốn anh ta trở thành một sudoer, cộng với tôi không muốn chèn mật khẩu sudo.

Vậy làm thế nào để tôi cho phép mainuserchạy stop webappstart webapp?


1
Vấn đề bảo mật nào bạn lo lắng bằng cách thêm người dùng vào sudoers? Bạn có thể viết một quy tắc cho phép người dùng chỉ một lệnh cụ thể và không hơn, ngoài ra bạn có thể bao gồm tùy chọn nopasswd để tránh dấu nhắc mật khẩu. Đối với lỗi cụ thể mà bạn nhận được, đó là do start / stop nằm trong / sbin, thường không phải là một phần của đường dẫn của người dùng thông thường. Vì vậy, bạn có thể thực hiện "/ sbin / stop" hoặc thêm sbin vào đường dẫn. Điều này có thể hoạt động miễn là không có mục nào khác trong tập lệnh start / stop yêu cầu root.
Derek Pressnall

@DerekPressnall, cảm ơn, nhưng khi tôi chạy /sbin/stop webapptôi nhận được stop: Unable to connect to system bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory. Làm thế nào tôi sẽ cho phép mainuserchỉ thực hiện lệnh này?
Tom

Lỗi là do người dùng này không có quyền quản trị.
Tom

Câu trả lời:


31

sudo rất có thể cấu hình, bạn có thể cho phép người dùng này thực thi một nhóm lệnh giới hạn mà không cần nhắc mật khẩu. Dòng sau /etc/sudoersnên làm những gì bạn muốn:

mainuser ALL = (root) NOPASSWD: /sbin/start webapp, /sbin/stop webapp

1
Tuyệt vời, cảm ơn rất nhiều. Bạn đã thực sự học được tất cả những điều này từ man sudoers? Tôi thấy nó khá khó để phân tích.
Tom

1
Không, tôi đã làm điều này trước đây. Đây không phải là trang dễ nhất để giải mã :-)
mgorven

Thất bại với Unable to connect to system bus. Thêm: Cho phép nhóm không sudo kiểm soát công việc mới bắt đầu
ciastek
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.