Введение
Команда su (substitute user) в Linux — это мощный инструмент, позволяющий пользователям временно переключаться на другую учетную запись, чаще всего на пользователя root, для выполнения административных задач. Однако иногда возникают ошибки аутентификации su, которые приводят к отказу в доступе и создают потенциальные риски безопасности. В этом руководстве вы пройдете процесс устранения неполадок при аутентификации su в Linux, изучите распространенные причины, параметры конфигурации и лучшие практики безопасного использования этой команды.
Понимание команды Su и основы работы
На этом этапе вы узнаете, как команда su в Linux позволяет пользователям переключаться на другую учетную запись. Это особенно полезно для выполнения административных задач, требующих повышенных привилегий.
Давайте рассмотрим базовое использование команды su и принципы её работы.
Базовое использование Su
Откройте терминал в вашей среде LabEx VM. Вы можете использовать команду su со следующим синтаксисом:
su [options] [username]
Если запустить su без указания имени пользователя, по умолчанию будет выбран пользователь root:
su
Команда обращается к root, но в Ubuntu аутентификация root по паролю обычно заблокирована. Ошибка аутентификации в этом случае ожидаема. Не включайте вход root по паролю и не изменяйте учётную запись платформы; во всех успешных проверках входа ниже используются временные учебные пользователи.
Давайте создадим тестового пользователя для практики:
sudo adduser testuser
Введите необходимую информацию при появлении запроса. Только для этой временной тестовой учётной записи используйте учебный пароль DemoUser123!. Никогда не изменяйте пароль labex или его членство в группе sudo.
Теперь попробуем переключиться на этого пользователя:
su testuser
При появлении запроса введите пароль, созданный для testuser. После успешной аутентификации приглашение командной строки изменится, указывая на то, что теперь вы работаете от имени testuser.
Чтобы убедиться, что вы успешно сменили пользователя, выполните:
whoami
Вывод должен быть таким:
testuser
Чтобы вернуться к исходному пользователю, просто введите:
exit
Использование Su с параметрами
Команда su поддерживает несколько параметров. Наиболее распространенным является - (дефис), который обеспечивает полноценное окружение входа в систему:
su - testuser
Это не только меняет идентификатор пользователя, но и:
- Переходит в домашний каталог целевого пользователя
- Настраивает переменные окружения целевого пользователя
- Предоставляет оболочку входа (login shell)
Попробуйте выполнить эту команду и заметьте разницу:
pwd
Вывод должен показать домашний каталог testuser:
/home/testuser
Выйдите из учетной записи testuser, введя:
exit
Это базовое понимание команды su поможет нам устранять ошибки аутентификации на следующих этапах.
Распространенные ошибки аутентификации Su и их причины
На этом этапе вы создадите и изучите типичные ошибки аутентификации su. Понимание этих ошибок — первый шаг к их устранению.
Тестирование ошибок аутентификации
Давайте намеренно создадим несколько ошибок аутентификации, чтобы лучше их понять.
Сначала попробуйте переключиться на testuser с неверным паролем:
su testuser
Введите неправильный пароль. Вы увидите сообщение об ошибке, похожее на:
su: Authentication failure
Затем попробуйте переключиться на несуществующего пользователя:
su nonexistentuser
Вы увидите сообщение об ошибке:
su: user nonexistentuser does not exist
Распространенные причины ошибок аутентификации
1. Неверный пароль
Самая частая причина ошибки аутентификации — просто неверно введенный пароль. Это может произойти из-за:
- Опечаток
- Включенной клавиши Caps Lock
- Забытого пароля
2. Ограничения учетной записи
Некоторые учетные записи могут быть настроены так, чтобы запрещать вход, или иметь истекший срок действия пароля.
Давайте изменим нашего тестового пользователя, чтобы продемонстрировать это:
sudo usermod -L testuser
Параметр -L блокирует аутентификацию по паролю для временной учётной записи testuser. Теперь попробуйте:
su testuser
Вы увидите ошибку аутентификации, даже если введете правильный пароль.
Параметр -U снимает эту блокировку пароля. Разблокируйте только эту тестовую учётную запись:
sudo usermod -U testuser
3. Проблемы с конфигурацией PAM
Система Pluggable Authentication Modules (PAM) управляет аутентификацией в Linux. Проблемы с конфигурацией PAM могут привести к сбоям su.
Давайте изучим конфигурацию PAM для команды su:
cat /etc/pam.d/su
Этот файл содержит конфигурацию PAM, специфичную для команды su. Ищите строки, которые могут ограничивать доступ, например:
auth required pam_wheel.so
Эта строка, если она раскомментирована, ограничивает доступ к su только для членов группы wheel.
4. Проблемы с правами доступа к бинарному файлу Su
Бинарный файл команды su должен иметь правильные права доступа для корректной работы:
ls -l $(which su)
Вывод должен выглядеть примерно так:
-rwsr-xr-x 1 root root 71816 Apr 18 2022 /usr/bin/su
Буква s в правах доступа указывает на то, что установлен бит setuid, позволяющий программе выполняться с привилегиями её владельца (root), а не пользователя, который её запускает.
5. Изучение журналов аутентификации
При устранении неполадок аутентификации в этой виртуальной машине LabEx проверяйте записи о неудачных попытках входа с помощью lastb:
sudo lastb | head
Эта команда считывает /var/log/btmp и отображает недавние неудачные попытки аутентификации, включая попытки su, если они были зафиксированы системой.
Например, неудачная попытка su может отобразить запись, включающую целевого пользователя и сеанс терминала.
Понимание этих распространенных причин ошибок аутентификации su поможет вам более эффективно выявлять и решать проблемы на следующих этапах.
Настройка контроля доступа для команды Su
На этом шаге вы проверите групповое правило PAM для временной целевой учётной записи. Вы не будете включать вход root по паролю или ограничивать доступ к платформе.
Подготовьте временные учётные записи
Начните в исходной оболочке labex. Перед использованием sudo подтвердите текущую учётную запись:
whoami
Результат должен быть labex. Создайте второго вызывающего пользователя и отдельную целевую учётную запись, затем задайте пароли только для этих временных учётных записей:
sudo adduser --disabled-password --gecos '' testuser2
sudo adduser --disabled-password --gecos '' su-lab-target
printf '%s\n' 'testuser2:DemoOther123!' 'su-lab-target:DemoTarget123!' | sudo chpasswd
sudo groupadd sugroup
sudo usermod -aG sugroup testuser
В sugroup входит только testuser. Новые оболочки входа получат это членство в группе. Пароль целевой учётной записи для обеих проверок вызывающих пользователей — DemoTarget123!.
Примените правило PAM для конкретной цели
PAM управляет аутентификацией su через /etc/pam.d/su. При подготовке среды исходное содержимое файла было сохранено в /opt/labex/su-demo. Следующий блок в начале файла применяет проверку группы только тогда, когда целевая учётная запись — su-lab-target. Первое правило пропускает следующее правило для всех остальных целей, включая labex. use_uid проверяет реальную учётную запись вызывающего пользователя, а group=sugroup задаёт разрешённую группу.
sudo python3 - <<'PY'
from pathlib import Path
original = Path('/opt/labex/su-demo/pam-su.original').read_text()
prefix = """## Lab-only rule for su-lab-target
auth [success=1 default=ignore] pam_succeed_if.so quiet user != su-lab-target
auth required pam_wheel.so use_uid group=sugroup
"""
Path('/etc/pam.d/su').write_text(prefix + original)
PY
Исходные правила PAM остаются после этого блока. Членство в группе не заменяет аутентификацию по паролю. Не добавляйте labex в демонстрационную группу и не изменяйте настройки SSH, sudo или учётной записи платформы.
Проверьте пользователя вне группы
Переключитесь с labex на testuser2, используя DemoOther123!:
su - testuser2
Из этой оболочки попробуйте перейти в целевую учётную запись с ограниченным доступом, используя её правильный пароль DemoTarget123!:
su - su-lab-target
Попытка должна завершиться отказом в аутентификации, поскольку testuser2 не входит в sugroup. Неудачная команда su не создаёт новую оболочку. Выполните exit один раз, чтобы вернуться к labex:
exit
whoami
Прежде чем продолжить, подтвердите, что whoami выводит labex.
Проверьте пользователя внутри группы
Переключитесь на testuser, используя его пароль DemoUser123! из шага 1:
su - testuser
id
su - su-lab-target
Введите DemoTarget123! для целевой учётной записи. Переключение должно завершиться успешно. Подтвердите целевую учётную запись:
whoami
Вывод должен быть su-lab-target. Было открыто две оболочки, поэтому выполните exit дважды: сначала для возврата к testuser, затем к labex:
exit
exit
whoami
Подтвердите, что whoami выводит labex. Никогда не выполняйте команду восстановления из оболочки временного пользователя.
Восстановите исходную политику
От имени labex восстановите сохранённую конфигурацию и сравните её с оригиналом:
sudo cp -p /opt/labex/su-demo/pam-su.original /etc/pam.d/su
sudo cmp /opt/labex/su-demo/pam-su.original /etc/pam.d/su
Успешное сравнение ничего не выводит. Демонстрационная группа и пользователи остаются доступны для диагностики, а su снова использует исходную политику.
Устранение неполадок и решение проблем аутентификации Su
На этом шаге вы воспользуетесь систематическим подходом для диагностики и устранения ошибок аутентификации su.
Диагностика ошибок аутентификации
При ошибке аутентификации su последовательно выполните следующие диагностические шаги:
Шаг 1: Проверьте сообщение об ошибке
Сообщение об ошибке может дать важные сведения о характере сбоя. Распространённые сообщения:
su: Authentication failure— обычно указывает на неверный пароль.su: user username does not exist— указанная учётная запись пользователя не существует.su: permission denied— ограничения контроля доступа блокируют операцию.
Шаг 2: Проверьте учётную запись пользователя
Убедитесь, что целевая учётная запись существует и не заблокирована:
grep testuser /etc/passwd
Команда должна вывести запись testuser из файла паролей, подтверждая существование учётной записи.
Проверьте, заблокирована ли учётная запись:
sudo getent shadow testuser | cut -d: -f2 | cut -c1
Команда показывает только первый символ поля пароля временной учётной записи, а не хеш пароля. Начальный символ ! означает, что аутентификация по паролю заблокирована.
Шаг 3: Проверьте ограничения контроля доступа
Как вы узнали на предыдущем шаге, конфигурация PAM может ограничивать доступ через su. Проверьте наличие таких ограничений:
grep -v "^#" /etc/pam.d/su | grep pam_wheel
Если команда возвращает строку с pam_wheel.so, доступ через su может быть ограничен членами определённой группы.
Шаг 4: Изучите системные журналы
Записи о неудачных попытках входа могут содержать полезные сведения об ошибках аутентификации:
sudo lastb | head
Ищите записи о ваших неудачных попытках su, которые могут дать дополнительный контекст.
Устранение распространённых ошибок аутентификации Su
Рассмотрим распространённые ошибки аутентификации su и способы их устранения:
1. Неверный пароль
Если вы вводите правильный пароль, но всё равно получаете ошибки аутентификации, может потребоваться сброс пароля:
printf '%s\n' 'testuser:DemoUser123!' | sudo chpasswd
Так вы сбрасываете только пароль временного пользователя testuser до известного учебного значения; пароль labex или root не изменяется.
2. Учётная запись заблокирована
Если учётная запись заблокирована, разблокируйте её:
sudo usermod -U testuser
3. Ограничения контроля доступа
Если ограничения контроля доступа блокируют su, вы можете:
а. Добавить пользователя в требуемую группу:
sudo usermod -aG sugroup testuser2
Это добавляет testuser2 в sugroup.
б. В этом задании удалить только демонстрационную политику, восстановив исходный сохранённый файл:
sudo cp -p /opt/labex/su-demo/pam-su.original /etc/pam.d/su
Так вы восстанавливаете точную исходную политику su вместо отключения произвольных правил аутентификации.
4. Проблемы с правами доступа к файлам
Изучите права доступа к исполняемому файлу su, не изменяя исполняемый файл платформы:
ls -l "$(command -v su)"
Ожидаемый бит setuid отображается как s в позиции разрешения на выполнение для владельца. Если исполняемый файл платформы повреждён, используйте новую виртуальную машину вместо изменения его прав доступа.
Проверка исправлений
После применения исправлений проверьте, правильно ли работает аутентификация su:
su - testuser
Введите пароль testuser при появлении запроса. При успешной аутентификации вы войдёте как testuser.
Выполните whoami, чтобы подтвердить testuser, затем выполните exit один раз для возврата к labex. Не используйте вход root по паролю в качестве проверки успеха: положительный сценарий — вход во временную учётную запись.
Эти диагностические шаги и исправления охватывают наиболее распространённые ошибки аутентификации su. Последовательно выявляя и устраняя причины, вы сможете обеспечить правильную работу команды su в своей системе.
Лучшие практики безопасного использования Su
На этом шаге вы рассмотрите безопасное использование привилегий и подтвердите, что демонстрация не изменила доступ к платформе.
Используйте Sudo для отдельных административных команд
Sudo позволяет предоставлять права на отдельные административные действия и записывать их в журнал без передачи пароля root. Из оболочки labex выведите содержимое домашнего каталога root, не запуская оболочку входа root:
sudo ls /root
Сохраните существующую политику sudo платформы. Вы можете изучить разрешённые вам команды, не изменяя политику:
sudo -l
Ограничивайте область изменений аутентификации
В производственных системах администраторы управляют входом root, качеством паролей и политикой аутентификации через утверждённые процессы настройки. Это упражнение не изменяет настройки SSH, пароль labex или членство labex в группах. Надёжная политика паролей или многофакторная аутентификация требуют отдельного внедрения; в этом руководстве ни то ни другое не настраивается.
Подтвердите удаление временной политики su:
sudo cmp /opt/labex/su-demo/pam-su.original /etc/pam.d/su
Отсутствие вывода означает, что политика совпадает с сохранённым оригиналом.
Проверяйте неудачные попытки аутентификации
Для расследования неудачных попыток используйте базу данных неудачных входов:
sudo lastb | head
Команда читает /var/log/btmp; она не показывает все успешные сеансы su. Интерпретируйте только записи, которые система действительно сохранила, и расследуйте повторяющиеся отказы в производственной среде.
Используйте окружение входа и явно возвращайтесь
Параметр дефис запускает окружение входа целевого пользователя. Используйте пароль testuser DemoUser123!:
su - testuser
whoami
exit
whoami
Две проверки учётной записи должны показать testuser, а затем labex. Команда exit закрывает только оболочку, созданную su. Виртуальная машина сохраняет исходную учётную запись платформы, доступ через sudo и политику su.
Резюме
В этой лабораторной работе мы изучили команду su в Linux и научились устранять распространенные ошибки аутентификации. Мы рассмотрели:
- Базовое использование команды
suи принципы её работы - Определение распространенных причин ошибок аутентификации
su, включая неверные пароли, ограничения учетных записей и проблемы с конфигурацией PAM - Настройку контроля доступа для команды
suдля повышения безопасности - Устранение неполадок и решение проблем аутентификации
suс помощью систематической диагностики - Внедрение лучших практик безопасного использования
su, включая использование sudo, настройку надежных политик паролей и регулярный аудит использованияsu
Применяя эти методы и лучшие практики, вы можете обеспечить корректную работу команды su, сохраняя при этом безопасность вашей системы Linux. Помните, что надлежащее управление аутентификацией является важнейшим аспектом системного администрирования и безопасности.



