4

Я создал пользователя, например, ronly , теперь я хочу предоставить ему доступ только для чтения к нескольким каталогам в других домашних пользователях, таких как abc/,xyz/,pqr/ поэтому я помещаю этого пользователя ronly в другие, что означает, что не создана группа для этого пользователя, которая значит ronly будет другим для вышеуказанных каталогов.Теперь все работает , как в ожидание , но единственная проблема в том , что abc/,xyz,pqr/ есть некоторые скрипты , которые ronly должен читать , но не выполнять их.

Сценарии оболочки , имеющие разрешение , как этот -rwxrw-r-- test.sh означает , пользователь ronly могут видеть сценарии , но не должны их выполнять, эту работу только один способ , как выполнение скриптов , как ./test.sh это дает permission denied но с помощью sh test.sh и /bin/sh test.sh можно разрешить ronly выполнять сценарии.

Так есть ли способ, которым я ограничиваю их для выполнения файлов сценариев оболочки?

Пожалуйста, не предлагайте ACL или SElinux. Я не хочу включать это из-за некоторых ограничений.

3 ответа3

2

Без привлечения ACL или SELinux единственный способ, который я нахожу, это добавить в начале скрипта следующее:

if [ "$USER" = "ronly" ]; then
  echo 'Access denied'
  exit 1
fi

Это далеко от совершенства, потому что:

  1. ronly пользователь может прочитать сценарий, так что он может скопировать содержимое в сценарий в его собственном доме и выполнить его.
  2. Любой пользователь может свободно установить свою переменную среды $ USER, например, установить для переменной USER значение abc и выполнить сценарий, который обойдет ограничение.

Если вы делаете это только для того, чтобы избежать "случайных" казней, тогда это работает, но если ваша цель ДЕЙСТВИТЕЛЬНО запретить выполнение, то это не так.

2

В общем, это невозможно. Любой пользователь, который может выполнить оболочку, также может выполнить любой сценарий оболочки, который он может прочитать. Оболочка на самом деле не различает команды, поступающие с терминала, и команды, поступающие из файла.

Так что вам, вероятно, понадобится какая-то ограниченная "оболочка". В принципе, любая программа может быть использована в качестве оболочки для входа.

2

Мы можем разместить проверку в начале скрипта.

userid=`id -u -n`
#echo "$userid" ;

ownuser=`ls -l ${abosolutepath}/${your_script.sh} | awk '{print $3}'`
#echo "$ownuser" ;

if [ ! "$userid" = "$ownuser" ]; then
        echo permission denied
        exit 1
fi

Выше проверки будет проверять, является ли пользователь, который выполняет этот сценарий, так же, как пользователь, который владеет этим сценарием. Если пользователь не совпадает, выполнение будет прекращено.

Я реализовал это в моей среде, и он работает нормально.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .