Команда Sudo su в Linux
Обновлено: 22.11.2024
В Unix-подобных операционных системах команда sudo ("superuser do") позволяет пользователю с соответствующими разрешениями выполнять команду от имени другого пользователя. По умолчанию sudo выполняет команды от имени пользователя root.
Когда он был впервые создан, sudo мог переключаться только на суперпользователя, поэтому это сокращение от «superuser do». Сегодня он также может переключаться на других пользователей, поэтому некоторые теперь могут называть эту команду «заменить пользователя, сделать» или «сменить пользователя, сделать».
На этой странице описывается версия sudo для Linux.
Описание
sudo позволяет разрешенному пользователю выполнять команду от имени другого пользователя в соответствии со спецификациями в файле /etc/sudoers. Реальный и эффективный uid и gid выдавшего пользователя затем устанавливаются в соответствии с учетной записью целевого пользователя, как указано в файле passwd.
По умолчанию sudo требует, чтобы пользователи аутентифицировались с помощью пароля. По умолчанию это пароль пользователя, а не сам пароль root.
После аутентификации пользователя записывается метка времени, и пользователь может использовать sudo без пароля в течение короткого времени (5 минут, если в sudoers не настроено иначе). Эта метка времени может быть обновлена, если пользователь выполнит sudo с флагом -v.
Если пользователь, не указанный в sudoers, пытается выполнить команду с помощью sudo, это считается неудачной попыткой нарушить безопасность системы, и сообщение отправляется в соответствующие органы, как указано во время настройки или в файле sudoers. Полномочием по умолчанию, которое будет уведомлено о неудачных попытках sudo, является root. Обратите внимание, что почта не отправляется, если неавторизованный пользователь пытается запустить sudo с флагами -l или -v; это позволяет пользователям самостоятельно определять, разрешено ли им использовать sudo.
sudo может регистрировать как успешные, так и неудачные попытки (и ошибки) в системном журнале, уникальном файле журнала или в том и другом. По умолчанию sudo регистрируется в системном журнале, но это можно изменить во время настройки или в файле sudoers.
Чтобы отредактировать файл sudoers, используйте команду visudo.
Синтаксис
Параметры
-V | Опция -V (версия) заставляет sudo печатать номер версии и завершать работу. Если вызывающий пользователь уже является пользователем root, параметр -V распечатывает список значений по умолчанию, с которыми был скомпилирован sudo, и локальные сетевые адреса компьютера. |
-l | Опция -l (список) выводит команды, разрешенные (и запрещенные) пользователю на текущем хосте. |
-L | Опция -L (список значений по умолчанию) перечисляет параметры, установленные в строке «Значения по умолчанию», с кратким описанием каждого из них. Эта опция полезна в сочетании с grep. |
-h | Опция -h (справка) заставляет sudo печатать сообщение об использовании и завершать работу.< /td> |
-v | Если задан параметр -v (проверить), sudo обновляет временную метку пользователя, запрашивая пароль пользователя, если это необходимо. Это продлевает тайм-аут sudo еще на 5 минут (или любой другой тайм-аут, установленный в sudoers), но не запускает команду. |
-k | Параметр -k (kill) для sudo аннулирует отметку времени пользователя, устанавливая для нее время в эпоху. При следующем запуске sudo потребуется пароль. Этот параметр не требует пароля и был добавлен, чтобы позволить пользователю отозвать разрешения sudo из файла .logout. |
-K | The -K (уверенное убийство) для sudo полностью удаляет временную метку пользователя. Точно так же для этой опции не требуется пароль. |
-b | Опция -b (фоновая) указывает sudo запустить данную команду в фоновом режиме. . Обратите внимание, что если вы используете параметр -b, вы не можете использовать управление заданиями оболочки для управления процессом. |
-p | Параметр -p (приглашение) позволяет переопределить запрос пароля по умолчанию и использовать собственный. Поддерживаются следующие проценты ('%') побегов: |
%u расширяется до логина вызывающего пользователя;
%U заменяется на имя входа пользователя, от имени которого будет выполняться команда (по умолчанию root);
%h расширяется до локального имени хоста без имени домена;
%H заменяется на локальное имя хоста, включая имя домена (только если имя хоста машины полностью определено или установлен параметр sudoers "fqdn");
Возвращаемые значения
При успешном выполнении программы возвращаемое значение sudo будет возвращаемым значением программы, которая была выполнена.
В противном случае sudo завершает работу со значением выхода 1, если есть проблема с конфигурацией/разрешениями или если sudo не может выполнить данную команду. В последнем случае строка ошибки выводится в stderr. Если sudo не может указать одну или несколько записей в PATH пользователя, на stderr будет напечатана ошибка. (Если каталог не существует или это не каталог, запись игнорируется и сообщение об ошибке не выводится.) В нормальных условиях этого не должно происходить.Наиболее распространенная причина, по которой stat возвращает «отказано в доступе», заключается в том, что вы используете автомонтирование, а один из каталогов в вашем PATH находится на машине, которая в данный момент недоступна.
Примечания по безопасности
sudo пытается обеспечить безопасность при выполнении команд. Переменные, управляющие динамической загрузкой и привязкой, могут нарушить работу программы, которую запускает sudo. Чтобы бороться с этим, некоторые системные переменные среды удаляются из среды, которая передается выполняемым командам. Другие переменные, которые sudo удаляет из среды, включают:
- ИФС
- ОКРУГ
- BASH_ENV
- KRB_CONF
- KRBCONFDIR
- KRBTKFILE
- KRB5_CONFIG
- МЕСТНЫЙ ДОМЕН
- RES_OPTIONS
- ХОСТАЛИАЗЫ
- NLSPATH
- PATH_LOCALE
- ТЕРМИНФО
- TERMINFO_DIRS
- ТЕРМПАТИ
так как они тоже могут представлять угрозу. Если переменная TERMCAP установлена и является путем, она также игнорируется. Кроме того, если некоторые переменные содержат символы / или %, они игнорируются.
Если sudo был скомпилирован с поддержкой SecurID, переменные VAR_ACE, USR_ACE и DLC_ACE также очищаются. Список переменных среды, которые очищает sudo, содержится в выводе sudo -V при запуске от имени пользователя root.
Чтобы предотвратить спуфинг команд, sudo проверяет "." и "" (оба обозначают текущий каталог) последними при поиске команды в PATH пользователя (если одна или обе находятся в PATH). Обратите внимание, однако, что фактическая переменная среды PATH не изменяется и передается в неизменном виде программе, которую выполняет sudo.
Из соображений безопасности, если ваша ОС поддерживает общие библиотеки и не отключает определяемые пользователем пути поиска библиотек для программ с setuid (большинство так и делают), либо используйте параметр компоновщика, отключающий такое поведение, либо статически связывайте sudo.
sudo проверяет владельца своего каталога временных меток (по умолчанию /var/run/sudo) и игнорирует содержимое каталога, если он не принадлежит root и доступен только для записи root. В системах, которые позволяют пользователям без полномочий root передавать файлы через chown, если каталог временных меток находится в каталоге, доступном для записи любым пользователем (например, /tmp), пользователь может создать каталог временных меток до запуска sudo. Однако, поскольку sudo проверяет владельца и режим каталога и его содержимого, единственный ущерб, который можно нанести, — это «скрыть» файлы, поместив их в каталог с меткой времени. Маловероятно, что это произойдет, поскольку, как только каталог временной метки принадлежит пользователю root и недоступен для любого другого пользователя, пользователь, помещающий туда файлы, не сможет получить их обратно. Чтобы обойти эту проблему, вы можете использовать каталог, который не доступен для записи для всех, для меток времени (например, /var/adm/sudo) или создать /var/run/sudo с соответствующим владельцем (root) и разрешениями (0700) в файлах запуска системы.
sudo не будет учитывать метки времени, установленные далеко в будущем. Временные метки с датой, превышающей текущее_время + 2 * TIMEOUT, игнорируются, и sudo регистрирует и жалуется. Это делается для того, чтобы пользователь не создавал свою собственную временную метку с фиктивной датой в системах, которые позволяют пользователям раздавать файлы.
Обратите внимание, что sudo записывает в журнал только те команды, которые он явно запускает. Если пользователь запускает команду, такую как «sudo su» или «sudo sh», последующие команды, запускаемые из этой оболочки, не регистрируются, и контроль доступа sudo не влияет на них. То же самое верно для команд, предлагающих экранирование оболочки (включая большинство редакторов). Из-за этого необходимо соблюдать осторожность при предоставлении пользователям доступа к командам через sudo, чтобы убедиться, что команда непреднамеренно не предоставит пользователю действующую корневую оболочку.
Переменные среды
sudo использует следующие переменные среды:
PATH | Установите нормальное значение, если установлен SECURE_PATH |
SHELL | Используется для определения оболочки для запуска с параметром -s |
ПОЛЬЗОВАТЕЛЬ | Установите целевого пользователя (root, если не указан - указана опция u) |
HOME | В режиме -s или -H (или если sudo был настроен с параметром --enable-shell-sets- home), установите домашний каталог целевого пользователя. |
SUDO_PROMPT | Используется как запрос пароля по умолчанию | SUDO_COMMAND | Установить команду, запускаемую sudo |
SUDO_USER | Установить логин пользователя, который вызвало sudo |
SUDO_UID | Установить uid пользователя, вызвавшего sudo |
SUDO_GID< /td> | Установить GID пользователя, вызвавшего sudo |
SUDO_PS1 | Если установлено, для PS1 будет установлено его значение тд> |
Команды Linux | |
Файлы | tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm |
Процессы | alias · screen · top · nice · renice · прогресс · strace · systemd · tmux · chsh · история · at · пакетное · бесплатное · которое · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · стена · yes · kill · спать · sudo · su · время · groupadd · usermod · группы · lshw · выключение · перезагрузка · halt · poweroff · passwd · lscpu · crontab · date · bg · fg |
Сеть | netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · копать · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw |
- › Как установить и управлять пакетами Snap в Ubuntu 16.04 LTS
- › Добавление пользователя в группу (или вторую группу) в Linux
- › Как использовать BleachBit в Linux
- › Как войти в две или более учетных записей Skype одновременно
- › Как управлять службами Systemd в системе Linux
- › Как установить программное обеспечение из сторонних PPA в Ubuntu
- › Как получить доступ к файлам Ubuntu Bash в Windows (и системному диску Windows в Bash)
- › Худшее, что есть в телефонах Samsung, — это программное обеспечение Samsung.
Когда я делаю что-то, что требует ввода root десятки раз подряд, я предпочитаю переключать сеанс на сеанс root. В различных учебниках и инструкциях, которые я использовал в Интернете, я вижу, что sudo su , sudo su - , sudo -i и sudo /bin/bash используются для открытия корневого сеанса, но я не понимаю разницу между ними. и когда и если это различие имеет значение.
Может ли кто-нибудь прояснить это для меня?
@RaduRădeanu Когда я ввел вопрос, я просмотрел предложенные вопросы, и ни один из них не дал полного ответа на мой вопрос. То же самое относится и к вопросам, на которые вы ссылаетесь. Хотя они содержат много новой информации для меня, и спасибо за ссылку на них, я нашел их не такими полными, как приведенный ниже ответ пользователя хаоса, который намного больше соответствует тому, что я искал.
2 ответа 2
Чтобы объяснить это, вам нужно знать, что делают программы:
- su — команда su используется для переключения на другого пользователя (s и пользователя), но вы также можете переключиться на пользователя root, вызвав команду без параметров. su запрашивает пароль пользователя для переключения, после ввода пароля вы переключились на среду пользователя.
- sudo — sudo предназначен для запуска одной команды с привилегиями root. Но в отличие от su он запрашивает пароль текущего пользователя. Этот пользователь должен быть в файле sudoers (или группе, которая находится в файле sudoers). По умолчанию Ubuntu «запоминает» ваш пароль на 15 минут, поэтому вам не нужно каждый раз вводить пароль.
- bash — текстовый интерфейс для взаимодействия с компьютером. Важно понимать разницу между интерактивными и неинтерактивными оболочками с входом в систему, без входа в систему:
Типы оболочек:
- оболочка входа: оболочка входа регистрирует вас в системе как указанный пользователь, для этого необходимы имя пользователя и пароль.Когда вы нажимаете ctrl + alt + F1 для входа в виртуальный терминал, вы получаете после успешного входа оболочку входа в систему.
- оболочка без входа в систему: оболочка, которая выполняется без входа в систему, для этого необходим вошедший в систему пользователь. Когда вы открываете графический терминал в gnome, это оболочка без входа в систему.
- интерактивная оболочка: оболочка (с входом или без входа), в которой вы можете в интерактивном режиме вводить или прерывать команды. Например, терминал гнома.
- неинтерактивная оболочка: (под)оболочка, которая, вероятно, запускается из автоматизированного процесса. Вы не увидите ни ввода, ни вывода.
sudo su Вызывает sudo с помощью команды su . Bash называется интерактивной оболочкой без входа в систему. Таким образом, bash выполняет только .bashrc . Вы можете видеть, что после переключения на root вы все еще находитесь в том же каталоге:
sudo su — на этот раз это оболочка входа в систему, поэтому /etc/profile , .profile и .bashrc выполняются, и вы окажетесь в домашнем каталоге root с окружением root.
sudo -i Это почти то же самое, что и sudo su. Параметр -i (имитировать начальный вход в систему) запускает оболочку, указанную записью базы данных паролей целевого пользователя, в качестве оболочки входа в систему. Это означает, что файлы ресурсов для входа в систему, такие как .profile , .bashrc или .login, будут прочитаны и выполнены оболочкой.
sudo /bin/bash Это означает, что вы вызываете sudo с помощью команды /bin/bash. /bin/bash запускается как оболочка без входа в систему, поэтому все точечные файлы не выполняются, но сам bash читает .bashrc вызывающего пользователя. Ваше окружение остается прежним. Ваш дом не будет домом root. Итак, вы являетесь пользователем root, но находитесь в среде вызывающего пользователя.
sudo -s считывает переменную $SHELL и выполняет содержимое. Если $SHELL содержит /bin/bash, он вызывает sudo /bin/bash (см. выше).
Проверить:
Чтобы проверить, находитесь ли вы в оболочке входа в систему или нет (работает только в bash, поскольку shopt является встроенной командой):
Читайте также:
- Как настроить горячие клавиши в Windows 7
- Массовые объекты в Windows 10, что это такое
- Как войти в Windows 7
- Как установить Etcher в Linux
- Как отключить автозапуск флешки в Windows 10