У меня в системе два пользователя: itsadok
, мой основной пользователь, и elasticsearch
, пользователь с другим ulimit для запуска ElasticSearch.
Я хотел бы иметь возможность запускать что-либо как дополнительный пользователь без запроса пароля каждый раз.
Я добавил следующую строку в /etc/sudoers
:
itsadok ALL=(elasticsearch:elasticsearch) NOPASSWD: ALL
Как я понимаю, это должно позволить пользователю itsadok на любом хосте запускать любую команду как (пользователь или группа) эластичный поиск без пароля. Однако, попытка что-то вроде
itsadok@dev001$ sudo -u elasticsearch ls
запрашивает у меня пароль. Перезагрузка машины не помогла.
Что я делаю не так?
ОБНОВЛЕНИЕ :
Оказывается, порядок строк в sudoers
значим. Я поместил строку в «Спецификацию привилегий пользователя», которая звучала как правильное место, но строка для группы %admin
, которая появилась позже, переопределяла настройку.
Помещение той же строки в конец файла sudoers решило проблему.
Исправленный ответ из комментариев: Если вы разместите директивы ниже #includedir
, они игнорируются. Переместите строку рядом с определениями групп sudo
или admin
или поместите ее в отдельный файл в /etc/sudoers.d/
.
Выполните следующие действия:
sudo visudo -f /etc/sudoers
usernameusedforlogin ALL=(ALL) NOPASSWD:ALL
esc :wq!
В качестве альтернативы вы можете использовать пакет python pudo: https://pypi.org/project/pudo/1.0.0/
Установка:
user$ sudo -H pip3 install pudo # you can install using pip2 also
Ниже приведен фрагмент кода для использования в автоматизации python для запуска cmds с правами root::
user$ python3 # or python2
>>> import pudo
>>> (ret, out) = pudo.run(('ls', '/root')) # or pudo.run('ls /root')
>>> print(ret)
>>> 0
>>> print(out)
>>> b'Desktop\nDownloads\nPictures\nMusic\n'
Ниже приведен пример cmd для запуска cmds с правами root
user$ pudo ls /root
Desktop Downloads Pictures Music