LINUX.ORG.RU

Можно ли сделать два вида админов?


0

1

Я бы хотел дать возможность пользователям самостоятельно устанавливать приложения без админских прав. Устанавливать приложения пользователи будут туда, куда у них хватит прав (в первом приближении в свою домашнюю директорию, см. ниже).

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

Для того, чтобы такого не происходило, во втором приближении, я хочу сделать пользователю дополнительный аккаунт, чтобы права на приложения были не такие как права у пользователя. Т.е. хочу два разных вида рутов. Один рут - совсем рут, а второй рут - не совсем рут и слегка пользователь. А третий - совсем пользователь.

Обозначим аккаунты буквами А - администратор, У - учитель, С - студент.

Можно ли настроить пользователю sudo таким образом, чтобы ему давались права на этот второй аккаунт, а не на аккаунт администратора?

Есть пять областей:

а) то, что установлено рутом для себя, и доступно руту (rw)

б) то, что установлено рутом для учителя (или учителем для себя через sudo), и доступно руту (rw) и учителю (r)

в) то, что наредактировано учителем для себя, и доступно руту (rw) и учителю (rw)

г) то, что установлено учителем для учеников (или учениками для себя через sudo), и доступно руту (rw), учителю (rw) и ученикам (r)

д) то, что ученики делают сами (rw)

Учитель не может читать файлы, установленные рутом лично руту (область «а»). И ученик не сможет читать файлы, установленные себе учителем (область «в»).

Итого, у учеников доступ к области «д» на запись, и к области «г» на чтение.

Именно поэтому вирусы, запущенные под учеником не смогут запортить у учителя всё, и у рута тем более. Разумеется. при условии, что вирусы не знают пароля учителя.

Нужно настроить sudo так, чтобы ученик мог ставить софт в область «г», но не мог ставить софт в область «б». К руту с учителем это, кстати, тоже относится.

Какой символ в таком случае должен использоваться в качестве подсказки bash вместо ‘#’ и ‘$’ ? Кажется, можно сделать ‘#’, ‘¤’ и ‘₽’ (первый - сидеть за решеткой, если что-то испортит, второй - обозначает универсальность, а третий - это локализованная версия доллара).

★★★★

Последнее исправление: Shushundr (всего исправлений: 9)
Ответ на: комментарий от mky

Удачи парсить скриптом yaml и искать в нём опасные поля. А так же сражаться с race condition-ами, когда он сначала проверит что файл разрешён, а потом коварный юзер его подменит на привилегированный. Это всё даже бинарником не совсем тривиально делать (а всё потому, что докер - помойка).

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от firkax

Вобще не совсем понятно, зачем его парсить, для типовых задач его проще генерить, по нескольким параметрам скрипта, но так, питон+PyYAML.

а потом коварный юзер его подменит на привилегированный.

Скрипт сначала копирует себе файл и потом вобще пофиг, что там сделает пользователь со своей копией.

докер - помойка

Тут про sudo речь шла, что скрипт запукаемый через sudo (который парсит как надо аргументы и пр.) проще, чем suid-бинарник, в который нужно засовывать проверку пользователя/пароля.

mky ★★★★★
()

Прочитал твою новую задачу. По-прежнему к sudo это отношения не имеет ни малейшего, sudo предназначено для того, чтобы давать возможность выполнять команды от иных пользователей.

А у тебя вполне стандартная задача на разграничение прав на директории, это делается через обычные права Unix + ACL.

https://www.sandervanvugt.com/red-hat-rhcsa-8-cert-guide-ex200/ — прочти главы 6 и 7 в этой книге, всё расписано.

Vsevolod-linuxoid ★★★★★
()
Ответ на: комментарий от Vsevolod-linuxoid

Моя задача - придумать хоть какую-то пользу от предложенной схемы. И такая польза есть!

Если у ученика был доступ при помощи sudo к рутовому аккаунту, то вирус при помощи кейлоггера захватил бы всю машину.

В моей схеме с тремя аккаунтами такого не произойдёт.

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

Shushundr ★★★★
() автор топика
Последнее исправление: Shushundr (всего исправлений: 2)
Ответ на: комментарий от Shushundr

Вообще, соглашусь с @firkax — ты очень неправ, причем очень глупо.

Твоя схема с sudo на уровень выше элементарно ломается до самого root:

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

Таким образом через какое-то время вирус получит доступ до учетной записи пользователя с sudo на все команды, после чего уже полноценный root доступ.

Кстати, эта схема работает и в том случае, если пользователи используют su - для повышения привилегий. Именно поэтому по-хорошему в root нужно логиниться только с tty.

Vsevolod-linuxoid ★★★★★
()
Ответ на: комментарий от Vsevolod-linuxoid

goto 2

Если учитель не запускает программы, установленные учениками, то этот шаг никогда не выполнится.

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

Shushundr ★★★★
() автор топика
Ответ на: комментарий от Shushundr

Если учитель не запускает программы, установленные учениками

