Education 1.1 Help

Sudo

В работе с командной строкой мы часто сталкиваемся с ситуациями, в которых необходимо повышать привилегии и выполнять команды от имени суперпользователя root. С некоторыми мы уже столкнулись, с другими познакомимся в следующих уроках:

  • Установка новых программ

  • Навигация по чужим директориям

  • Изменение прав доступа

  • Изменение содержимого в файлах, не принадлежащих текущему пользователю

  • Создание, редактирование и удаление файлов, когда не хватает прав текущего пользователя

  • Запуск программ, требующих повышенных привилегий

В этом уроке обсудим, как стать другим пользователем. Для этого зайдите в систему и воспользуйтесь утилитой su (сокращение от substitute user или switch user). Когда-то такой способ был основным, но сейчас он устарел и не рекомендуется к использованию. Подробнее об этом можно прочитать в статье « Su или sudo?» из дополнительных материалов.

Основной способ повышать привилегии в современных системах — утилита sudo (substitute user and do — дословно «подменить пользователя и выполнить»).

Использовать sudo очень просто, достаточно написать эту команду слева от любой другой и выполнить. По умолчанию она пытается повысить привилегии до суперпользователя:

# Нет прав на выполнение touch /etc/myfile touch: cannot touch '/etc/myfile': Permission denied # С `sudo` все работает sudo touch /etc/myfile # Видно, что владелец файла — это суперпользователь `root` stat /etc/myfile File: '/etc/myfile' Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: ca01h/51713d Inode: 2761 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) # Нет прав на удаление rm /etc/myfile rm: remove write-protected regular empty file '/etc/myfile'? y rm: cannot remove '/etc/myfile': Permission denied # Опять помогла утилита `sudo` sudo rm /etc/myfile

В зависимости от настроек, утилита sudo попросит ваш пароль для входа или вообще откажется работать, сказав, что у вас нет права ее использовать. Как правило, в Ubuntu sudo спрашивает пароль и запоминает его на пять минут. На протяжении этого времени вы можете использовать sudo, не вводя пароль каждый раз.

Иногда нужно выполнить команду из-под пользователя, отличного от root. Тогда придется добавить флаг -u:

sudo -u nobody mkdir /tmp/test # Директория создана от имени пользователя nobody stat /tmp/test File: '/tmp/test' Size: 4096 Blocks: 8 IO Block: 4096 directory Device: ca01h/51713d Inode: 4577 Links: 2 Access: (0755/drwxr-xr-x) Uid: (65534/ nobody) Gid: (65534/ nogroup) Если нужно произвести сразу пачку действий от имени другого пользователя, можно запустить новую оболочку внутри текущей. Другими словами, мы стартуем новую сессию: # Команда `sudo` запросит пароль текущего пользователя sudo -i # Проверяем, что сессия запущена от суперпользователя id uid=0(root) gid=0(root) groups=0(root)

Главное — не забыть переключиться обратно после завершения необходимых манипуляций. Для этого наберите exit.

Подводные камни

Знание про sudo играет с новичками злую шутку. Каждый раз, когда они видят странные ошибки, то не пытаются разобраться, а пробуют запустить команду с sudo без параметров — то есть просто выполнить ее от суперпользователя. Часто такой подход срабатывает, но он создает еще больше проблем.

Представим, что из-под sudo мы запустили команду, которая создает файлы и директории. В таком случае владельцем этих файлов становится суперпользователь. Все последующие обращения к этому файлу без sudo начнут выдавать ошибку «У вас нет прав доступа». Причем даже необязательно работать с этими файлами напрямую. Множество программ так или иначе обращаются к файловой системе для чтения конфигурационных и других файлов.

Правильный выход из ситуации в каждом случае свой. В некоторых случаях sudo – это то, что нужно. В других случаях требуется изменить права (об этом в следующем уроке), а иногда и переустановить какую-нибудь часть системы.

Общее правило может быть таким:

  • Все, что лежит в личных директориях пользователя, должно принадлежать этому пользователю

  • Все, что находится вне домашней директории пользователя и требует дополнительных прав, скорее должно запускаться с sudo, но бывают и исключения

Рассмотрим, как это работает на практике:

ls -la # Все содержимое домашней директории принадлежит одному пользователю # Сама директория пользователя принадлежит ему же # Родительская директория принадлежит суперпользователю drwxr-xr-x+ 117 mokevnin staff 3744 Feb 19 15:55 . drwxr-xr-x 5 root admin 160 Oct 12 19:15 .. -r-------- 1 mokevnin staff 7 Nov 21 2017 .CFUserTextEncoding -rw-r--r--@ 1 mokevnin staff 22532 Feb 8 00:04 .DS_Store

Дополнительные материалы

  1. sudo vs su

Вопросы для самопроверки

Почему нельзя все время находиться в режиме суперпользователя?

  • Это небезопасно — если кто-то получит контроль над учетной записью, то он сможет все сломать

  • Всегда так делаю, мне нормально

  • Это небезопасно, потому что любые команды от суперпользователя имеют полный доступ к системе

Last modified: 12 June 2024