Азы работы в командной строке Linux (часть 6)

Предыдущие части:

Эта часть посвящена правам доступа к файлам и программам для их изменения.

Операционные системы Unix/Linux изначально являются не только многозадачными, но и многопользовательскими системами.

Что именно это означает? Это означает, что использовать компьютер одновременно может более чем один человек. Хотя типичный компьютер, скорее всего, будет иметь только одну клавиатуру и монитор, он все равно может использоваться более чем одним пользователем. Например, если компьютер подключён к сети или Интернету, удалённые пользователи могут войти в систему через ssh (смотрите Полное руководство по SSH в Linux и Windows) и управлять компьютером. Фактически, удалённые пользователи могут выполнять графические приложения и отображать графический вывод на удалённом дисплее. Система X Window поддерживает это как часть своего базового дизайна.

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

Чтобы сделать это практичным, необходимо было разработать метод защиты пользователей друг от друга. В результате мы имеем, что в Linux действия одного пользователя не могут вызвать сбой компьютера, а также один пользователь не может вмешиваться в файлы, принадлежащие другому пользователю. В этом разделе Азов командной строки Linux мы рассмотрим эту базовую часть безопасности системы.

В настоящее время разграничение прав доступа не утратило своего значения — по-прежнему, настольный компьютер может использоваться более чем одним пользователем и они не смогут получить доступ к файлам друг друга. Ещё один очень распространённый пример: хостинги, где на одном сервере сотни и даже тысячи пользователей размещают свои сайты, при этом, если права настроены правильно, один пользователь не имеет доступа к файлам другого пользователя.

Наконец, при правильном выставлении прав доступа возможности злоумышленника получить доступ к файлам значительно уменьшаются. Например, если на сайте была найдена уязвимость удалённое выполнение кода, то такие команды будут выполняться от пользователя веб-сервер (apache2 или http), если для этого пользователя разрешить доступ только к необходимым ему файлам сайтов, то в этом случае возможности злоумышленника будут ограничены.

Владельцы, участники группы и все остальные

Рассмотрим пример с файлом /etc/shadow — в этом файле размещены хеши паролей пользователей, то есть это критически важный для безопасности ОС файл.

С командой file мы ещё не знакомились — это замечательная команда, она показывает тип файла. В системах Linux довольно распространено использование файлов без файловых расширений и поэтому трудно сказать, является ли конкретный файл текстовым, Bash скриптом или исполнимым бинарным файлом. Команда file делает именно это — определяет тип файла. Итак:

file /etc/shadow
/etc/shadow: regular file, no read permission

В этом сообщении на английском сказано «обычный файл, нет прав на чтение».

Попробуем командой less:

less /etc/shadow
/etc/shadow: Отказано в доступе

Причина этого сообщения об ошибке заключается в том, что мы, как обычные пользователи, не имеем разрешения на чтение этого файла.

В модели безопасности Unix, пользователь может владеть файлами и каталогами. Когда пользователь владеет файлом или каталогом, он контролирует доступ к нему. Такая концепция знакома многим, поскольку нечто схожее применяется и в Windows.

Для всех файлов и директорий Linux устанавливаются следующие права доступа:

  • разрешение чтение содержимого файла
  • разрешение на изменение (запись) содержимого файла
  • разрешение на исполнение файла

В свойствах каждого файла и директории эти три разрешения устанавливаются отдельно для:

  • владельца файла
  • группы владельцев файла, которой принадлежит этот файл
  • всех остальных

То есть каждый файл является собственностью одного владельца, а также группы.

То есть, к примеру, для владельца файла можно установить право чтения, записи и выполнения файла; для этого же файла для группы можно установить только право чтения; а для всех остальных можно установить полный запрет доступа.

Итак, имеют значения не только права доступа к файлу, но также и его владелец и группа.

Просмотреть права доступа, а также владельца и группу, к которой относится файл, можно уже известной нам командой ls с опцией -l:

ls -l /etc/shadow

Пример вывода:

-rw------- 1 root root 1078 июн 26  2019 /etc/shadow

