2013-08-01 30 views
5

Tôi đã cài đặt Jetty 9 (phiên bản mới nhất) bằng cách giải nén tệp lưu trữ trong /opt/jetty.Kịch bản lệnh betty chỉ hoạt động với người dùng root

start.jar chạy tốt, nhưng tôi muốn dịch vụ bash bin/jetty.sh, được điều hành bởi người dùng không phải root.

Vấn đề tôi gặp phải với tập lệnh bash là: khi tôi không chỉ định giá trị cho $JETTY_USER trong /etc/default/jetty (sử dụng root người dùng), Jetty hoạt động. Nhưng khi tôi gán một giá trị cho nó, Jetty không thành công với thông báo: Starting Jetty: FAILED và không có nhật ký.

Vì vậy, làm cách nào để tạo người dùng có thể chạy cầu tàu?

Trả lời

1

Kiểm tra ${jetty.home}/logs/start.log (tên hoặc tương tự log file)

Điều đó sẽ cho bạn biết lý do tại sao nó thất bại.

Ngoài ra, bạn có thể muốn xem xét hỗ trợ setuid tùy chọn.

http://www.eclipse.org/jetty/documentation/current/setuid.html

+0

thư mục log của tôi là trống rỗng, khi tôi chỉ định một 'JETTY_USER'. Sự kiện không có tệp nhật ký 'JETTY_USER' (người dùng root) sử dụng dấu thời gian hiện tại trong tên của họ. – h4k1m

2

Câu hỏi của bạn có vẻ hơi ít lẫn lộn, do đó, nó không phải là 100% rõ ràng những gì kết quả bạn đang thực sự tìm kiếm.

Các bước bạn đang thực hiện sẽ không hoạt động và bạn có thể làm rất ít để giúp chúng hoạt động, nhưng nếu bạn có thể giải thích kết quả bạn đang làm, thì chúng tôi có thể đưa ra một giải pháp thay thế.

Câu trả lời ngắn gọn là:

  • Nếu bạn đặt JETTY_USER sau đó jetty.sh phải được chạy bởi root.
    Tùy thuộc vào hệ điều hành của bạn, nó sẽ cố gắng khởi động trình nền tảng cầu nối như JETTY_USER hoặc su đến JETTY_USER, cả hai đều cho rằng bạn đang chạy dưới dạng gốc.

Vì vậy, đường dẫn đó sẽ không hoạt động cho bạn.

Đây là những gì bạn có thể làm:

Nếu bạn chỉ muốn chạy Jetty như một người dùng cụ thể (ví dụ jetty)

  • không đặt JETTY_USER
  • đăng nhập trong khi jetty và chạy jetty.sh
  • điều này yêu cầu máy chủ cầu cảng của bạn đang chạy dưới cổng không có đặc quyền (nghĩa là không phải port 80)

Nếu bạn muốn để có thể chạy trên cổng 80 nhưng không chạy bằng root

  • bật setuid
  • bắt đầu cầu cảng.sh như người sử dụng root
  • bạn có thể xem xét hooking nó vào khuôn khổ dịch vụ của hệ điều hành (ví dụ sử dụng init.dservice)

Nếu bạn muốn tất cả người dùng(hoặc một số users)tới bắt đầu cầu cảng, nhưng hãy để nó chạy với 1 người dùng cụ thể

  • Sử dụng một trong các tùy chọn ở trên cùng với quy tắc thích hợp
+1

Tất cả những gì tôi muốn là daemon (dịch vụ) 'jetty' không chạy như root, bởi vì điều đó sẽ có một số vấn đề bảo mật trên Linux. Và rõ ràng hơn là tôi đang chạy 'jetty.sh' làm thư mục gốc, nhưng tôi không muốn dịch vụ'/etc/init.d/jetty' được chạy bởi người dùng 'root'. – h4k1m

3

Tôi biết rằng câu hỏi này là cũ, nhưng kể từ khi hành vi này nghe trộm tôi thời gian gần đây là tốt, ở đây đó là gợi ý của tôi. Trong trường hợp của tôi, nó là Jetty 8.x trên Centos 6.5, và tôi có hành vi tương tự chính xác: jetty bắt đầu hoàn hảo khi được khởi chạy trên dòng lệnh cả root và người dùng mới tạo, nhưng không bắt đầu bất cứ khi nào cố gắng chạy nó dưới dạng dịch vụ và chỉ định người dùng thông qua biến JETTY_USER trong/etc/default/jetty. Nhật ký hoàn toàn trống.

