С самого своего появления, UNIX позиционировался как мультипользовательская операционная система. Что соответственно повлекло за собой создание механизмов для защиты и обеспечения авторизорованного доступа к данным. Таким образом появился стандарт DAC (Discretionary Access Control). В соответствии с DAC, пользователь сам решает какие права доступа соответствуют файлам. Но с точки зрения разработки операционных систем эта модель оказалась неудовлетворительной. Из-за чего появились новые модели для организации доступа к файлам, такие как MAC (Mandatory Access Control), ACL (Access Control List), и их реализации, например SELinux, TrustedBSD, Trusted Solaris.
2. Владелец файла
Обычно, владельцем файла является пользователь, создавший этот файл. В UNIX-подобных операционных системах, все файлы имеют два типа владельцев: user (пользователь) и group (группа). Владельцы не должны совпадать друг с другом, т.е. user не должен быть членом group. Но фактически почти всегда, пользователь принадлежит к той группе, которая владеет файлом. Если пользователь не является владельцем файла и не принадлежит к группе, владеющей файлом, то он считается “левым” (others, остальные). Каждому пользователю в системе присваивается UID-номер (user identification number, идентификатор пользователя), с помощью этого система однозначно определяет пользователя. Пользователь root имеет UID = 0, а максимально возможный номер принадлежит пользователю “nobody” (”никто”) (для Ubuntu это 65534, для NetBSD — 32767). Следовательно права привязываются не в к имени пользователя, а к его UID. Аналогично каждой группе соответствует GID (group identification number). Для того что бы в консоле вывести владельцев файлов используйте команду ls с ключом -l:
$ ls -l
razem 1822
drwxr-xr-x 3 adam adam 120 2007-09-03 16:00 Desktop
-rw-r–r– 1 adam adam 400 2007-08-22 18:49 prog_09.py
Третья и четвертая колонка означают, что пользователь и группа владеют файлом.
2.1. chgrp
Эта команда позволяет изменить группу-владельца файла. Если эту команду использует простой пользователь, то он, во-первых, должен быть владельцем файла, а во-вторых, он должен быть членом группы, которой он хочет дать права. Интересный факт, пользователь не должен быть членом группы, которая владеет файлом. Синтаксис следующий: chgrp new-group files,можно использовать как и имя группы, так и GID группы.
$ ls -l
-rw-r–r– 1 adam root 0 2007-09-03 15:33 file.txt
$ chgrp users file.txt
$ ls -l
-rw-r–r– 1 adam users 0 2007-09-03 15:33 file.txt
Команду кстати можно использовать с ключом -R, что приведет к рекурсивному обходу всех файлов в каталоге и его подкаталогах.
2.2. chown
Эта команда используется для изменения как владельца так и группы. В большинстве систем, только root имеет право пользоваться этой командой. У команды следующий синтаксис: chown new user:new group files. Как и в команде chgrp, вы можете использовать как имена пользователей и групп, так и их GID и UID. Кстати команда не проверяет на существование пользователей и группы, так что можно задать несуществующие.
$ ls -l
-rw-r–r– 1 adam users 0 2007-09-03 15:33 file.txt
root@laptop:# chown root:root file.txt
adam@laptop:~$ ls -l
-rw-r–r– 1 root root 0 2007-09-03 15:33 file.txt
Смена группы и пользователя.
root@laptop:# chown zoidberg file.txt
Смена владельца на пользователя zoidberg, группа остается без изменений.
# chown :futurama file.txt
Смена группы на futurama, владелец без изменений.
В любой UNIX-подобной системе имеются 3 уровня доступа к файлу: чтение, read (r), запись, write (w) и выполнение, execute (x).
Тип доступа | Для файла | Для каталога |
r | Чтение содержимого файла | Отображение содержимого каталога (например командой ls) |
w | Запись в файл | Изменение содержимого каталога |
x | Запуск файла на исполнение | Возможность войти в каталог командой cd |
Стоит заметить, что когда мы рассматриваем права на каталоги, нужно помнить, что каталог – это тоже файл, который содержит список файлов, т.е. их имена и расположение на диске. Для того что бы посмотреть содержимое каталога достаточно воспользоваться командой ls (без ключей), для этого необходимы только права на чтение, но для того что бы выполнить ls -l необходимы права на запись и выполнение. Обобщая вышесказанное, выполняя любую операцию над каталогом (кроме простого просмотра содержимого) вам необходимы права на выполнение, таким образом обладая этими правами вы получаете доступ к содержимому каталога использую имена файлов.
drw-r–r– 2 adam adam 96 2007-09-05 18:04 blob
drwxr-xr-x 2 adam adam 176 2007-09-04 15:57 tapety
-rw-r–r– 1 adam adam 125 2007-08-29 18:31 fme.py
Список прав доступен по команде ls с ключом -l. В первой колонке первый символ обозначает тип файла, а остальные 9 показывают права доступа. Первые 3 из 9 показывают права user, следующие 3 – это права group, и оставшиеся для “левых”.
В приведенном примере blob – это каталог, user имеет права на запись и чтение, но не на выполнение (rw-), у группы и у остальных есть права только на чтение. Tapety – тоже каталог, и у user есть права на все (rwx), а у группы и у остальных есть права на чтение и выполнение (r-x). Fme.py – это файл.
3.1. chmod
Рассмотрим команду для смены прав доступа:
chmod access rights files
Перед выполнением команды необходимо выбрать класс пользователей, для кого мы хотим изменить права (ugo, User, Group, Others). Есть так же дополнительная группа a (all, все). Затем выбираем оператор: + (дать права), – (убрать права) и = (присвоить права). И в конце выбрать сами права (rwx, r-x и т.д.).
$ chmod u+x skrypt.sh
Пользователю (u) добавляется (+) право на выполнение (x) файла skrypt.sh.
$ chmod go-r raport.odt
У группы и остальных (go) отбирается (-) право на чтение (r).
$ chmod a=w finanse.ods
Всем (a) присваивается (=) право на запись (w), а остальные права стираются (=).
$ chmod u+rwx,g+rwx,o+x trurl.py
Пользователю прибавляются права на все, группе тоже, а остальным прибавляется право на выполнение.
3.2. Числовое представление прав
Для упрощения записи команды chmod можно использовать числовое представление прав. У каждого типа доступа есть числовое представление, для этого используется двоичное представление. Единица означает – есть право, 0 – нет права. Таким образом запись правила rwx r-x r-x в бинарном виде будет выглядить следующим образом: 111 101 101. Но двоичное представление не очень удобно, поэтому используют десятичное представлени. 111 в двоичной системе – это 7 в десятичной, а 101 – это 5, таким образом 111 101 101 – это 755. Итак получаем:
–x 1
-w- 2
-wx 3
r– 4
r-x 5
rw- 6
rwx 7
Таким образом вы можете записать как
$ chmod u=rwx,g=rwx,o=x trurl.py
так и
$ chmod 771 trurl.py
3.3. Специальные уровни доступа
Рассмотрим несколько специальных уровней доступа, расширяющие стандартные.
3.3.1. X
Данная опция добавляет выбранным классам права на выполнение тогда и только тогда, когда другие классы тоже имеют права на выполнение:
$ ls -l
-rwx—— 1 adam users 14 2007-09-10 21:48 skrypt.sh
drwx—— 1 adam users 14 2007-09-10 21:48 tapety
-rw——- 1 root users 3665 2007-09-17 17:23 wynik.txt
$ chmod go+X *
$ ls -l
-rwxr-xr-x 1 adam users 14 2007-09-10 21:48 skrypt.sh
drwxr-xr-x 1 adam users 14 2007-09-10 21:48 tapety
-rw-r–r– 1 adam users 3665 2007-09-17 17:23 wynik.txt
3.3.2. Липкий бит
Если такой типа установить на выполняемый файл, то результаты его работы будут храниться в оперативной памяти даже после завершения программы. Эта возможность редко используется в наши дни, но исторически это сделано было для уменьшения затрат при запуске программ, сегодня существуют более мощные средства кэширования и экономичного распределения памяти между процессами. Если поставить эту опцию на каталог, то всем будет разрешено создавать в ней содержимое, но удалять будет иметь права только владелец и root.
drwxrwxrwt 10 root root 464 2007-09-20 12:45 tmp
Эта возможность часто используется для каталога /tmp. Судя из названия, этот каталог используется как временный.
Назначить липкий бит можно командой chmod:
# chmod u+t test/
# ls -l
drwxrwxrwt 2 adam users 48 2007-09-20 15:28 test
или используя числовую запись
# chmod 1000 test/
3.3.3. setuid
Если установить этот режим на исполняемый файл, то все смогут запускать программу от имени владельца. Например у программы ping владельцем является root (т.к. только root имеет право создавать сокеты, что и делает эта программа), но так как на ней стоит этот режим, то и все остальные могут пользоваться этой программой.
$ ls -l /usr/bin/ | grep sudo
-rwsr-xr-x 1 root root 91508 2006-10-09 13:37 sudo
# chmod u+s program
# chmod 4000 program
3.3.4. setgid
Полностью аналогична setuid, только для групп.
# chmod g+s test/
# chmod 2000 test/
# ls -l
drwxrwsrwt 2 adam adam 48 2007-09-20 15:28 test
3.4. unmask
Команда unmask используется для установки прав файлов для новосозданных файлов по умолчанию. Глобально, у всех новых файлов права по умолчанию 666. С помощью этой команды мы передаем те опции которые НЕ будут присутствовать в новых файлах. Т.е. если мы передадим параметр 0022, то по умолчанию права будут 644.
$ umask
0022
$ touch file
$ ls -l
-rw-r–r– 2 adam adam 48 2007-09-20 15:28 file
umask 0111
$ ls -l
-rw-rw-rw- 1 adam adam 0 2007-09-20 17:31 file2
Источник: linuxpeople.ru
One Trackback
[...] весом в 209 МБ…. После закачки файла, делаю ему права(эх как я скучал по этому в Windows) и [...]