Подробный гайд: Ошибка su: невозможно выполнить /bin/bash: отказано в доступе в Astra Linux
Ошибка su: невозможно выполнить /bin/bash: отказано в доступе в Astra Linux (особенно в редакции Special Edition / SE) при такой последовательности действий — это не баг, а штатная работа системы безопасности.
Почему возникает эта ошибка?
Astra Linux (в отличие от классического Ubuntu/Debian) использует систему мандатного разграничения доступа (MAC / PARSEC). Каждому пользователю и процессу присваивается уровень целостности и секретности.
- Когда вы выполняете
sudo su - postgres, вы попадаете в контекст пользователяpostgres. У него нулевой уровень привилегий (MAC level 0).
- Когда вы находитесь внутри сессии
postgresи вводите простоsu(что по умолчанию означаетsu root), система пытается повысить ваши привилегии доroot(MAC level 3).
- Модуль ядра PARSEC блокирует запуск оболочки
/bin/bashот имениroot, так как процесс с низким уровнем доверия (postgres) не имеет права порождать процесс с высоким уровнем доверия (root).
Именно поэтому su выдает ошибку «отказано в доступе» при попытке выполнить (execve) целевую оболочку.
Решение 1: Правильный рабочий процесс (Рекомендуется)
В Astra Linux (и в Linux в целом) не рекомендуется использовать цепочки вложенных su. Переключение сверху вниз (от root к пользователю) работает штатно, а снизу вверх (от пользователя к root) блокируется политиками безопасности.
Как работать правильно:
- Выйдите из зависшей сессии
postgres, набравexitили нажавCtrl+D.
2. Чтобы получить права суперпользователя, находясь под своей учетной записью, используйте:
sudo -i
# или
sudo su -
3. Если вам нужно выполнить команду от имени postgres, находясь под root или своим пользователем, используйте флаг -u:
sudo -u postgres psql
# или
su - postgres -c "ваша_команда"
Решение 2: Если ошибка возникает сразу при sudo su - postgres
Если ошибка отказано в доступе появляется сразу при попытке зайти в postgres (то есть вы не можете даже попасть в эту учетную запись), значит, проблема не в повышении прав, а в правах на сам файл оболочки или профилях безопасности.
Шаг 1. Проверьте права на /bin/bash
Выполните от имени root:
ls -l /bin/bash
Ожидается:
-rwxr-xr-x. Если прав на выполнение нет, исправьте: sudo chmod 755 /bin/bash.
Шаг 2. Проверьте неизменяемые атрибуты
lsattr /bin/bash
Ожидается:
-------------e-- /bin/bash. Если стоит флаг i (immutable), снимите его: sudo chattr -i /bin/bash.
Шаг 3. Проверка AppArmor
В Astra Linux профили AppArmor могут блокировать запуск bash для сервисных учетных записей.
sudo aa-status
Если /bin/bash находится в списке enforce и вызывает конфликты, можно временно перевести его в режим жалоб (complaining) для диагностики:
sudo aa-complain /bin/bash
Решение 3: Ослабление политик PARSEC (Только для тестовых сред!)
Внимание:
Если это боевой сервер (контур безопасности "Смоленск" или "Орел"), настоятельно не рекомендуется отключать эти механизмы. Данный шаг применим только для тестовых виртуальных машин.
Если вам критично необходимо, чтобы команда su работала без ограничений MAC-уровней:
- Откройте конфигурацию PAM для
su:
sudo nano /etc/pam.d/su
- Найдите строки, связанные с модулем
pam_parsec.so(например,auth required pam_parsec.soилиsession required pam_parsec.so) и закомментируйте их, добавив#в начало. - Сохраните файл и попробуйте выполнить
suснова.
Важно:
- Нажмите
exit, чтобы выйти изpostgres. - Используйте
sudo -iдля получения прав root. - В Astra Linux всегда используйте
sudo -u <user> <command>для запуска команд от других пользователей, это избавит вас от конфликтов с системой мандатного контроля доступа (PARSEC).
Информация предоставлена в ознакомительных целях. Применение описанных настроек в системах, должно осуществляться только после согласования с ответственными за информационную безопасность и в соответствии с требованиями ФСТЭК, ФСБ и иных уполномоченных органов.