Tôi đã tạo một số dịch vụ systemd về cơ bản hoạt động:
vị trí:
/etc/systemd/system/multi-user.target.wants/publicapi.service
Nội dung:
[Unit]
Description=public api startup script
[Service]
Type=oneshot
RemainAfterExit=yes
EnvironmentFile=-/etc/environment
WorkingDirectory=/home/techops
ExecStart=/home/techops/publicapi start
ExecStop=/home/techops/publicapi stop
[Install]
WantedBy=multi-user.target
Khi tôi cố gắng khởi động lại dịch vụ với tư cách là người dùng techops trong dòng lệnh, tôi nhận được kết quả đầu ra sau:
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to start 'publicapi.service'.
Multiple identities can be used for authentication:
1. Myself,,, (defaultuser)
2. ,,, (techops)
Choose identity to authenticate as (1-2):
Tôi muốn rằng chỉ có techops mới có thể khởi động lại dịch vụ và tôi muốn rằng dấu nhắc này không xuất hiện khi đăng nhập với tên techops. Làm thế nào tôi có thể làm điều đó?
Tôi đọc rằng có nhiều cách tiếp cận khác nhau với polkit-1 hoặc sudoers, nhưng tôi không chắc chắn.
[CẬP NHẬT] 2019-01-27 4:40 chiều
Cảm ơn câu trả lời toàn diện này cho Thomas và Perlduck. Nó giúp tôi nâng cao kiến thức về systemd.
Theo cách tiếp cận để bắt đầu dịch vụ mà không cần nhắc mật khẩu và tôi muốn xin lỗi rằng tôi đã không nhấn mạnh đủ vấn đề thực sự:
Trên thực tế, điều quan trọng nhất đối với tôi là không người dùng nào khác ngoài techops nên dừng hoặc bắt đầu dịch vụ. Nhưng ít nhất với hai cách tiếp cận đầu tiên tôi vẫn có thể chạy service publicapi stop
và tôi lại nhận được lời nhắc ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
. Khi tôi chọn người dùng mặc định và biết mật khẩu, tôi có thể dừng tất cả các dịch vụ. Tôi muốn từ chối người dùng này làm điều đó, ngay cả khi anh ta có mật khẩu . Thông tin cơ bản quan trọng để hiểu rõ hơn lý do tại sao đây là phần quan trọng hơn đối với tôi:
Trình mặc định là người dùng duy nhất tiếp xúc với ssh nhưng người dùng này không thể làm gì khác (ngoại trừ thay đổi cho người dùng khác nếu bạn có mật khẩu của những người dùng khác) . Nhưng hiện tại, anh ta có thể bắt đầu hoặc dừng các dịch vụ, nhưng người dùng này không được làm điều này.
Nếu ai đó lấy được mật khẩu của defaultuser và đăng nhập qua ssh, thì anh ta có thể dừng tất cả các dịch vụ vào lúc này. Đây là điều tôi muốn nói với "Tôi muốn rằng chỉ có kỹ thuật viên mới có thể khởi động lại dịch vụ". Xin lỗi, rằng tôi không chính xác với câu hỏi ban đầu của tôi. Tôi nghĩ rằng sudoing người dùng techops có thể bỏ qua vấn đề này, nhưng nó không. Vấn đề là không chạy lệnh mà không có mật khẩu nhắc. (Tôi có thể dễ dàng làm điều đó với tư cách là người dùng techops khi tôi thực hiện /home/techops/publicapi start
). Vấn đề là khóa hệ thống mặc định khỏi việc khởi động các dịch vụ này.
Và tôi hy vọng rằng bất kỳ giải pháp nào cũng có thể làm được điều đó.
Tôi bắt đầu với những cách tiếp cận của Thomas. Cách tiếp cận với sudo hoạt động khi tôi không muốn được hỏi mật khẩu cho các kỹ thuật viên người dùng khi tôi thực hiện các lệnh như được giải thích, ví dụ:
sudo systemctl start publicapi.service
sudo systemctl stop publicapi.service
Cách tiếp cận thứ hai không hiệu quả với tôi. Tôi không thể khởi động dịch vụ mà không có mật khẩu nhắc ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
và tôi có thể đăng nhập với tư cách là người dùng mặc định khi tôi có mật khẩu của người dùng này.
Với cách tiếp cận thứ ba, dịch vụ thậm chí không bắt đầu ở quá trình khởi động nữa nên tôi không chắc cách tiếp cận này có phù hợp với tôi không. Tôi thậm chí không thể làm được điều systemctl enable publicapi.service
đó dẫn đến lỗi sau:
Failed to enable unit: Unit file mycuisine-publicapi.service does not exist.
Lỗi không xảy ra khi tôi chuyển tất cả các dịch vụ trở lại vào / etc / systemd / system / và thực thi systemctl enable publicapi.service
. Sau đó, dịch vụ bắt đầu lại khi khởi động.
Tất cả các cách tiếp cận này sẽ ít nhiều giúp bỏ qua lời nhắc mật khẩu cho người dùng techops nhưng khi tôi chạy service publicapi stop
hoặc systemctl stop publicapi
với defaultuser, tôi có thể dừng các dịch vụ nếu tôi có mật khẩu. Nhưng mục tiêu của tôi là khóa người dùng mặc định khỏi việc bắt đầu hoặc dừng dịch vụ.
/etc/sudoers
tệp của bạn nếu có tài liệu tham khảo cho người dùng đó.
systemctl --user ...
như người dùngtechops
không phải là root. Không đề nghị của tôi cũng không phải là một trong những @PerlDuck cho bất kỳsudo
quyền của bạn defaultuser nhưng chỉ trong techops người dùng.