2

Я пытаюсь настроить скрипт, который будет запускаться от имени пользователя "maint". Сценарий в основном представляет собой меню, которое позволяет обслуживающему персоналу выполнять разные действия на сервере.
Однако для правильной работы некоторые из сценариев, которые будут выполняться в главном меню, должны запускаться от имени определенных пользователей.

Мой вопрос заключается в том, как выполнить указанные команды с помощью sudo и не требуя пароля. Помните, что скрипты, которые выполняются из меню, должны запускаться от имени другого пользователя. Вот демонстрация того, что я пытался и пытаюсь достичь.

файл "sudoTest" находится в /home /user1 / файл "testSudo" находится в /home / maint

"sudoTest" выглядит следующим образом:

#!/bin/bash

echo "I am in sudoTest"
whoami

"testSudo" выглядит следующим образом:

#!/bin/bash

sudo -u user1 /home/user1/sudoTest

Моя цель состоит в том, чтобы, когда я вошел в систему как пользователь maint и запустил "testSudo", результатом команды whoami будет "user1"

Это то, как файл выглядит в настоящее время, когда я использую команду visudo

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL
maint   ALL= NOPASSWD: /home/user1/*

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d        

Другая странная вещь в том, что когда я делаю это из командной строки:

sudo /home/user1/sudoTest

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

Я в корне sudoTest

но когда я пытаюсь выполнить "testSudo", он запрашивает пароль, и когда я ввожу его, я возвращаюсь:

Извините, пользователю maint не разрешено выполнять '/home/user1/testSudo' как user1

Спасибо за любую помощь!

2 ответа2

2

Я нашел проблему.

Проблема была в том, что в файле sudoers отсутствовал кусок

# User privilege specification
root    ALL=(ALL:ALL) ALL
maint   ALL= NOPASSWD: /home/user1/*

должно быть

# User privilege specification
root    ALL=(ALL:ALL) ALL
maint   ALL=(ALL) NOPASSWD: /home/user1/*
0

Я считаю, что вы запускаете скрипт как пользователь, который его вызвал, а не как пользователь sudo. Вот исключение из man-страниц sudo.

 -i [command]
                   The -i (simulate initial login) option runs the shell
                   specified in the passwd(5) entry of the target user as a
                   login shell.  This means that login-specific resource files
                   such as .profile or .login will be read by the shell.  If a
                   command is specified, it is passed to the shell for
                   execution.  Otherwise, an interactive shell is executed.
                   sudo attempts to change to that user's home directory
                   before running the shell.  It also initializes the
                   environment, leaving DISPLAY and TERM unchanged, setting
                   HOME, MAIL, SHELL, USER, LOGNAME, and PATH, as well as the
                   contents of /etc/environment on Linux and AIX systems.  All
                   other environment variables are removed.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .