RTFM.WIKI

Ordnung muß sein. Ordnung über alles (18+)

Инструменты пользователя

Инструменты сайта


Боковая панель


Навигация

Линкшэринг

ALARM!

Добавить новую страницу

You are not allowed to add pages
linux:file_permissions


Права на файлы в Linux

Основы

С самого своего появления, UNIX позиционировался как мультипользовательская операционная система. Что соответственно повлекло за собой создание механизмов для защиты и обеспечения авторизорованного доступа к данным. Таким образом появился стандарт DAC (Discretionary Access Control). В соответствии с DAC, пользователь сам решает какие права доступа соответствуют файлам. Но с точки зрения разработки операционных систем эта модель оказалась неудовлетворительной. Из-за чего появились новые модели для организации доступа к файлам, такие как MAC (Mandatory Access Control), ACL (Access Control List), и их реализации, например SELinux, TrustedBSD, Trusted Solaris.

Владелец файла

Обычно, владельцем файла является пользователь, создавший этот файл. В 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-rr 1 adam adam 400 2007-08-22 18:49 prog_09.py 

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

chgrp

Эта команда позволяет изменить группу-владельца файла. Если эту команду использует простой пользователь, то он, во-первых, должен быть владельцем файла, а во-вторых, он должен быть членом группы, которой он хочет дать права. Интересный факт, пользователь не должен быть членом группы, которая владеет файлом. Синтаксис следующий: chgrp new-group files,можно использовать как и имя группы, так и GID группы.

$ ls -l
-rw-rr 1 adam root 0 2007-09-03 15:33 file.txt
$ chgrp users file.txt
$ ls -l
-rw-rr 1 adam users 0 2007-09-03 15:33 file.txt

Команду кстати можно использовать с ключом -R, что приведет к рекурсивному обходу всех файлов в каталоге и его подкаталогах.

chown

Эта команда используется для изменения как владельца так и группы. В большинстве систем, только root имеет право пользоваться этой командой. У команды следующий синтаксис: chown new user:new group files. Как и в команде chgrp, вы можете использовать как имена пользователей и групп, так и их GID и UID. Кстати команда не проверяет на существование пользователей и группы, так что можно задать несуществующие.

$ ls -l
-rw-rr 1 adam users 0 2007-09-03 15:33 file.txt
root@laptop:# chown root:root file.txt
adam@laptop:~$ ls -l
-rw-rr 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 ®, запись, write (w) и выполнение, execute (x).Тип доступа Для файла Для каталога
r Чтение содержимого файла Отображение содержимого каталога (например командой ls)
w Запись в файл Изменение содержимого каталога
x Запуск файла на исполнение Возможность войти в каталог командой cd

Стоит заметить, что когда мы рассматриваем права на каталоги, нужно помнить, что каталог - это тоже файл, который содержит список файлов, т.е. их имена и расположение на диске. Для того что бы посмотреть содержимое каталога достаточно воспользоваться командой ls (без ключей), для этого необходимы только права на чтение, но для того что бы выполнить ls -l необходимы права на запись и выполнение. Обобщая вышесказанное, выполняя любую операцию над каталогом (кроме простого просмотра содержимого) вам необходимы права на выполнение, таким образом обладая этими правами вы получаете доступ к содержимому каталога использую имена файлов.

drw-rr 2 adam adam 96 2007-09-05 18:04 blob
drwxr-xr-x 2 adam adam 176 2007-09-04 15:57 tapety
-rw-rr 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 - это файл.

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) отбирается (-) право на чтение ®.

$ chmod a=w finanse.ods

Всем (a) присваивается (=) право на запись (w), а остальные права стираются (=).

$ chmod u+rwx,g+rwx,o+x trurl.py

Пользователю прибавляются права на все, группе тоже, а остальным прибавляется право на выполнение.

Числовое представление прав

Для упрощения записи команды 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

Специальные уровни доступа

Рассмотрим несколько специальных уровней доступа, расширяющие стандартные.

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-rr 1 adam users 3665 2007-09-17 17:23 wynik.txt

Липкий бит

Если такой типа установить на выполняемый файл, то результаты его работы будут храниться в оперативной памяти даже после завершения программы. Эта возможность редко используется в наши дни, но исторически это сделано было для уменьшения затрат при запуске программ, сегодня существуют более мощные средства кэширования и экономичного распределения памяти между процессами. Если поставить эту опцию на каталог, то всем будет разрешено создавать в ней содержимое, но удалять будет иметь права только владелец и 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/

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

setgid

Полностью аналогична setuid, только для групп.

# chmod g+s test/
# chmod 2000 test/
# ls -l
drwxrwsrwt 2 adam adam 48 2007-09-20 15:28 test

unmask

Команда unmask используется для установки прав файлов для новосозданных файлов по умолчанию. Глобально, у всех новых файлов права по умолчанию 666. С помощью этой команды мы передаем те опции которые НЕ будут присутствовать в новых файлах. Т.е. если мы передадим параметр 0022, то по умолчанию права будут 644.

$ umask
0022
$ touch file
$ ls -l
-rw-rr 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
This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies

Discussion

Enter your comment. Wiki syntax is allowed:
 
linux/file_permissions.txt · Последнее изменение: 2013/08/16 19:14 (внешнее изменение)