Як перешкодити викорінити сценарій root


10

Glassfish сервер додатків надає сценарії для адміністрування сервера додатків , а також запускати і зупиняти їх , і я хотів би обмежити привілейований від виконання цього сценарію. Причина полягає в тому, що деякі розробники ключів забувають адмініструвати сервер як непривілейований користувач, і якщо вони перезавантажать сервер додатків як користувач root, то сервер додатків повинен запускати користувач root [*].

Це не варіант, щоб уникнути надання доступу до root, і розробники забувають, оскільки вони так звикли робити це на своїй локальній машині. Я хотів би, щоб asadminсценарій або змінився, щоб запуститись як непривілейований користувач, або необов'язково відображати повідомлення про помилку щоразу, коли сценарій запускається root.

Використовується шкаралупа Баша.

[*]: Я намагався виправити права на файли, але, хоч я відслідковував безліч файлів, котрі володіють root і chmod їх, програма зазнає дивних помилок, і мені доведеться запустити як root знову.

Відповіді:


18

Подібно до інших відповідей, але в тому напрямку, якого ви хотіли.

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

Крім того, ви можете використовувати sudoв сценарії для примусового виконання як непривілейований користувач, використовуючи -uпрапор, щоб вказати користувача, який запускається як Я не використовую Glassfish, але ось псевдо скрипт прото-приклад.

#!/bin/bash

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

Сподіваємось, ви отримаєте ідею. Вибачте, я насправді не знаю, як виглядає сценарій або ім’я непривілейованого користувача.


2

@Tshepang має правильну ідею. Я не знаю, який найбільш портативний, але ось інші способи виявити, чи користувач має root:

id -u
$UID

Крім того, ви можете просто змусити його запустити іншого користувача з тими ж параметрами:

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

1
Це відстале. Він хоче, щоб root не запускав цей сценарій.
bahamat

D'oh, sudoтрохи забув . Тепер він повинен зробити свою роботу.
l0b0

@TobySpeight Ні, сценарій нічого не робить, якщо користувач виконує корінь, як задумано. Я вважаю, що ваша зміна також призводить до додаткового аргументу, якщо $@він порожній, і я змінив його, щоб використовувати шаблон, знайдений в іншому місці.
l0b0

Дякуємо @TobySpeight, із змінами. Я був впевнений, що бачив цю форму десь як спосіб переконатися, що нульові аргументи передані правильно. Також виправлено чек, у якому напевно була помилка (це була не бомба з вилами, а просто називала б себе невизначено.
l0b0

Я б стверджував, що це бомба fork, тому що кожен екземпляр розщеплює нову оболонку для sudo(вона не використовується exec), і батьків буде чекати на неї, тож ви, зрештою, отримаєте повну таблицю процесів. Його все-таки варто ввести exec(якщо ви не маєте наміру код fiзапускати як неправильний користувач).
Toby Speight
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.