Как переключиться на другую учетную запись без пароля

В этой стаье мы рассмотрим, как переключиться на другую учетную запись пользователя, не используя пароль. Например, у нас есть учетная запись пользователя postgres (системная учетная запись суперпользователя PostgreSQL по умолчанию), мы хотим, чтобы каждый пользователь (обычно наши администраторы баз данных PostgreSQL и системы) в группе postgres мог переключиться на учетную запись postgres с помощью команды su без ввода пароля.

По умолчанию только пользователь root может переключиться на другую учетную запись без ввода пароля. Любому другому пользователю будет предложено ввести пароль учетной записи пользователя, на которую он переключается (или, если он использует команду sudo, ему будет предложено ввести свой пароль), если он не введет правильный пароль, он получит ошибку «Authentication failure».

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

PAM (Pluggable authentication modules) лежит в основе аутентификации пользователей в современных операционных системах Linux. Чтобы позволить пользователям определенной группы переключаться на другую учетную запись пользователя без пароля, мы можем изменить настройки PAM по умолчанию для команды su в файле /etc/pam.d/su.

# nano /etc/pam.d/su

Добавьте следующие строки после строки «auth sufficient pam_rootok.so»:

auth       [success=ignore default=1] pam_succeed_if.so user = postgres
auth       sufficient   pam_succeed_if.so use_uid user ingroup postgres

В приведенной выше конфигурации первая строка проверяет, является ли целевой пользователь postgres, если да, то служба проверяет текущего пользователя, если нет, то строка default=1 будет пропущена и будут выполнены обычные шаги аутентификации.

В следующей строке проверяется, входит ли текущий пользователь в группу postgres, если да, то процесс аутентификации считается успешным и в результате возвращается значение sufficient. В ином случае выполняются обычные шаги аутентификации.

Сохраните файл и закройте его.

Затем добавьте пользователя (например, testov), который будет работать под учетной записью postgres без пароля, в группу postgres с помощью команды usermod.

# usermod -aG postgres testov

Теперь попробуйте войти в учетную запись postgres из-под пользователем testov, пароль запрашиваться не должен.

$ su - postgres

Вы также можете переключиться на другого пользователя без введения пароля, внеся некоторые изменения в файл sudoers. В этом случае пользователь (например, testov), который будет переключаться на другую учетную запись пользователя (например, postgres), должен быть в файле sudoers или в группе sudo, чтобы иметь возможность применять команду sudo.

# visudo

Добавьте следующую строку после строки «%sudo ALL=(ALL:ALL) ALL»:

testov ALL=NOPASSWD: /bin/su – postgres

Сохраните и закройте файл.

Теперь попробуйте войти в учетную запись postgres из-под пользователя testov, пароль запрашиваться не должен:

$ sudo su - postgres

На этом пока все! Для получения дополнительной информации смотрите страницу руководства по PAM (man pam.conf)

$ man pam.conf

и по команде sudo (man sudo).

$ man sudo