Подкаталог в / usr / bin действительно запрещен FHS

Это невозможно. Не потому, что в C нет функции, а потому, что модель безопасности Unix это запрещает.

Согласно модели безопасности Unix, программа может только уменьшить свои привилегии, она никогда не может увеличить свои привилегии.Процесс может временно уменьшить свои эффективные привилегии и позже восстановить свои исходные «настоящие» привилегии, но он никогда не сможет продвинуться дальше того места, где он был запущен.

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

  • Он может быть запущен другим процессом, работающим от имени суперпользователя. Так работают консольный вход и вход по SSH.
  • Это может быть исполняемый файл setuid , принадлежащий пользователю root. Вот как работают su и sudo .

Я здесь кое-что упростил, но фундаментальный принцип, согласно которому программа не может увеличить свои привилегии, всегда верен. Есть только один способ, которым процесс может получить привилегии, и это посредством выполнения исполняемого файла setuid¹.

Если программе нужно выполнить какие-то задачи с более высокими привилегиями, она не сможет сделать это сама. Для этого он должен получить процесс с более высокими привилегиями. Он может сделать это либо связавшись с уже работающим сервером, который работает с желаемыми привилегиями, либо запустив исполняемый файл setuid. Исполняемый файл setuid может быть чем-то вроде su или sudo , который, в свою очередь, запускает исполняемый файл, не имеющий каких-либо специальных разрешений, но если есть повышение привилегий, должен быть setuid исполняемый файл в цепочке.

¹ или setgid, setpcap…

1
28.07.2017, 21:15
0 ответов

Теги

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