2010-06-28 26 views
10

Tôi có một ứng dụng Java được thực hiện từ một tập lệnh shell ([ba] sh) và không may đôi khi những người chịu trách nhiệm triển khai nó và bắt đầu nó không chuyển sang người dùng thích hợp trước khi bắt đầu ứng dụng. Trong tình huống này, tôi muốn ứng dụng không chạy ít nhất, và lý tưởng nhất là cảnh báo không làm điều đó. Tôi đã nghĩ về việc cố gắng tạo bí danh java hoặc thay đổi đường dẫn root để bao gồm một java giả mạo, nhưng điều này có thể có tác dụng phụ không mong muốn và sẽ không có hiệu quả dễ dàng vì kịch bản lệnh shell chỉ định đường dẫn đầy đủ đến tệp nhị phân java .Cách dễ nhất trong tập lệnh trình bao để đảm bảo nó không chạy dưới dạng gốc?

Vì vậy, có một thành ngữ chuẩn trong kịch bản lệnh shell cho 'không chạy nếu tôi là root' không?

+0

Vui lòng cho biết shell ... BASH shell, CMD shell? –

+3

Xin lỗi, tôi không nghĩ về các kịch bản lệnh shell shell như các kịch bản shell nhiều như 'batch file', vì vậy nó không xảy ra với tôi để phân biệt. – Jherico

+2

bash có '$ EUID' nhưng cristis có câu trả lời di động bên dưới. – msw

Trả lời

13

Ví dụ trong bash:

if [ `id -u` = 0 ]; then 
    echo "You are root, go away!" 
    exit 1 
fi 
1

Trong BASH, bạn có thể lấy đầu ra của whoami và so sánh nó với root.

1

tôi sử dụng một cái gì đó như thế này ở phần đầu của kịch bản mà tôi muốn được chạy dưới một tài khoản dịch vụ:

LUSER='my-service' 
if [ `id -un` != $LUSER ]; then 
    exec su $LUSER -s $SHELL -c "$0 [email protected]" 
fi 

# actual script commands here. 

Nếu chạy như là người dùng chính xác, thực hiện sẽ tiếp tục như kế hoạch. Nếu chạy làm thư mục gốc, các đặc quyền sẽ được giảm xuống thành id người dùng mong muốn. Những người dùng khác sẽ nhận được lời nhắc mật khẩu cho họ biết rằng có điều gì đó là sai.

su -s $SHELL ... được sử dụng để ghi đè bộ vỏ trong /etc/passwrd - có thể được đặt thành /bin/false cho tài khoản dịch vụ.

Tôi đã sử dụng tính năng này trên hệ thống Debian, sử dụng bashdash. Hãy cảm thấy miễn phí để nhận xét nếu tính di động có thể được cải thiện.

+0

tốt, tôi nghĩ rằng không có một người dùng cụ thể sẽ triển khai và chạy ứng dụng java ... điều quan trọng là nó không phải là root. – cristis

+0

id -u cung cấp số thay vì tên. Bạn có thể có nghĩa là id -un. –

+0

Fred Nurk: Trong nháy mắt thứ hai, bạn đúng, tất nhiên :-) – hillu

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