Строка -rw------- содержит информацию о типе файла, правах доступа и особых свойствах (битах) данного файла. Первое слово root говорит о том, что владельцем является пользователь root. Второе слово root говорит о том, что файл относиться к группе root. То есть в системе существует группа root. Чтобы посмотреть пример, в котором имя пользователя и имя группы различается, выполним следующую команду:

ls -d -l ~/

В ней мы просматриваем свойства директории (-d) обозначенной как ~/ (домашняя директория текущего пользователя).

Пример вывода:

drwx------ 67 mial users 12288 мар  4 13:26 /home/mial/

Итак, тип и права доступа закодированы в строке drwx------, владельцем данной директории является пользователь mial, и файл принадлежит группе users.

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

Чтобы узнать информацию о вашем пользователе выполните команду:

id

Пример вывода:

uid=1000(mial) gid=985(users) группы=985(users),56(bumblebee),108(vboxusers),315(kismet),986(video),994(disk),998(wheel)

В первой строке содержится имя пользователя (mial) и название главной группы данного пользователя (users). Во второй строке перечислены все группы, в которые входит этот пользователь.

Чтобы посмотреть информацию о другом пользователе, выполните команду вида:

id ИМЯ_ПОЛЬЗОВАТЕЛЯ

Например:

id root

Ещё свои группы можно посмотреть командой:

groups

Чтобы увидеть информацию для другого пользователя:

groups ИМЯ_ПОЛЬЗОВАТЕЛЯ

Например:

groups root
root

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

Где хранится эта информация? Как и многие вещи в Linux, в нескольких текстовых файлах. Учётные записи пользователей определены в файле /etc/passwd, а группы определены в файле /etc/group. Когда создаются учётные записи и группы пользователей, эти файлы изменяются вместе с /etc/shadow, который содержит информацию о пароле пользователя. Для каждой учётной записи пользователя файл /etc/passwd определяет имя пользователя (логин), uid, gid, реальное имя учётной записи, домашний каталог и оболочку входа. Если вы изучите содержимое /etc/passwd и /etc/group, вы заметите, что помимо обычных учётных записей есть учётные записи для суперпользователя (uid 0) и других пользователей системы.

Хотя многие Unix-подобные системы назначают обычных пользователей в общую группу, такую как «users», современная практика Linux заключается в создании уникальной группы из одного члена с тем же именем, что и у пользователя. Это облегчает определённые типы назначения разрешений.

Чтение, запись и выполнение

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

> foo.txt
ls -l foo.txt

Вывод:

-rw-r--r-- 1 mial users 0 мар  4 19:30 foo.txt

Первые десять символов списка являются атрибутами файла. Первый из этих символов — тип файла. Вот типы файлов, которые вы, скорее всего, увидите (есть и другие, менее распространённые типы):

Типы файлов:

Атрибут Тип файла
- Обычный файл.
d Каталог.
l Символическая ссылка. Обратите внимание, что для символических ссылок оставшиеся атрибуты файла всегда имеют значение «rwxrwxrwx» и являются фиктивными значениями. Настоящие атрибуты файла — это те атрибуты файла, на которые указывает символическая ссылка.
c Специальный символьный файл. Этот тип файла относится к устройству, которое обрабатывает данные как поток байтов, такой как терминал или модем.
b Специальный файл блока. Этот тип файла относится к устройству, которое обрабатывает данные в блоках, таких как жёсткий диск или дисковод CD-ROM.

Оставшиеся девять символов атрибутов файла, называемые режимом файла, представляют разрешения на чтение, запись и выполнение для владельца файла, владельца группы файла и всех остальных:

Владелец Группа Все остальные
rwx rwx rwx

Если атрибуты режима r, w и x установлены, они действуют на файлы и каталоги следующим образом:


Атрибуты разрешений

Атрибуты Файлы Директории
r Позволяет открывать и читать файл. Позволяет отображать содержимое каталога, если также установлен атрибут выполнения.
w Позволяет записывать, редактировать файл, однако этот атрибут не позволяет переименовывать или удалять файлы. Возможность удалять или переименовывать файлы определяется атрибутами каталога. Позволяет создавать, удалять и переименовывать файлы в каталоге, если также установлен атрибут выполнения.
x Позволяет обрабатывать файл как программу и выполнять. Программные файлы, написанные на языках сценариев, также должны быть доступны для чтения. Позволяет входить в каталог, например, выполнять команду cd ДИРЕКТОРИЯ.

