Skip to content

Latest commit

 

History

History

12-fs

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

12 Семинар - работа с файлами: inode, readdir, lstat, symlink, rwxrwSrwT. Пишем свой ls -l

Файлики с кодом:

Запись:

[yt]

[vk]

Права доступа к файлам и директориям

Параметры доступа

[r]ead - файл: читать, директория: просматривать содержимое (ls)

[w]rite - файл: изменять содержимое, директория: создавать новые файлы

e[x]ecute - файл: исполнять, директория: заходить в нее (cd)

Категории пользователей

[u]ser - владелец файла (может быть только один)

[g]roup - любая группа пользователей (может быть только одна)

[o]ther - все остальные

[a]ll - все

Тип файла

copy from

  1. [-] Обычный файл – наиболее распространенный тип файлов, который хранит данные в том или ином виде. Ядро UNIX не делает различий между текстовыми и двоичными файлами. Любая интерпретация содержимого файла полностью возлагается на прикладную программу, обрабатывающую файл.

  2. [d] Файл каталога. Файлы этого типа содержат имена других файлов и ссылки на информацию о них. Любой процесс, обладающий правом на чтение каталога, может проверить его содержимое, но только ядро обладает правом на запись в файл каталога. Чтобы внести изменения в каталог, процессы должны пользоваться функциями, обсуждаемыми в данной главе.

  3. [b] Специальный файл блочного устройства. Этот тип файлов обеспечивает буферизованный ввод вывод для таких устройств, как дисковые устройства с фиксированным размером блока.

  4. [c] Специальный файл символьного устройства. Этот тип файлов обеспечивает небуферизованный ввод вывод для устройств с переменным размером блока. Все устройства в системе являются либо специальными файлами блочных устройств, либо специальными файлами символьных устройств.

  5. [p] FIFO, или именованный канал. Этот тип файлов используется для организации обмена информацией между процессами.

  6. [s] Сокет. Этот тип файлов используется для организации обмена информацией между процессами через сетевые соединения. Сокеты можно применять и для обмена информацией между процессами на одной и той же машине.

  7. [l] Символическая ссылка. Файлы этого типа представляют собой ссылки на другие файлы.

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

При запуске программы используются effective uid и effective gid, то есть влияют права не того пользователя (группы), кто создал файл, а того, кто запускает.

[s]uid - установка этого бита позволяет запускать программу от имени владельца файла. То есть какие-то программы можно, например, запускать от имени суперпользователя (ls -l /usr/bin/passwd).

[s]gid - установка этого бита на файл позволяет запускать файл от имени группы, владеющей файлом. Если бит установлен на директории, то все файлы созданные в этой директории будут иметь группу такую же как у директории

s[t]icky - установка этого бита запрещает удалять файлы директории/файл всем, кроме root и владельца файла/директории. (ls -ld /tmp/)

Строка прав (символьный вид)

В символьном виде строка прав состоит из 10 символов (9 символов права и 1 на тип):

        - --- --- ---
        ^ \|/ \|/ \|/
        |  |   |   |
      Тип  |   |   |
           |   |   |
       Права   |   |
   владельца   |   |
               |   |
           Права   |
          группы   |
                   |
               Права
           остальных

