Права суперпользователя Debian (sudo, visudo)
В операционных системах семейства Linux реализован принцип разграничения пользовательских привилегий, то есть у разных учетных записей разный объем прав доступа к каталогам, файлам и программам. Максимальными правами наделена встроенная учетная запись root. Вновь создаваемые пользовательские аккаунты обычно существенно ограничены в доступе к системным конфигурационным файлам, управлении сервисами, установке и удалении программных пакетов. При этом работа в операционной системе под учетной записью root настоятельно не рекомендуется, прежде всего в целях безопасности. В этом случае на помощь приходит утилита командной строки sudo.
Команда sudo позволяет запускать отдельные команды с повышением привилегий (по умолчанию с правами root) пользуясь непривилегированной учетной записью. Давайте разберемся, что же требуется для работы этой утилиты.
Установка и настройка
В ОС Ubuntu sudo включена по умолчанию, а в Debian, если в процессе установки не был выбран соответствующий пакет, скорее всего будет следующая картина:
Значит, требуется установить недостающий пакет. Обновляем информацию о репозиториях и устанавливаем sudo:
Дожидаемся окончания процесса:
После успешной установки потребуется сконфигурировать sudo, определив, какие пользователи или группы смогут использовать повышение привилегий и в каком объеме. Все эти настройки хранятся в конфигурационном файле /etc/sudoers, однако вносить в него изменения напрямую настоятельно не рекомендуется. Для этих целей используется специальная команда:
которая запускает текстовый редактор с конфигурационным файлом:
За предоставление прав здесь отвечают две строки:
Первая строка назначает права для учетной записи root, вторая устанавливает права для членов группы sudo, которая была создана при установке пакета (знак % перед названием означает, что имя относится к группе пользователей). Соответственно, у нас есть два основных способа предоставить пользовательской учетной записи право использовать sudo:
Добавить учетную запись пользователя (например, user) в группу sudo на сервере:
После изменения членства в группе, потребуется заново авторизоваться в этой учетной записи для применения новой конфигурации. Данный метод рекомендуется в тех случаях, когда пользователю необходимо предоставить полные права.
Создать в файле новую запись, например, для учетной записи user. Мы добавляем строку по аналогии с root:
Добавлять новую запись рекомендуется в тех случаях, когда список привилегий будет корректироваться (об этом чуть позднее). Если мы внесли изменения в файл, нужно их сохранить нажатием сочетания клавиш Ctrl-O и выйти из редактора — Ctrl-X.
Теперь можно проверить корректность работы:
Команда sudo запрашивает пароль текущего пользователя (в данном случае это user) — вводим его, и, если все сделано правильно, мы увидим содержание системного конфигурационного файла.
Тонкая настройка
Таким образом, обычный пользователь может запускать команды с правами учетной записи root не зная ее пароль. Это очень удобно, но может быть небезопасно — есть ли возможность ограничить круг команд, которые можно исполнять посредством sudo? Да, и поможет нам в этом тот же самый конфигурационный файл. Снова запускаем visudo и разбираемся дальше. Нас интересуют параметры, указанные после имени пользователя:
- ALL=(ALL:ALL) ALL — первый параметр определяет к какому хосту применяется конфигурация. При использовании выделенного сервера параметр можно оставить без изменений;
- ALL=(ALL:ALL) ALL — параметры в скобках определяют с полномочиями какого пользователя (первый параметр) и/или группы (второй параметр) будет выполняться команда. По умолчанию sudo выполняет команду от имени root, однако при запуске с ключом –u можно указать другую учетную запись, а с ключом –g другую группу, чьи полномочия будут использованы при запуске;
- ALL=(ALL:ALL) ALL — третий параметр определяет к каким файлам и командам относятся данные настройки.
Исходя из вышесказанного, при необходимости определить перечень разрешенных команд заменяем последний параметр ALL тем, что нам требуется, перечисляя команды через запятую. Например, строка:
дает право пользователю user с помощью sudo осуществлять перезагрузку сервера командой sudo /sbin/shutdown -r и просматривать файлы с помощью sudo /bin/cat. Другие команды через sudo выполняться не будут. Например, при попытке выключить сервер командой:
Полезное
Увидеть список привилегий можно, запустив sudo -l (будет отображен список для текущего пользователя), либо sudo -l -U user (будет отображен список привилегий пользователя user):
В состав sudo входит команда sudoedit, которая запускает текстовый редактор с указанным файлом сразу с повышенными привилегиями, то есть вместо команды:
Если требуется длительная работа в режиме повышенных привилегий и вводить sudo для каждой команды неудобно, можно запустить через sudo экземпляр командного интерпретатора:
Если продолжить работу в нем, то все команды будут запускаться с повышенными правами. По завершении работы выходим из интерпретатора командой:
Права доступа в Debian и команды chmod и chown
Думаю многие сталкивались с проблемой, когда необходимо было изменить пользователя/группу для папок/файлов. Самый доступный способ-это поковыряться в меню mc (midnight commander), но что делать, когда нужно сменить права и пользователя не для папки и подпапок. Вручную решать данную проблему не самый лучший вариант. Наверняка многие слышали либо мельком видели такие команды chmod и chown, некоторым наверняка даже приходилось пользоваться командами.Честно признаться сам долгое время старался всячески избегать данных команд, т.к копаться в манах не было ни малейшего желания. Однако, в итоге был вынужден использовать данные команды.
Изменение прав доступа:
Вообще в Linux права доступа разделяются на символьные и абсолютные . Символьные представляются в виде букв латинского алфавита, а абсолютные — в виде арабских цифр.
Далее рассмотрим права доступа на конкретном примере как выглядят права доступа для файла. Итак, я нашел у себя в закромах файл — linux_tools.pdf. Для того, чтобы просмотреть существующие права доступа на этот файл, нужно в консоли от имени нашего пользователя ввести команду:
lex@lex:~$ ls -l ./linux_tools.pdf
В результате мы получим примерно следующее (символьное представление):
-rw-r--r-- 1 lex users 289489 Окт 5 17:36 ./linux_tools.pdf
Итак, lex — это наш пользователь-владелец данного файла. users — это группа, которой принадлежит данный файл.
289489 — это размер данного файла в байтах.
После размера идет дата создания и имя файла. Тут все понятно. Теперь рассмотрим первую часть вывода (-rw-r–r–)
В самом начале, как мы видим, стоит символ “ — ”. Это означает, что перед нами файл. Если бы в начале стояла буква “ d ”, то это означало бы, что перед нами каталог.
Стоит отметить, что права доступа к файлам и папкам делятся на права для пользователя , группы и остальных .
блок (rw-) — это как раз права доступа для нашего пользователя. Первая позиция в правах отвечает за чтение, вторая за запись, третья — за исполнение файла. Соответственно,
r - чтение; w - запись; - в данном случае запрет на исполнение данного файла.
Если бы файл был исполняемым, то вместо символа — была бы буква x (английского алфавита естественно). Полный список доступных параметров см. ниже.
Причем важно запомнить, что права доступа следуют именно в такой последовательности: чтение, запись, исполнение .
Права доступа для группы имеют вид -r- Здесь мы видим, что для группы данный файл доступен только для чтения. (На позициях 2 и 3 у нас стоят символы “-«).
Права доступа для остальных имеют вид -r- . Такой же, как и для группы.
Абсолютное представление прав доступа для нашего файла будет иметь вид в виде цифры:
В абсолютном представлении число — это маска прав доступа и представляет собой число в восьмеричной системе исчисления., где первый разряд (цифра 6) отвечает за права доступа для владельца файла, второй разряд (цифра 4) — для группы, и третий разряд (цифра 4)- для остальных.
Как получаются число 644 ? Тут все очень просто. Как было сказано выше, это восьмеричное представление. Если мы возьмем первый разряд (цифра 6) и переведем в двоичную систему исчисления, то получим цифру 110 . Ни на какие мысли не наводит ? Как было сказано выше, права доступа к файлам и папкам задаются в последовательности: чтение, запись, выполнение . На чтении у нас стоит 1, значит читать можно. С записью ситуация та же. А вот на исполнении у нас 0, значит исполнять файл нельзя. Ниже приведена таблица соответствия восьмеричной и двоичной системы исчисления. После ее просмотра все должно стать понятно.
Восьмеричный формат | Двоичный формат |
0 | 000 |
1 | 001 |
2 | 010 |
3 | 011 |
4 | 100 |
5 | 101 |
6 | 110 |
7 | 111 |
Например, если файл имеет права для пользователя только на чтение и исполнение, а для группы и остальных только на чтение, то абсолютное представление прав доступа будет иметь вид: 544.
Если мы хотим что бы пользователь, группа и все остальные могли только читать и исполнять файл, то у него должны быть такие права: 555.
Думаю, что тут все понятно и перейдем непосредственно к заданию прав доступа.
chmod — изменяет права доступа к файлу (собственно из man-а)
Данная команда имеет различные опции: rwxXstugo
r -чтение; w -запись; x -выполнение (или доступ к каталогу); X -выполнение, если файл является каталогом или уже имеет право на выполнение для какого-нибудь пользователя; s -setuid- или setgid-биты; t -sticky-бит; u -установка для остальных таких же прав доступа, которые имеет пользователь, владеющий этим файлом; g -установка для остальных таких же прав доступа, которые имеет группа файла; o -установка для остальных таких же прав доступа, которые имеют остальные пользователи (не входящие в группу файла).
Т.е, предположим, что у нас есть “Папка_А”, которую нам надо сделать доступной для чтения/записи и выполнения (доступа к каталогу).
От рута (супер пользователя) вводим в консоли команду:
chmod +rwx путь_к_папке/ Папка_А
В абсолютном исполнении команда будет выглядеть примерно так:
chmod маска_прав_доступа путь_к_папке/ Папка_А
Кстати говоря, перед опциями могут стоять следующие операторы: = (равно), — (минус) , + (плюс)
Оператор + добавляет выбранные права доступа к уже имеющимся у каждого файла;
— удаляет эти права;
= присваивает только эти права каждому указанному файлу.
А что делать, если надо поменять права не только на Папка_А , но и на вложенные в нее папки? Все очень просто добавляем опцию рекурсивного изменения прав доступа -R :
chmod =rwx -R путь_к_папке/ Папка_А
О дополнительных возможностях chmod читаем, набрав
изменение владельца/группы
chown — изменить владельца и группу файлов
chown также имеет большое количество параметров. (Подробнее читаем в мане: man chown). Углубляться сильно во все параметры не буду, рассмотрю лишь основные.
Допустим есть Папка_А и нам надо сменить владельца и группы данной папки на pupkin. От рута (супер пользователя) делаем следующее:
chown -R pupkin:any_group /путь_к_файлу/
здесь мы опять видим параметр рекурсивного изменения -R , только в этом случаю уже пользователя и группы.
pupkin:any_group — означает пользователь:группа
Ну вот вроде бы и все.. Как оказалось ничего сложного нету