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

  • Установка новых программ
  • Навигация по чужим директориям
  • Изменение прав доступа и владельцев файлов, не принадлежащих текущему пользователю
  • Создание, редактирование и удаление файлов в местах, где не хватает прав текущего пользователя
  • Запуск программ, требующих повышенные привилегии

Стать другим пользователем, находясь прямо в системе, можно с помощью утилиты su (switch user). Когда-то такой способ был основным, но сейчас он устарел и крайне не рекомендуется к использованию. Подробнее об этом можно прочитать в статье из дополнительных материалов. Основной способ повышать привилегии в современных системах — утилита 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 судо спрашивает пароль и запоминает его на 5 минут. На протяжении этого времени вы можете использовать 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 -i
$ id
uid=0(root) gid=0(root) groups=0(root)

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


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

  1. sudo vs su

Для продолжения нужно перейти в курс и вступить в него.