Thực thi tập lệnh từ RC.local với tư cách là người dùng thay vì root


26

Tôi muốn thực thi một tập lệnh mỗi khi máy chủ của tôi khởi động. Vấn đề là tôi cần phải là một người dùng nhất định để thực thi tập lệnh, nếu tôi cố gắng thực hiện nó với quyền root thì không thể tìm thấy các gói nhất định (chẳng hạn như ruby).

Tôi cố gắng thay đổi thành xxx user01.

sudo su user01
/etc/init.d/script start

Điều này không làm việc tuy nhiên.


Đăng kịch bản init của bạn?
lượng tử

Bạn có một số nhật ký?
Dom

Tại sao bạn không đơn giản sử dụng sutrong tập lệnh RC?
Mat

Câu trả lời:


30

Chạy sudo su user01trong một kịch bản không có nghĩa là các lệnh sau được gửi đến trình bao kết quả. Trong thực tế, nó có khả năng có nghĩa là một vỏ mới được sinh ra là user01, không bao giờ thoát!

Hai điều:

  • Bạn có thể thực thi một lệnh như một người dùng khác bằng cách chuyển -c 'command...'đối số cho su, như thế nào su user01 -c '/etc/init.d/script start'.
  • Bắt đầu một dịch vụ sử dụng /etc/init.d từ RC.local không phải là điều chính xác để làm. Bạn muốn sử dụng kích hoạt dịch vụ khi khởi động bằng các công cụ phân phối của mình, như chkconfighoặc update-rc.d. Bạn cũng không muốn các công việc trong /etc/init.d không nên bắt đầu như root. Bản thân các công việc có thể thoải mái chuyển sang tài khoản người dùng khác, nhưng nên được gọi bằng root.

8

Bạn có thể đặt một cái gì đó vào /etc/crontabvà chạy nó@reboot

@reboot username /etc/init.d/script start

2
hoặc trong tập tin crontab của người dùng.
Jake

4

Bạn chỉ có thể chạy lệnh thông qua sudo như thế này:

sudo -H -u user01 /etc/init.d/script start

-H đặt biến môi trường HOME cho biến của người dùng

-u chỉ định tên người dùng để chạy như


0

Chắc chắn bạn không thể chạy tập lệnh đó bằng sudo vì yêu cầu (bắt buộc người dùng phải đăng nhập) bằng sudoers. Bạn có thể muốn vô hiệu hóa, điều này hơi nguy hiểm

Ngoài ra, có một công cụ hơi cũ gọi là runsuid: http://freecode.com/projects/runsuid

HTH

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.