Làm cách nào để cản trở root chạy tập lệnh


10

Máy chủ ứng dụng Glassfish cung cấp các tập lệnh để quản trị máy chủ ứng dụng, đồng thời khởi động và dừng chúng và tôi muốn hạn chế người dùng root chạy tập lệnh này. Lý do là một số nhà phát triển chính quên quản trị máy chủ với tư cách là người dùng không có đặc quyền và nếu họ khởi động lại máy chủ ứng dụng với tư cách là người dùng root, thì máy chủ ứng dụng phải được chạy bởi người dùng root [*].

Đó không phải là một tùy chọn để tránh cấp quyền truy cập root và các nhà phát triển quên vì họ đã quá quen với việc này trên máy cục bộ của họ. Tôi muốn asadmintập lệnh thay đổi để chạy với tư cách là người dùng không có đặc quyền hoặc tùy chọn hiển thị thông báo lỗi mỗi khi tập lệnh được chạy bằng root.

Vỏ Bash được sử dụng.

[*]: Tôi đã cố gắng sửa các quyền đối với các tệp, nhưng mặc dù tôi đã theo dõi rất nhiều tệp mà root sở hữu và xử lý chúng, ứng dụng gặp lỗi lạ và tôi phải chạy lại root.

Câu trả lời:


18

Tương tự như các câu trả lời khác, nhưng theo hướng bạn muốn.

if [[ $EUID -eq 0 ]]; then
  echo "This script must NOT be run as root" 1>&2
  exit 1
fi

Ngoài ra, bạn có thể sử dụng sudotrong tập lệnh để buộc thực thi là người dùng không có đặc quyền sử dụng -ucờ để chỉ định người dùng chạy như. Tôi không sử dụng Glassfish, nhưng đây là một kịch bản giả ví dụ.

#!/bin/bash

if [ $1 == "start" ]; then
  sudo -u nobody /usr/bin/glassfish
fi

Hy vọng bạn có được ý tưởng. Xin lỗi tôi không thực sự biết kịch bản trông như thế nào hoặc tên của người dùng không có đặc quyền.


2

@Tshepang có ý kiến ​​đúng. Tôi không biết cái nào dễ mang theo nhất, nhưng đây là những cách khác để phát hiện xem người dùng có root hay không:

id -u
$UID

Ngoài ra, bạn có thể chỉ cần buộc nó chạy như một người dùng khác có cùng tham số:

if [[ "$USER" != appuser ]]
then
    exec sudo -u appuser "$0" "$@"
fi

1
Điều này là lạc hậu. Anh ta muốn root để không chạy script này.
bahamat

D'oh, quên một sudochút. Bây giờ nó nên làm công việc.
l0b0

@TobySpeight Không, tập lệnh không làm nếu người dùng root, như dự định. Tôi tin rằng sự thay đổi của bạn cũng dẫn đến một đối số bổ sung nếu $@trống và tôi đã thay đổi nó để sử dụng một mẫu được tìm thấy ở nơi khác.
l0b0

Cảm ơn @TobySpeight, đã sửa đổi. Tôi chắc chắn rằng tôi đã xem biểu mẫu đó ở đâu đó như một cách để đảm bảo không có đối số nào được truyền chính xác. Cũng sửa lỗi kiểm tra, chắc chắn có lỗi (đó không phải là bom ngã ba, nhưng đơn giản là nó sẽ tự gọi vô thời hạn.
l0b0

Tôi cho rằng đó là một quả bom nĩa, bởi vì mỗi trường hợp sẽ tạo ra một lớp vỏ mới cho sudo(nó không sử dụng exec) và cha mẹ sẽ đợi nó, vì vậy cuối cùng bạn sẽ có một bảng quy trình đầy đủ. Vẫn đáng để đặt execvào đó (nếu bạn không có ý định mã sau khi fichạy sai người dùng).
Toby Speight
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.