Руками и осознанно — нет. Но что помешает вирусу с sudo доступом на запись учителю прописать себя в автозапуск у него?

под аккаунтом учителя не производится ввод с клавиатуры и нечего перехватывать

установлено рутом для учителя (или учителем для себя через sudo)

Ты противоречишь сам себе. Как я понял, у тебя учитель имеет sudo на все команды. И вводит свой пароль для такого.

Vsevolod-linuxoid ★★★★★
()
Ответ на: комментарий от Vsevolod-linuxoid

Такая возможность есть, но этой возможностью не обязательно пользоваться. Я уже понял, что если пользоваться - то это дыра, и теперь предлагаю ей не пользоваться. Цепочку аккаунтов можно сделать какой угодно вложенности, и если не хватает трёх уровней, то можно сделать пять.

Просто мне лично для себя хватит трёх.

Shushundr ★★★★
() автор топика
Последнее исправление: Shushundr (всего исправлений: 1)
Ответ на: комментарий от Shushundr

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

Vsevolod-linuxoid ★★★★★
()
Ответ на: комментарий от Vsevolod-linuxoid

Да хотя бы и 1000 уровней вложенности

Нет.

  1. нельзя пройти через уровень, которым не пользуются для ввода паролей.

  2. достаточно разделить уровни, которыми пользуются, промежуточными неиспользуемыми уровнями.

Shushundr ★★★★
() автор топика
Последнее исправление: Shushundr (всего исправлений: 1)
Ответ на: комментарий от Shushundr

Пароли можно подобрать. Но я не понимаю, нафига sudo вообще?

Как я уже писал, можно использовать отдельный root, а всё остальное на правах Unix+ACL организовать.

Vsevolod-linuxoid ★★★★★
()
Последнее исправление: Vsevolod-linuxoid (всего исправлений: 1)
Ответ на: комментарий от Vsevolod-linuxoid

я не понимаю, нафига sudo вообще?

Я задавал этот вопрос выше по топику, на тему, почему вообще аккаунт root не удалить. Ответить по-существу не смогли.

Shushundr ★★★★
() автор топика
Ответ на: комментарий от Forum0888

Устанавливаете 1С

Не могу, она платная, а я нищеброд. Но порядочный, воровать - грех.

Shushundr ★★★★
() автор топика
Последнее исправление: Shushundr (всего исправлений: 1)
Ответ на: комментарий от Vsevolod-linuxoid

Ну не хочу я изучать –левую– копирастную систему, которая на линукс встанет со скрипом (и это неточно), ради того, чтобы узнать пару фактов.

Shushundr ★★★★
() автор топика
Последнее исправление: Shushundr (всего исправлений: 1)
Ответ на: комментарий от Shushundr

https://www.sandervanvugt.com/red-hat-rhcsa-8-cert-guide-ex200/ — прочти главы 6 и 7 в этой книге, всё расписано.

И выполни упражнения. Там почти то, что ты хочешь и прорабатывается.

Vsevolod-linuxoid ★★★★★
()
Ответ на: комментарий от Vsevolod-linuxoid

Если бы всё было просто, ты бы просто объяснил несколькими предложениями. Ты же регулярно совершаешь логические ошибки. Тебе просто не удалось меня убедить, смирись. Кто виноват - сам реши, если я, то инфантил ты. Если ты, ну сам понимаешь…

Первая твоя ошибка заключается в том, что ты настаиваешь на том, что я не понимаю как работают ACL. Вторая в том, что не не умею в рекурсию. И так далее.

Shushundr ★★★★
() автор топика
Последнее исправление: Shushundr (всего исправлений: 1)
Ответ на: комментарий от Shushundr

Во-первых, чтобы использовать nix не нужно ставить NixOS. Nix работает на любом дистрибутиве и даже на макоси.

Во-вторых, 19 лет тебе мало, нужно чтоб обязательно было 20?

Nix Initial release June 15, 2003; 19 years ago

NixOS Initial release 0.1 / June 3, 2003; 19 years ago

Tsukasa
()

Существуют механизмы unprivileged user namespaces (позволяет непривилегированному пользователю создать изолированное окружение с ограниченным доступом наружу, используется во Flatpak), запрета новых привилегий (после этого suid/sgid/file capabilities более не имеют эффекта), seccomp (самоограничение доступа к системным вызовам) и Landlock (самоограничение доступа к файловой системе). Опять же, на практике, первые три используются во Flatpak. Последнее может использоваться приложениями в песочнице для дальнейшего самоограничения.

PeachBlossoms
()

Рутов ты можешь создать сколько угодно и назначить им разные группы (хотя с точки зрения безопасности это не поможет, только с точки зрения удобства), но всё упирается в то, что пакетные менеджеры к такому подходу вряд ли готовы и у тебя ничего не получится. Возможно со всякими снапами получится то, что ты хочешь.

vbr ★★★★
()
Последнее исправление: vbr (всего исправлений: 2)