LINUXTALKS.CO

[HOWTO] Запуск программ под другим пользователем через sudo при минимальной раздаче прав

 ,

L


0

1

Данное HOWTO объясняет как запускать команды под другим пользователем на примере запуска файлового менеджера MidNight Commander (mc) командами вида:

sudo -u mc_user /usr/bin/mc

Подготовка компьютера

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

adduser mc_user

Там надо ответить на несколько вопросов, подробности в справке команды adduser получить доступ к которой можно набрав man adduser.

Убедиться в наличии или отсутствии этого пользователя можно проведя поиск командой grep по файлу /etc/passwd

$cat /etc/passwd | grep mc_user 
mc_user:x:1001:1001::/home/mc_user:/bin/sh
$

Как можно видеть такая строка есть и значит пользователь mc_user присутствует в системе.
(Получение справки аналогично: man cat и man grep по поводу | искать в интернете по запросу перенаправление ввода-вывода linux.

Потом командой passwd mc_user надо задать ему пароль и отдав ту же команду с параметром -l провести БЛОКИРОВАНИЕ аккаунта если доступ будет осуществляться с директивой NOPASSWD или на оборот, разблокировать аккаунт если директива(опция) NOPASSWD использована не будет запустив команду с опцией -u)
Примеры:

adduser -l mc_user
adduser -u mc_user

Обратите внимание, блокировка и разблокировка пользователя на заданный ему пароль никак не влияют, если пароль не задан то после разблокировки пользователя он сам не появится, вы должны его самостоятельно задать.
(Или не задать если он вам не нужен и вы не боитесь что к вам из сети придёт гость. а он придёт и даже быстрее чем на винду, за БЕЗЗАБОТНЫМИ линуксойдами целая охота).

Более подробную информацию о команде passwd можно получить запросом в системе справки линух man passwd

Сбор информации нужной для настройки sudo

Затем надо посмотреть содержимое файла /etc/hostname

$ cat /etc/hostname
kitchen
$

Из этого можно узнать что в данном случае компьютер называется kitchen.
Затем файл /etc/hosts

$ cat /etc/hosts
127.0.0.1	localhost
127.0.1.1	kitchen.local	kitchen

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
$

В нём можно видеть 127.0.1.1 kitchen.local из этого можно узнать что компьютер входит в виртуальный домен .local.

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

Настройка sudo собственно как таковая

Для настройки sudo в каталоге /etc/sudoers.d создаётся один или несколько файлов с произвольными названиями которые заполняются строками вида:

user	kitchen.local=(mc_user:kitchen.local)      NOPASSWD:/usr/bin/mc

в этой строке

  • user это имя пользователя который ЗАПУСКАЕТ команду sudo
  • kitchen.local название моего компьютера при этом .local условный домен внутри компьютера.
    • при этом первое упоминание kitchen.local это компьютер с которого можно отдавать команду ЯВЛЯЯСЬ пользователем user.
    • а второе упоминание в круглых скобках это название компьютера на котором можно отдавать команду ОТ ИМЕНИ пользователя mc_user.
  • mc_user пользователь, от имени которого я запускаю команду.
  • NOPASSWD директива sudo запускать команду без запроса пароля запускающего её пользователя, если её не указать то пароль будет запрошен.
    (Как не трудно догадаться у sudo есть и другие директивы которые вы можете изучить в её руководстве пользователя в интернете или через man sudo)
  • /usr/bin/mc абсолютный путь к исполняемому файлу файлового менеджера MidNight Commander.

!!! ВАЖНО! команда sudo разрешает запускать команду без указания полного пути, но так делать не следует, потому что если не указать путь то будет запущенная первая найденная в указанных переменной окружения PATH директориях команда с таким именем!!!
Если вы не знаете полный путь к нужной вам команде то вы может просмотреть её ярлык как текстовый файл и найти параметр Exec или отдать команду

type 'your_prog_name'

которая выведет полный путь к указанной ей команде если она находится в одной из директорий указанных в переменной окружения PATH.

После этих настроек команда sudo -u mc_user /usr/bin/mc отданная под пользователем user должна работать.
(Но под другими пользователями, в том числе под root НЕ ДОЛЖНА!!!)

Дополнительные настройки

Так же рекомендую закомментировать в файле /etc/sudoers строки с
%sudo ALL=(ALL:ALL) ALL и root ALL=(ALL:ALL) ALL.
Что они делают и с другими настройками sudo разбирайтесь самостоятельно.

Я, torvn77, как оригинальный автор этого HOWTO даю разрешение на его распространение и использование на условиях лицензии CC BY-SA и обязательного указания ссылки на его авторской публикации в виде ссылки https://linuxtalks.co/forum/sysadm/2740 .

★★★