Символы по порядку

  1. [-, d, b, c, p, s, l] один в зависимости от типа файла отсюда.

  2. [-, r]: '-' у владельца нет прав на чтение, 'r' у владельца есть права на чтение

  3. [-, w]: '-' у владельца нет прав на запись, 'w' у владельца есть права на запись

  4. [-, x, s, S]: '-' у владельца нет прав на исполнение, 'x' у владельца есть права на исполнение, 's' при запуске использовать права владельца, а не того, кто запускает (у владельца есть права на запуск), 'S' при запуске использовать права владельца (у владельца нет права на запуск)

  5. [-, r]: '-' у группы нет прав на чтение, 'r' у группы есть права на чтение

  6. [-, w]: '-' у группы нет прав на запись, 'w' у группы есть права на запись

  7. [-, x, s, S] '-' у группы нет прав на исполнение, 'x' у группы есть права на исполнение, 's' файл будет запускаться от имени группы / в директории файлы будут создаваться в правами группы (у группы есть права на исполнение), 'S' аналогично, но у группы нет прав на исполнение

  8. [-, r]: '-' у остальных нет прав на чтение, 'r' у остальных есть права на чтение

  9. [-, w]: '-' у остальных нет прав на запись, 'w' у остальных есть права на запись

  10. [-, x, t, T] '-' у остальных нет прав на исполнение, 'x' у остальных есть права на исполнение, 't' - файл нельзя удалить (у остальных есть права на исполнение), 'T' - файл нельзя удалить (у остальных нет прав на исполнение)

Порядок применения прав

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

Сначала проверяется совпадают ли владелец файла и effective UID процесса, если да, то выбирается набор прав для владельца.

Дальше проверяется, совпадает ли группа файла и effective GID процесса, если да, то выбирается набор прав для группы.

Иначе выбираются права для остальных.

Проверим

На каждом шаге можно проверять права с помощью ls -l myfile.txt

Создадим файл:

echo 'mytext' > myfile.txt

Запретим себе читать его:

chmod u-r myfile.txt

Проверим, что не можем читать:

cat myfile.txt

Должны получить permission denied. Так как применились права владельца а мы у владельца забрали права на чтение.

Поменяем владельца на root:

sudo chown root myfile.txt

Теперь проверим, что имеем доступ:

cat myfile.txt

Должно сработать. Мы теперь не являемся владельцами файла, поэтому права владельца не применяются. В для группы и для остальных права на чтение есть

Примеры строки прав

drwxr-xr-x

Директория, владелец может делать что угодно. Остальные группа и остальные могут только заходить в нее и просматривать содержимое

-r-xr--r--

Обычный файл. Читать могут все. Исполнять только владелец.

Строка прав (бинарный вид)

Строку прав можно представить как 4 8-ричных числа.

8-ричное число состоит из 3х бит.

3 числа отвечают за права user, group, other - 100 соответствует r--, 101 соответствует r-x, 111 - rwx.

Четвертое число (пишется на первом месте) отвечает за специальные биты. Первая позиция отвечает за user, вторая за group, третья за остальных. Например, если для user мы имеем rwx [111], а в специальных битах находится 100, то в символьном виде запишется rws (x заменится на s).

Права можно записывать сразу в восьмиричной системе счисления:

000 - --- - 0
001 - --x - 1
010 - -w- - 2
011 - -wx - 3
100 - r-- - 4
101 - r-x - 5
110 - rw- - 6
111 - rwx - 7

Соответственно, можно записывать права так: 7777, 5666 или, опуская специальные биты: 777 (всем все можно), 400 (читать может только владелец).

Изменение прав

Чтобы изменить права, нужно воспользоваться командой chmod.

В восьмиричном виде (задать права)

Можно задавать права в восьмиричном виде (будут права rwsrwsrwt):

chmod 7777 file.txt

Если опустить какую-то цифру, то она будет считаться 0. То есть

chmod 777 file

сделает то же самое, что и

chmod 0777 file

и права будут rwxrwxrwx

Изменить права

chmod опции категория|действие|флаг файл

Добавить права на выполнение всем:

chmod +x file

Добавить права на выполнение владельцу:

chmod u+x file

Забрать права на чтение у всех:

chmod a-r file

Установить владельцу права в точности на чтение и исполнение:

chmod u=rx file

Установить SUID:

chmod u+s file

Почитать

  1. https://losst.ru/prava-dostupa-k-fajlam-v-linux
  2. https://www.redhat.com/sysadmin/suid-sgid-sticky-bit
  3. http://web.mit.edu/sipb/doc/working/afs/html/subsection3.1.html