Права доступа
Ваш компьютер хранит много информации о файлах, которая остаётся скрытой в течение того времени, когда вы с ними работаете. Один набор файловых атрибутов, с которым вам придётся столкнуться — это права доступа. У кого есть доступ, чтобы редактировать ваши файлы? К счастью, не каждый, кто залогинится в систему (и в настоящее время множество систем всё ещё остаются поделёнными для доступа многих людей). Данная глава обсуждает владение файлами и привиллегии.
Для начала посмотрим, что сама система может рассказать о файлах. Запустим обычнуюю команду ls с параметром -l, чтобы получить длинный список:
$ ls -l total 72 drwxr-xr-x 2 root root 4096 Oct 5 09:31 bin drwxr-xr-x 3 root root 4096 Oct 9 21:47 boot drwxr-xr-x 1 root root 0 Jan 1 1970 dev ...
Первая строка:
total 72
показывает общий размер всех файлов вместе в килобайтах (точнее в кибибайтах, КиБ (примечание переводчика)). Остальное представляет информацию о самих файлах и директориях. Вся информация группируется в семь колонок, которые можно суммировать как представлено ниже:
Права доступа Ссылки Владелец Группа Размер Дата модификации Название (имя файла)
Что могу делать я? Что другие могут делать?
Каждый файл и директория в системе имеет владельца, принадлежащего группе, и права доступа, ассоциированные с ними. На простейшем уровне эти права определяют уровень доступа, один для владельца файла, один для группы, к торой файл также принадлежит, и другой - для остальных людей в мире. (Под "остальными" подразумевается любой, кто имеет привиллегии залогиниться в систему)
Снова взглянем на вывод введённой нами команды. Третий и четвёртый слолбцы показывают владельца (в данном случае root) и группу (также root). Первый столбец представляет права доступа в очень компактном виде, например:
drwxr-xr-x
Первый символ обозначает тип файла, следующие три показыают права доступа для владельца, другие три - для группы, три оставшиеся - для остальных.
Следующая таблица показывает, что означает первый симвоол. Предыдущий пример показал "d" для директории. Некоторые обозначения появляются очень редко. Чаще всего требуется знать только об обычных файлах и директориях.
| Символ | Пояснение |
|---|---|
| - | обычный файл |
| d | директория |
| l | символическая ссылка |
| b | файл блочного устройства |
| c | character special file |
| p | FIFO (именованный поток) |
| s | сокет |
| ? | любое, что неизвестно команде ls |
Права делятся на три типа:
* Чтение (r): право читать файл * Запись (w): право записывать в файл * Выполнение (x): право запускать (исполнять) файл
Если какое-либо право не установлено, печатается "минус" (-) в данной позиции.
Простейший путь увидеть как столбцы прав разделяются по правам владения представлен ниже:
тип : владелец : группа : остальные d : rwx : r-x : r-x
Если нужно просмотреть содержание файла, вам нужны права на чтение. Если нужно изменить содержание - нужны права на запись. Если файл является программой (исполняемым файлом) и нужно запустить его, то нужны права на запуск.
В случае директории, если нужно просмотреть её содержание, нужны права как на чтение так и на выполнение, прав только на чтение недостаточно. Если нужно добавить или удалить файлы из директории, то нужны права на запись.
Возвращаясь назад к примеру, рассмотрим следующую строку:
drwxr-xr-x 2 root root 4096 Oct 5 09:31 bin
Как можно видеть, это директория. Как вы думаете, что можно с ней сделать? Вот где нужно посмотреть на владельца и группу файла. Но обо всём по порядку: кто вы?
$ whoami joe
Эта команда покажет, кто вы, а именно имя пользователя, под которым вы залогены в системе. Как можно видеть, вы не root (суперпользователь). Пользователь root может просматривать содержание данной директории, а также добавлять файлы в ней, но вы не суперпользователь. К каким группам вы принадлежите?
$ id -G -n joe dialout cdrom floppy audio video plugdev
Это список групп, к которым принадлежите вы. Если бы где-нибудь в списке было root, то вы могли бы просматривать содержимое директории /bin, но не добавлять фалы туда. Но вы не принадлежите группе root. Единственным вариантом является "остальные", и вы включены в эти "остальные", в этом случае вы можете только просматривать содержимое директории.
Посмотрим на другой файл:
$ ls -l /etc/issue -rw-r--r-- 1 root root 36 2009-02-26 15:06 /etc/issue
Как видно, это обычный файл, который пользователь root может читать и перезаписывать, а пользователи группы root, кто бы они ни были, могут только читать. А вы (joe) также можете только читать.
Как насчёт ваших собственных файлов? Скорее всего у вас есть директория Desktop в вашей домашней директоирии. Мы проверим права этой директории командой ls -l, добавив параметр -d, чтобы увидеть информацию только об этой директории, а не о файлах и директориях внутри её.
$ ls -l -d ~/Desktop drwxr-xr-x 8 joe joe 4096 2009-03-12 09:27 /home/joe/Desktop
Эта директория принадлежит вам! И, судя по правам доступа, вы можете читать её содержимое и добавлять туда файлы. А другие люди могут только просматривать её содержимое. (здесь походу недокопипастили) Setting through chmod
Если вы хотите изменить права файла, то вы должны быть его владельцем, иначе можно было бы изменять файлы других людей. Еслы вы являетесь владельцем файла (или директории), вы можете изменять его права командой chmod. Есть два пути указать новые права на файл, и оба имеют свои преимущества. Рассмотрим эти оба лути:
Создайте директорию practice (практика) и скопируйте туда пару файлов:
$ mkdir ~/practice $ cd ~/practice $ cp /etc/issue /etc/motd . $ ls -l total 8 -rw-r--r-- 1 joe joe 36 2009-03-21 14:34 issue -rw-r--r-- 1 joe joe 354 2009-03-21 14:34 motd
Допустим, вам нужно сделать файл issue доступным на чтение и запись вам и вашей группе, а файл motd на чтение и запись только вам. Это означает, что вывод команды ls -l должен выглядеть вот так:
$ ls -l total 8 -rw-rw---- 1 joe joe 36 2009-03-21 14:34 issue -rw------- 1 joe joe 354 2009-03-21 14:34 motd
Изменить права файла issue можно так:
$ chmod u=rw,g=rw,o= issue
Это значит:
* u=rw: устанавливает права владельца в чтение/запись * g=rw: устанвливает права группы в чтение/запись * o=: устанвливает права для остальных в "ничего" (нет прав)
Для motd команда выглядит так:
$ chmod u=rw,g=,o= motd
Довольно просто, не правда ли? Также при этом нужно много печатать. Более короткая запись будет:
$ chmod ug=rw,o= issue $ chmod u=rw,go= motd
Она немного короче, но есть ещё более короткая версия:
$ chmod 0660 issue
Эта строка требует небольшого пояснения. Числами выражаются те же права, как и до этого. Если непонятно, как это работает, рассмотрите следующую диаграмму:
(Тут нужна диаграмма) octal_notation.png
Верхняя строка показывает нашу цель: файл, кторый владелец может читать, записывать и запускать, группа может только считывать и выполнять, а остальные не имеют вообще доступа. Каждая буква в символьной нотации представляет собой бит в бинарном представлении. Если буква имеется, это значит 1 (один), эсли нет, значит 0 (ноль). Первая единица в 111 - это 4, вторая - 2, а третья - 1. Если всё это сложить, получится 7. Если вы сделаете тоже самое с другим триплетом прав (для группы и других), получится 0750.
Возвращаясь к нашему примеру, для файла issue нам нужны права -rw-rw----, которые дают нам 0, 4+2, 4+2 и 0, это означает 0660. Теперь вы можете сами составить права в числовой нотации для файла motd.