su (сокр. от англ. Substitute User, Set UID, Switch User, Super User — замена пользователя, переключение пользователя, суперпользователь) — команда Unix-подобных операционных систем, позволяющая пользователю войти в систему под другим именем, не завершая текущий сеанс. Обычно используется для временного входа суперпользователем для выполнения административных работ.

Синтаксис

править
su [-] [имя_пользователя [аргумент ... ]]

Команда su позволяет пользователю выполнять команды от имени другого пользователя, не завершая текущий сеанс, или получить роль. По умолчанию предполагается работа от имени пользователя root.

Для использования su необходимо ввести соответствующий пароль (если только команду не вызывает пользователь root). Если введён правильный пароль, su создает новый процесс командного интерпретатора, с такими же реальными и эффективными идентификаторами пользователя и группы, а также списком дополнительных групп, что и у указанного пользователя. В качестве нового командного интерпретатора используется указанный в поле начальной программы записи файла passwd для соответствующего пользователя (см. passwd(4)). Если командный интерпретатор там не указан, используется /usr/bin/sh (см. sh(1)). Чтобы вернуться в прежний сеанс, введите символ конца файла, EOF (Ctrl-D) для завершения работы нового командного интерпретатора.

Любые дополнительные аргументы, заданные в командной строке, передаются новому командному интерпретатору. При использовании программ типа sh, если аргумент имеет вид -c строка, то строка выполняется интерпретатором как команда, а аргумент -r приводит к запуску ограниченного командного интерпретатора.

Следующие утверждения верны, если в качестве начальной программы в учётной записи пользователя задана /usr/bin/sh или пустая строка (что означает стандартный командный интерпретатор /usr/bin/sh). Если первый аргумент su — дефис (-), среда будет установлена такой же, как при регистрации заданного пользователя. Иначе передается текущая среда, за исключением значения $PATH, которое задается переменными PATH и SUPATH в файле /etc/default/su. Кроме того, если задан аргумент дефис устанавливается идентификатор проекта пользователя. См. settaskid(2).

Все попытки стать другим пользователем с помощью команды su регистрируются в журнальном файле /var/adm/sulog (см sulog(4)).

Защита

править

Команда su использует механизм pam (3PAM) для аутентификации, управления учётной записью и управления сеансом. Конфигурация модулей PAM, задаваемая в файле /etc/pam.conf, перечисляет модули, которые должны использоваться для команды su. Вот часть файла pam.conf с записями для su, задающими использование стандартного (UNIX) модуля аутентификации, управления учётной записью и сеансом.

su auth required /usr/lib/security/pam_unix.so.1
su account	required /usr/lib/security/pam_unix.so.1
su session	required /usr/lib/security/pam_unix.so.1

Если записей для службы su в этом файле нет, будут применяться записи для службы «other». Если перечислено несколько модулей аутентификации, у пользователя могут запрашивать несколько паролей.

Примеры

править

Пример 1: Работа от имени пользователя bin в прежней среде

править

Чтобы стать пользователем bin, сохранив прежнюю среду, выполните команду:

   example% su bin

Пример 2: Работа от имени пользователя bin в его начальной среде

править

Чтобы стать пользователем bin, изменив среду так, как если бы он действительно зарегистрировался в системе, выполните команду:

   example% su - bin 

Пример 3: Выполнение одной команды с правами и в среде пользователя bin

править

Чтобы выполнить команду во временной среде и с правами пользователя bin, введите:

   example% su - bin -c "command args" 

Переменные среды

править

Переменные с префиксом LD_ убраны из соображений защиты. Поэтому при выполнении su bin в среде не останутся ранее экспортированные переменные с префиксом LD_ при работе от имени bin.

Если в среде не установлены какие-то из переменных LC_* (LC_CTYPE, LC_MESSAGES, LC_TIME, LC_COLLATE, LC_NUMERIC и LC_MONETARY) (см. environ(5)), поведение команды su для соответствующих категорий локали определяется значением переменной среды LANG. Если установлена переменная LC_ALL, её значение имеет приоритет и над значением LANG, и над значениями других переменных LC_*. Если ни одна из перечисленных переменных в среде не установлена, поведение su задает локаль «C» (американского стиля).

LC_CTYPE

Определяет, как su обрабатывает символы. Если переменная LC_CTYPE имеет допустимое значение, su может выдавать и обрабатывать текст и имена файлов, содержащие допустимые для этой локали символы. Команда su может выдавать и обрабатывать символы Extended Unix Code (EUC), каждый из которых может быть представлен как 1, 2 или 3 байта. su также может обрабатывать символы EUC, занимающие 1, 2 или более символьных позиций. В локали «C» допустимы только символы кодовой страницы ISO 8859-1.

LC_MESSAGES

Определяет, как выдаются диагностические и информационные сообщения. В частности, язык и стиль сообщений, а также допустимые формы утвердительного и отрицательного ответа. В локали «C» сообщения выдаются в стандартном виде, как представлены в самой программе (в большинстве случаев, на американском диалекте английского языка).

$HOME/.profile

команды для sh и ksh, выполняемые при регистрации пользователя

/etc/passwd

файл паролей (учетных записей) системы

/etc/profile

общесистемные команды для sh и ksh, выполняемые при регистрации всех пользователей, использующих эти командные интерпретаторы в качестве начальных

/var/adm/sulog

файл журнала

/etc/default/su

файл стандартных параметров su со следующими параметрами:

   SULOG

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

   CONSOLE

Если задан, все попытки выполнить с помощью su команды от имени пользователя root регистрируются на консоли.

   PATH

Стандартный путь поиска выполняемых программ. (/usr/bin:)

   SUPATH

Стандартный путь поиска выполняемых программ для пользователя, пытающегося с помощью su выполнить команды от имени пользователя root. (/usr/sbin:/usr/bin)

   SYSLOG

Определяет, должны ли все попытки вызова su регистрироваться с помощью средств syslog(3C) LOG_AUTH. При попытке выполнения команд от имени root с помощью su генерируются сообщения LOG_NOTICE, при попытке выполнения команд от имени других пользователей генерируются сообщения LOG_INFO, а для неудавшихся попыток вызова su генерируются сообщения LOG_CRIT.

   SLEEPTIME

Если задан, определяет количество секунд ожидания, прежде чем на экран выдается сообщение о неудачной попытке регистрации (login failure) и разрешается новая попытка. Стандартное значение — 4 секунды. Минимальное — 0 секунд, максимальное — 5 секунд.