Вот несколько примеров настроек атрибута файла:

Примеры атрибутов разрешений

Атрибуты файла Значения
-rwx------ Обычный файл, доступный для чтения, записи и выполнения владельцем файла. Никто другой не имеет доступа.
-rw------- Обычный файл, доступный для чтения и записи владельцем файла. Никто другой не имеет доступа.
-rw-r--r-- Обычный файл, доступный для чтения и записи владельцем файла. Члены группы владельцев файла могут читать файл. Файл доступен для чтения.
-rwxr-xr-x Обычный файл, доступный для чтения, записи и выполнения владельцем файла. Файл может быть прочитан и исполнен всеми остальными.
-rw-rw---- Обычный файл, который доступен для чтения и записи только владельцу файла и членам группы файла.
lrwxrwxrwx Символическая ссылка. Все символические ссылки имеют «фиктивные» разрешения. Реальные разрешения сохраняются вместе с реальным файлом, на который указывает символическая ссылка.
drwxrwx--- Директория. Владелец и члены группы владельцев могут входить в каталог и создавать, переименовывать и удалять файлы в каталоге.
drwxr-x--- Директория. Владелец может войти в каталог и создавать, переименовывать и удалять файлы в каталоге. Члены группы владельцев могут войти в каталог, но не могут создавать, удалять или переименовывать файлы.

Права доступа в Linux не меняются автоматически. Это означает, что если вы скопировали из директории /root файл, принадлежащий пользователю root в папку другого пользователя, то это не означает, что файл меняет владельца и/или пользователь получает права записи в этот файл если ранее у него таких прав не было.

chmod для смены режима доступа к файлу и директориям

Синтаксис использования chmod следующий:

chmod РЕЖИМА ФАЙЛ

Начнём с ходовых примеров использования chmod, а затем рассмотрим все варианты обозначения РЕЖИМА, который может быть указан несколькими способами.

Предоставить полный доступ для владельца файла и убрать все разрешения для группы и всех остальных:

chmod 700 ФАЙЛ

Предоставить полный доступ для владельца файла, группе предоставить право чтения и выполнения, и убрать все разрешения для остальных:

chmod 750 ФАЙЛ

Предоставить полный доступ для владельца файла, группе и всем остальным предоставить право чтения и выполнения:

chmod 755 ФАЙЛ

Добавить разрешение на выполнение для владельца, группы и всех остальных:

chmod +x ФАЙЛ

Добавить разрешение на запись для владельца, группы и всех остальных:

chmod +w ФАЙЛ

Удалить разрешение на запись для владельца, группы и всех остальных:

chmod -w ФАЙЛ

Установить для владельца разрешения записи, чтения и выполнения, а для группы и остальных установить разрешения чтения и выполнения:

chmod u=wrx,go=rx ФАЙЛ

Условные обозначения прав доступа и пользователей в chmod

Чтобы изменить режим (права доступа) файла или каталога, используется команда chmod. Имейте в виду, что только владелец файла или суперпользователь может изменить режим файла или каталога. chmod поддерживает два различных способа задания изменений режима: представление в восьмеричных числах или символьное представление. Сначала мы рассмотрим представление восьмеричных чисел.

Каждую восьмеричную цифру можно представить как три двоичные цифры. Три цифры соответствуют трём параметрам режима доступа: чтение, запись, выполнение. Поэтому права доступа можно представить в виде трёх двоичных цифр, которые можно записать как одну восьмеричную цифру.

Следующая таблица поможет вам понять, что имеется ввиду.

Восьмеричное число Двоичное число Файловый режим
0 000 ---
1 001 --x
2 010 -w-
3 011 -wx
4 100 r--
5 101 r-x
6 110 rw-
7 111 rwx

Используя три восьмеричных цифры, мы можем установить режим файла для владельца, группы владельцев и всех остальных:

