artgrosvil
@artgrosvil
#dev #programming #student #startups #chill

Как правильно использовать NOPASSWD?

Здравствуйте. Задача такая. От юзера 'user' запускать скрипт как sudo без пароля.

В /etc/sudoers сделал так:
user ALL=NOPASSWD: /opt/scripts/create_user

вывод sudo -l
Matching Defaults entries for 'user' on s-apps:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User 'user' may run the following commands on s-apps:
(root) NOPASSWD: /opt/scripts/create_user
(ALL : ALL) ALL


При запуске:
sudo -u user /bin/bash create_user user_xe1qGnFNmatHzycPKKvk PXeV5NSIhhhiSRg7OHxk


Просит пароль. Почему, не понятно.

Сам скрипт. И как я понял, сам скрипт то запускается, а Permission denied именно на команды в нем.
#!/bin/bash

#Create user
useradd -d /home/$1 -m $1 -s /bin/bash

#Create dir
mkdir /opt/jails/$1

#Include staf
jk_init -v -j /opt/jails/$1 sftp scp
jk_init -j /opt/jails/$1 jk_lsh
jk_init -j /opt/jails/$1 basicshell
jk_init -j /opt/jails/$1 extendedshell
jk_cp -v -f /opt/jails/$1 /bin/bash

#Add user in jail
jk_jailuser -m -j /opt/jails/$1 $1

#Set password for user
echo "$1:$2" | chpasswd


Стоит еще сказать, что пользователь 'user' находится в группе sudo. Может быть из-за этого еще проблемы.
  • Вопрос задан
  • 8981 просмотр
Решения вопроса 2
@mureevms
Очевидно вроде. В sudoers пользователю user должно быть разрешено выполнять команды:
useradd, jk_init, jk_jailuser и jk_cp

И должны быть права на запись в /opt/jails/

А вообще, вставьте после каждой команды echo и ловите где не работает.
Ответ написан
artgrosvil
@artgrosvil Автор вопроса
#dev #programming #student #startups #chill
Нужно из /etc/sudoers убрать строчку @root (ALL:ALL) ALL, которая говорит о том, что всем кто есть в группе root по умолчанию запрашивать пароль. И не важно, что Вы укажите NOPASSWD.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@LevZ
Нигде толком не могут ответить нормально, блин. Пора решить вопрос раз и на всегда)
  • Во-первых, любая команда/скрипт из-под sudo разово выполняется под указанным юзером (root по умолчанию) вплоть до окончания работы команды/скрипта. Т.е. sudo /opt/scripts/create_user в данном случае выполнит все команды скрипта из-под root. Если нужно выполнять команду из-под другого юзера, добавляем -u <username> в sudo.
  • Во-вторых, чтобы не требовалось вводить пароль для запуска определенной команды с sudo, надо действительно добавить строчку типа user ALL=NOPASSWD: /opt/scripts/create_user, но тут важна последовательность - у автора эта строчка затирается правилом ALL=(ALL) ALL (прописывается для группы суперюзеров, например в CentOS обычно: %wheel ALL=(ALL) ALL), которое находится ниже в файле sudoers.
  • В-третьих, надо понимать, что это за ALL-ы: первое это хост, второе в скобках - юзер (еще можно группу указать через ":" как в chown), ну и третье - команды. Т.е. для юзеров группы wheel даётся право выполнять любые команды на любых хостах от любых юзеров, но с повторным вводом пароля. В общем читайте man sudoers, и да пребудет с вами сила.


Т.о. решение проблемы:
  1. строку user ALL=NOPASSWD: /opt/scripts/create_user переместить ниже остальных,
  2. запускать скрипт командой sudo /opt/scripts/create_user - внутри всё будет выполняться уже под root


Так что не надо удалять строки в sudoers, не надо везде пихать ALL, не надо в скрипте на каждую команду вешать sudo. Всем добра и познания.
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Дык в sudoers пользователю 'user' даны права на запуск /opt/scripts/create_user от имени root'а, а в команде запускается /bin/bash от имени user'а.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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