Позвольте пользователям выполнять только определенные двоичные файлы с корневыми полномочиями/полномочиями

Когда Вы попросили делать это в ударе, вот решение, которое не использует awk, sed или жемчуг, просто функция удара:

reverse ()
{
    local line
    if IFS= read -r line
    then
        reverse
        printf '%s\n' "$line"
    fi
}

Вывод

echo 'a
b
c
d
' | reverse

d
c
b
a

Как ожидалось.

Но остерегайтесь этого, строки хранятся в памяти, одной строке в каждом рекурсивно названном экземпляре функции. Настолько осторожный с большими файлами.

7
13.08.2011, 14:17
4 ответа

Я вижу два метода:

  1. Позвольте пользователю использовать /sbin/iptables через sudo без ограничения (который является чем-то опасным, это означает, Вы доверяете пользователю так или иначе), и запустите скрипт с полномочиями пользователя. Сценарий вызовет sudo каждый раз /sbin/iptables необходим. Это предполагает, что выполнение сценария будет быстро, так как некоторый ввод пароля будет в конечном счете требоваться равномерно ¹.

    • Преимущество: у Вас не должно быть доверия сценарию.
    • Недостаток: как уже упомянуто, позволяя пользователю использовать /sbin/iptables без ограничения что-то опасное.
  2. Позвольте пользователю называть только сценарий через sudo.

    • Преимущество: использование /sbin/iptables ограничивается сценарием.
    • Недостаток: сценарий должен быть безупречным.

О проблеме Вы упомянули: если сценарий принадлежит скажем, root и имеет обычные полномочия: rwxr-xr-x, пользователи других не могут изменить его, они могут только выполнить его (в конечном счете через sudo получить больше полномочий).

С решением 2, и в случае сценариев оболочки (по сравнению с большим количеством устойчивых двоичных файлов/программ), остерегаются переменных среды и нескольких внешних факторов, которые могут изменить выполнение Вашего сценария. Проверьте, что Ваша sudo конфигурация сбрасывает правильно определение каждой потенциально вредной переменной.


1.Действительно, sudo может быть настроен с NOPASSWD в случае необходимости.

6
27.01.2020, 20:17

Вы могли попытаться изменить владельца группы файла и добавить Вашего пользователя к той группе. Затем Вы могли chmod файл для присвоения полномочий группы, которые позволили бы Вам делать то, в чем Вы нуждаетесь.

Это - изменчивое решение, но это работало бы.

0
27.01.2020, 20:17
  • 1
    Извините, но Ваш ответ действительно неясен. Возможно, Вы могли добавить названия файлов и групп, о которых Вы говорите. –  Stéphane Gimenez 13.08.2011, 05:25
  • 2
    группа /sbin/iptables. добавьте своего пользователя к той группе. chmod /sbin/iptables позволить группе выполнять файл. Это работало бы, не будет он? –  n0pe 13.08.2011, 06:35
  • 3
    По существу Вы создаете новую группу только для пользователя и даете разрешение выполнения для iptables той группе. –  nico 13.08.2011, 08:46
  • 4
    Этот ответ сбивает с толку, и не связан с вопросом OP. Просто бесполезно предотвратить других пользователей для выполнения сценария (как долго, поскольку им не предоставляет поднятые полномочия sudo). –  Stéphane Gimenez 13.08.2011, 13:12
  • 5
    @Stephane - op сказал, что он хотел дать разрешения тому пользователю только (см. первое предложение). Я взял это в качестве ограничения. –  n0pe 13.08.2011, 14:26

Из Википедии:

setuid и setgid (короткий для "идентификатора пользователя аппарата после выполнения" и "идентификатора группы набора после выполнения", соответственно) [1] являются флагами прав доступа Unix, которые позволяют пользователям выполнять исполняемый файл с полномочиями владельца или группы исполняемого файла. Они часто используются, чтобы позволить пользователям на компьютерной системе запускать программы со временно поднятыми полномочиями для выполнения определенной задачи. В то время как принятый идентификатор пользователя или идентификационные обеспеченные полномочия группы не всегда поднимаются, как минимум они конкретны.

Попробуйте что-то вроде этого

stefan@linux-ulsk:/usr/bin> zypper up
Root privileges are required for updating packages.
linux-ulsk:~ # whereis zypper
zypper: /usr/bin/zypper /usr/bin/X11/zypper /usr/include/zypper /usr/share/zypper /usr/share/man/man8/zypper.8.gz
linux-ulsk:~ # chmod u+s /usr/bin/zypper
linux-ulsk:~ # exit
stefan@linux-ulsk:/usr/bin> zypper up
Retrieving repository ...

Я мог запустить застежку-молнию, не будучи корнем, что я не мог прежде.

Будьте осторожны с setuid и setgid! Некоторая книжная кавычка:

Никогда не давайте сценарии оболочки setuid разрешение. Несколько методов для того, чтобы ниспровергать их известны.

3
27.01.2020, 20:17

Удостоверьтесь, что Вы (или соответствующая учетная запись) являетесь владельцем файла и делаете файл только перезаписываемым Вами, не группой. Таким образом, Ваши полномочия были бы чем-то как 750, предположив, что Ваш пользователь находится в корректной группе.

Если они могут выполнить, но не записать файл, то Вас в безопасности добавить, что команда к их sudo перечисляет.

0
27.01.2020, 20:17
  • 1
    Причина я предложил изменить группу вместо владельца, состоит в том, что возможности являются корнем, владеет тем файлом, и изменение пользователя могло бы вызвать конфликты где-то в другом месте. –  n0pe 13.08.2011, 06:36

Теги

Похожие вопросы