Bí quyết trong trường hợp của tôi là không có thư mục nào được chỉ định công khai cho các nhật ký trong biến JETTY_LOGS. Khi chạy trực tiếp với tư cách người dùng, khi Jetty không thể truy cập một thư mục bình thường cho các bản ghi, nó sẽ cố gắng tạo một thư mục cho người dùng. Tuy nhiên, với kịch bản khởi động trong các hệ thống CentOS/RH, tiến trình được chạy bằng lệnh 'su - -c' 'người dùng' có vẻ như phá vỡ kiểu hành vi đó. Không có khiếu nại nào được đệ trình trong tệp nhật ký, vì quá trình này bị ngắt ngay khi cố gắng truy cập chúng và cả stdout và stderr đều được chuyển hướng đến nhật ký.

Để gỡ lỗi cho bạn vấn đề quyền chính xác, hãy thử chạy máy chủ thông qua "su -c" như tập lệnh; sự khác biệt là bạn cuối cùng sẽ có stderr của bạn trên bàn điều khiển. Và trong tương lai, cũng tạo thủ công thư mục nhật ký jetty với quyền phù hợp và chỉ định nó bên trong biến JETTY_LOGS: ít đau đầu hơn nhiều!

+0

Có lẽ đó là những gì làm cho 'jetty' để thất bại bắt đầu. Dù sao tôi đang chạy nó như là root cho bây giờ. Lỗi tương tự vẫn tồn tại ngay cả đối với phiên bản mới nhất của cầu cảng (v9.x). – h4k1m

+0

Yep, tập lệnh bắt đầu giống nhau thông qua cả hai phiên bản, hoặc ở leats có vẻ khá giống nhau. Kiểm tra nó ra, chạy webservices như root thường không phải là một ý tưởng rất tốt! – stoned

+0

Tôi đã thử nó nhưng nó không hoạt động. Tôi đã thêm hai dòng này vào '/ etc/default/jetty':' JETTY_USER = jetty', 'JETTY_LOGS =/opt/jetty/logs' và thay đổi quyền của'/opt/jetty' thành 'jetty: jetty' , nhưng điều đó vẫn chưa giải quyết được vấn đề. – h4k1m

3

Tôi gặp phải sự cố tương tự. Trong trường hợp của tôi, tôi đã cài đặt Jetty v 9.2.10.v201503 trên pcDuino v3, Ubuntu 14.04 theo hướng dẫn cài đặt từng bước "Khởi động một Dịch vụ Unix bằng cách sử dụng jetty.sh" (xem tài liệu trên eclipse.org).

Vì các bước được chạy dưới dạng gốc, tôi đã kết thúc với quyền sở hữu hỗn hợp (gốc và cầu cảng) của tệp và thư mục trong thư mục $ JETTY_BASE.

Tôi đã thêm JETTY_LOGS = $ JETTY_BASE/nhật ký và JETTY_USER = cầu tàu vào tệp/etc/default/jetty và phát hành lại lệnh -R jetty: jetty $ JETTY_BASE.

Sau các bước này Cầu tàu chạy dưới thông tin đăng nhập của người dùng cầu cảng. Mặc dù nó là khá dễ dàng, tôi hy vọng rằng lưu ý này có thể hữu ích cho những người khác không phải là quản trị viên chuyên nghiệp.

1

Tôi gặp phải vấn đề tương tự; đã có một vấn đề quyền truy cập vào thư mục /var/run/jetty/ và cầu tàu đang cố viết nhật ký trong thư mục đó.

A chmod 777 /var/run/jetty/ đã khắc phục sự cố cho tôi.

+0

Điều này thực sự sẽ tạm thời khắc phục sự cố nhưng trên rất nhiều hệ thống (Ubuntu) có/var/run được gắn như một tmpfs có nghĩa là thư mục/var/run được dọn sạch trên mỗi lần khởi động (do đó mất 777). Đặt JETTY_START_LOG trong/etc/default/jetty để sử dụng một vị trí khác có thể ghi bởi người dùng jetty khắc phục sự cố ... – danw

1

Sự cố là do không có quyền ghi vào JETTY_RUN theo mặc định được đặt thành /var/run được tái tạo và đặt lại quyền thành gốc chỉ trên mỗi lần khởi động lại (daemon init). Trên thực tế jetty.sh đã JETTY_RUN phủ như:

..defaults cho sẵn đầu tiên của/var/run,/usr/var/run, JETTY_BASE và/tmp nếu không đặt.

nhưng điều đó không hiệu quả trong trường hợp của tôi. Giải pháp được đặt rõ ràng là JETTY_RUN trong phạm vi /etc/init.d/jetty trỏ đến thư mục mà người dùng cầu cảng (nhóm) có quyền ghi vào (ví dụ: /opt/jetty/temp).

ps: Debian 8 vs Jetty 9.4

0

Tất cả bạn phải làm là quyền sở hữu thay đổi của thư mục /var/run/jetty: sudo chown -R jetty:jetty /var/run/jetty

Các vấn đề liên quan