> foo.txt

ls -l foo.txt
-rw-rw-r-- 1 me me 0 2008-03-06 14:52 foo.txt

chmod 600 foo.txt

ls -l foo.txt
-rw------- 1 me me 0 2008-03-06 14:52 foo.txt

Передав аргумент «600», мы смогли установить разрешения владельца на чтение и запись, удалив при этом все разрешения группы владельца и всех остальных. Хотя запоминание восьмеричного бинарного отображения может показаться неудобным, вам обычно нужно использовать только несколько часто используемых: 7 (rwx), 6 (rw-), 5 (r-x), 4 (r--) и 0 (---).

Либо можно запомнить значение одиночных прав доступа и складывать их значения для получения любых комбинаций: 4 (r--), 2 (-w-), 1 (--x). После того, как вы их запомнили, можно получить любую комбинацию, для прав чтения и записи это 6 (4+2) (rw-), для прав записи и выполнения это 3 (2+1) (-wx), для прав чтения и выполнения это 5 (4+1) (r-x)

chmod также поддерживает символическую запись для указания режимов файлов. Символическая запись делится на три части: на кого повлияет изменение, какая операция будет выполнена и какое разрешение будет установлено. Чтобы указать, на кого это влияет, комбинация символов «u», «g», «o» и «a» используется следующим образом:

Символ Значение
u

Сокращение от «пользователь», но означает владельца файла или каталога.

g

Группа владельцев.

o

Сокращение от «других», но означает все остальные.

a

Сокращено от «все». Сочетание «u», «g» и «o».

Если символ не указан, будет принято «все». Операция может быть «+», указывающим, что разрешение должно быть добавлено, «-», указывающим, что разрешение должно быть удалено, или «=», указывающим, что должны применяться только указанные разрешения, и что все остальные должны быть удалены.

Права доступа указываются символами «r», «w» и «x». Вот несколько примеров символической записи:

Обозначение Значение
u+x Добавить разрешение на выполнение для владельца.
u-x Удалить разрешение на выполнение от владельца.
+x Добавить разрешение на выполнение для владельца, группы и всех остальных. Эквивалент a+x.
o-rw Удалить права на чтение и запись у любого пользователя, кроме владельца и группы владельцев.
go=rw Установить для группы владельцев и всех, кроме владельца, права на чтение и запись. Если владелец группы или все остальные ранее имели разрешения на выполнение, эти разрешения удаляются.
u+x,go=rx Добавить разрешение на выполнение для владельца и установить разрешения на чтение и выполнение для группы и других пользователей. Несколько записей могут быть разделены запятыми.

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

chown для смены владельца или группы, которой принадлежит файл или директория

Команда chown используется для изменения владельца и группы владельцев файла или директории. Для использования этой команды требуются привилегии суперпользователя.

chown может поменять владельца файла, либо группа владельцев, либо оба этих значения.

Имеется несколько вариантов синтаксиса chown:

  • Поменять владельца файла, группа останется неизменной:
chown ВЛАДЕЛЕЦ ФАЙЛ
  • Поменять владельца и группу файла на указанные:
chown ВЛАДЕЛЕЦ:ГРУППА ФАЙЛ
  • Поменять владельца на указанного, и также меняет группу на главную группу ВЛАДЕЛЬЦА:
chown ВЛАДЕЛЕЦ: ФАЙЛ
  • Поменять только группу файла, владелец останется неизменным:
chown :ГРУППА ФАЙЛ

Примеры:

Аргумент Результат
bob Меняет владельца файла с текущего на пользователя bob.
bob:users Меняет владельца файла с текущего владельца на пользователя bob и меняет группу владельцев на группу users.
:admins Меняет группу владельцев на группу admins. Владелец файла не меняется.
bob: Меняет владельца файла с текущего на владельца с именем пользователя bob и меняет группу владельцев на группу, с которой совершил вход пользователь bob — обычно это основная группа пользователя.

Продолжение: «Азы работы в командной строке Linux (часть 7)».

Рекомендуется Вам:

Добавить комментарий

Ваш адрес email не будет опубликован.