sudo определяет, кто является авторизованным пользователем сверяясь с файлом /etc/sudoers и всеми файлами с подходящим названием в каталоге /etc/sudo.d. Указав для sudo флаг -v пользователь может обновить временную метку без выполнения команды. Строка приглашения для ввода пароля так же устаревает, если пользователь не введёт пароль в течение 5 минут (если в sudoers не переопределено другое).
Если не указанный в файле sudoers пользователь попытается выполнить при помощи sudo команду, то уполномоченному пользователю будет отправлено почтовое сообщение, как определено во время конфигурации или в файле sudoers (по умолчанию это root). Обратите внимание, что сообщение не будет отправлено, если неавторизованный пользователь пытается выполнить sudo с флагами -l или -v. Это позволяет пользователям определить - разрешено им использовать sudo или нет.
sudo может регистрировать оба типа попыток, успешные и не удачные, (так же как и ошибки) при помощи системного журнала регистрации событий syslog(3), собственного журнала, или с использованием обоих вариантов. По умолчанию sudo регистрирует события через syslog(3), но это можно изменить во время конфигурации или в файле sudoers.
В случае успешного выполнения возвращаемым значением sudo будет возвращаемое значение выполненной программы.
В противном случае sudo завершает работу со значением 1, если обнаруживает проблемы в конфигурации/правах доступа или sudo не в состоянии выполнить заданную команду. В последнем случае сообщение об ошибке будет выведено в stderr. Если sudo не в состоянии получить stat(2) на одну или болееe запись в пользовательском PATH, то сообщение об ошибке будет выведено на stderr. (Если каталог не существует или если это на самом деле не каталог, запись о нем будет игнорирована и об ошибке сообщено не будет.) При нормальных обстоятельствах этого не должно произойти. Наиболее частая причина возврата от stat(2) "permission denied", если вы запустили автоматическое монтирование дисков и один из каталогов в вашем PATH находится на машине, которая в настоящий момент не доступна.
Во избежание подмены команд sudo проверяет "." и "" (оба указывают на текущий каталог), когда осуществляет поиск команды в пользовательском PATH (если один из них есть в PATH) в последнюю очередь. Однако, обратите внимание, что фактическая переменная окружения PATH не модифицирована и передается программе, выполняемой sudo, в неизмененном виде.
Из соображений безопасности, если ваша ОС поддерживает разделяемые библиотеки и не отключает пользовательский путь поиска для программ использующих setuid (чаще всего), вы должны использовать параметры линковщика которые исключают такую возможность или линкуют sudo статически.
sudo проверяет принадлежность каталога содержащего временные метки (по умолчанию это /var/run/sudo) и игнорирует каталоги с содержимым не принадлежащим root и доступным на запись только для root. В системах, позволяющих не привилегированным пользователям передавать права на файлы через chown(2), если временная метка находится в каталоге доступном для записи для всех (т.е.: /tmp), то возможна ситуация, когда пользователь создаст каталог каталог содержащий временную метку прежде, чем будет выполнено sudo. Однако, так как sudo проверяет права владения и режим доступа каталога и его содержимого, то вред может быть нанесён только "скрытыми" файлами, помещенными в каталог с временными метками. Это вряд ли случится в том случае, если владельцем каталогов с временными метками является суперпользователь и они не доступны для других пользователей для записи в них. Что бы обойти эту проблему вы можете использовать каталог для хранения временных меток (например /var/adm/sudo), никому не доступный для записи, или создать /var/run/sudo, с соответствующими владельцем (root) и правами доступа (0700) в системных файлах запуска.
sudo игнорирует временные метки с датой создания в далеком будущем. Временные метки с датой большей, чем настоящий момент времени + 2 * TIMEOUT будут игнорироваться, регистрироваться sudo и уполномоченному пользователю будет послано предупреждение. Это сделано во избежание создания временных меток с поддельными датами, которые позволят отдавать файлы пользователям.
Обратите внимание, что sudo регистрирует только явно выполненные команды. Если пользователь выполняет такую команду как sudo su или sudo sh, то команды выполненные из этих оболочек не будут запротоколированы и при этом их не затронет управление доступом sudo. Тоже-самое верно по отношению к командам, допускающим использование управляющих символов (включая большинство редакторов). В связи с этим должна быть проявлена осторожность при предоставление пользователям доступа к выполнению команд посредством sudo, во-избежание нечаянного предоставления пользователю доступа к оболочке суперпользователя (root).
Для получения списка файлов в каталоге закрытом для чтения:
sudo ls /usr/local/protected
Для получения списка файлов домашнего каталога пользователя yazza на машине, где файловая система, содержащая ~yazza не позиционируется как корневая:
sudo -u yazza ls ~yazza
Для редактирования файла index.html как пользователь www:
sudo -u www vi ~www/htdocs/index.html
Для выключения компьютера:
sudo shutdown -r +15 "quick reboot"
Для создания списка занимаемого каталогами места в партиции /home. Обратите внимание, что это выполняется в под-оболочке (sub-shell) для выполнения cd и переадресации файла.
sudo sh -c "cd /home ; du -s * | sort -rn > USAGE"
PATH Установленную в нормальное значение, если установлен SECURE_PATH.
SHELL Используется для указания оболочки для запуска с параметром -s.
USER Устанавливается к целевому пользователю (root, если параметром -u не определено другое).
HOME В варианте -s или -H (или если sudo было сконфигурировано с
параметром --enable-shell-sets-home) указывает на домашний
каталог целевого пользователя.
SUDO_PROMPT Используется как заданная по умолчанию подсказка пароля.
SUDO_COMMAND Установлено на команды, выполняемые sudo.
SUDO_USER Установлено на вход в систему пользователя, которому разрешено
вызывать sudo.
SUDO_UID Установлено на uid пользователя, которому разрешено вызывать sudo.
SUDO_GID Установлено на gid пользователя, кто вызвал sudo.
SUDO_PS1 Если установлено, PS1 будет установлен на это значение.
/etc/sudoers /etc/sudo.d/* Описание того, кто и какие команды может выполнять /var/run/sudo Каталог содержащий временные метки
Todd Miller
Chris Jepeway
Краткую историю sudo смотри в файле HISTORY в дистрибутиве или в интернете по адресу http://www.sudo.ws/sudo/history.html.
Александр Блохин <[email protected]> - перевод на русский язык.
Если пользователь имеет sudo ALL, то ничто не остановит его от создании собственной программы, которая даст ему оболочку привилегированного пользователя (root), не смотря ни на какие элементы ! в спецификации пользователя.
Выполнение сценариев оболочки через sudo может вызвать те же самые ошибки ядра, которые делают сценарии оболочки со сменой идентификатора пользователя опасными на некоторых операционных системах (если ваша ОС поддерживает каталог/dev/fd/, сценарии оболочки со сменой идентификатора пользователя в целом безопасны).
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |