Linux полный доступ к файлу

Sysadminium

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

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

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

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

Получается, с файлами можно делать три стандартные действия: читать (r), редактировать (w), запускать (x). Это и есть стандартные права доступа к файлам в Linux.

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

Права доступа к каталогам

В Linux все является файлами и каталоги это тоже файлы, об этом я рассказывал в этой статье. С каталогами можно выполнять те же действия, что и с файлами:

  • прочесть каталог (r), то есть посмотреть список файлов, например с помощью утилиты ls;
  • отредактировать каталог (w):
    • создать новый файл, например с помощью mkdir или touch;
    • удалить файл с помощью rm;
    • переместить файл в другой каталог с помощью mv;

    Это стандартные права доступа к каталогам в Linux.

    Кто выполняет действия над файлами

    С возможными действиями над файлами и каталогами мы разобрались, теперь разберемся с теми, кто может эти действия совершать:

    • владелец файла или каталога (u). Владельцем файла является тот, кто его создал, или получил право владения им;
    • группа владельцев файла или каталога (g). Файл получает группу владельцев от первичной группы создателя файла, или группу владельцев может назначить пользователь root;
    • все остальные (o);
    • a — все пользователи (a). Владелец и группа владельцев и все остальные вместе взятые.

    Таким образом получается такая система прав u=rwx / g=rwx / o=rwx. То-есть, что может делать с файлом его владелец, что может делать с файлом группа владельцев и что могут делать с файлом все остальные.

    Смотрим права файлов и каталогов

    Права файлов и каталогов можно посмотреть с помощью команды ls -l. Можно добавить опцию -d чтобы смотреть права каталога, не спускаясь в этот каталог. Команда ls показывает права таким образом rwxr-xr-x, первые три символа это права для владельца, следующие для группы, следующие для всех остальных.

    Давайте, для примера, создадим каталог test и посмотрим какие права он получил в Debian и в Ubuntu:

    alex@ubu:~$ mkdir test alex@ubu:~$ ls -ld test/ drwxrwxr-x 2 alex alex 4096 янв 19 10:04 test/ alex@deb:~$ mkdir test alex@deb:~$ ls -ld test/ drwxr-xr-x 2 alex alex 4096 янв 19 13:05 test/

    Разница между Ubuntu и Debian в том что, по умолчанию, каталог в Ubuntu создается с такими правами rwxrwxr-x, а в Debian с такими rwxr-xr-x. Это означает что в Debian пользователи входящую в группу владельцев этого каталога не смогут ничего удалить или создать в этом каталоге, а в Ubuntu смогут.

    Стандартные права доступа к файлам в Linux

    А после прав, в выводе ls -l, идут Владелец файла и Группа владельцев (alex alex).

    Права, владелец и группа владельцев в выводе ls

    Создадим файлы в каталоге и посмотрим на их права:

    alex@ubu:~$ touch test/file1.txt alex@ubu:~$ touch test/file2.txt alex@ubu:~$ ls -l test/ total 0 -rw-rw-r-- 1 alex alex 0 янв 19 10:12 file1.txt -rw-rw-r-- 1 alex alex 0 янв 19 10:12 file2.txt alex@deb:~$ touch test/file1.txt alex@deb:~$ touch test/file2.txt alex@deb:~$ ls -l test/ итого 0 -rw-r--r-- 1 alex alex 0 янв 19 13:12 file1.txt -rw-r--r-- 1 alex alex 0 янв 19 13:12 file2.txt

    Права на файлы в Ubuntu (rw-rw-r—) и в Debian (rw-r—r—) тоже немного отличаются. В Debian группа владельцев не может редактировать файл в отличии от Ubuntu.

    Для назначения прав используют две утилиты:

    • chmod для настройки прав (rwx);
    • chown для смены владельца и группы владельцев файла.

    Настраиваем права — chmod

    Синтаксис этой команды такой:

    # chmod [ugoa] [+-=] [rwx] u - владелец g - группа o - все остальные a - все

    Знак «+» добавляет право, знак «» отнимает право, знак «=» устанавливает право для выбранной категории пользователей, убирая все остальные.

    С прошлого урока у меня остался пользователь testuser:

    alex@deb:~$ id testuser uid=1001(testuser) gid=1001(testuser) группы=1001(testuser)

    Сделаем так, чтобы каталог test не могли читать все остальные и попробуем прочитать этот каталог под пользователем testuser:

    alex@deb:~$ chmod o-r test/ alex@deb:~$ su testuser Пароль: testuser@deb:/home/alex$ ls -l test/ ls: невозможно открыть каталог 'test/': Отказано в доступе

    Командой chmod мы можем устанавливать права и отбирать их, я указал o-r, что означает у всех остальных (o) отнять (-) права на чтение (r).

    Устанавливать права может либо владелец файла, либо пользователь root.

    Но зайти в каталог testuser все равно сможет:

    testuser@deb:/home/alex$ cd test/ testuser@deb:/home/alex/test$ cd - /home/alex

    Теперь попробуем прочитать каталог под пользователем alex:

    testuser@deb:/home/alex$ exit exit alex@deb:~$ ls -l test/ итого 0 -rw-r--r-- 1 alex alex 0 янв 19 13:12 file1.txt -rw-r--r-- 1 alex alex 0 янв 19 13:12 file2.txt

    Вот несколько примеров работы с командой chmod:

    $ chmod o-rwx #забрать права на чтение, запись и исполнение для всех остальных $ chmod o+rwx #дать права на чтение, запись и исполнение для всех остальных $ chmod g+rx #дать права для группы владельцев на чтение и исполнение $ chmod a+r #всем дать право на чтение $ chmod ug+rw #владельцу и группе дать право на чтение и запись $ chmod o=x #всем остальным мы назначаем права на исполнение, rw удаляются если были

    То есть мы вначале говорим кто (u или g или o или a), дальше указываем что сделать ( удалить право, + добавить право, = установить право), дальше указываем права (r или w или x, или их комбинации). При этом « отличается от «=» тем что, «+» добавляет право к уже имеющемся, а «=» заменяет.

    Числовые значения прав

    У прав есть числовые значения: r=4, w=2, x=1. Для удобства я подготовил следующую табличку:

    Цифра Описание прав для файла Описание прав для каталога Символьные значения
    0 Нет доступа Нет доступа
    1 Право выполнять файл Право входить в каталог (делать его текущем) —x
    2 Право редактировать файл Право создавать новые файлы, удалять файлы, или переименовывать их в каталоге -w-
    3 Сумма прав (1+2) Сумма прав (1+2) -wx
    4 Право читать файл Право смотреть список файлов в каталоге r—
    5 Сумма прав (4+1) Сумма прав (4+1) r-x
    6 Сумма прав (4+2) Сумма прав (4+2) rw-
    7 Сумма прав (4+2+1) Сумма прав (4+2+1) rwx

    Таблица соответствия числовых и символьных значений прав доступа

    Используя chmod можно устанавливать права в числовых значениях, при этом нужно указывать сумму прав. Например права rw-r—r— в числовом формате будут такими 644, то есть мы сложили права для владельца (r+w=6), дальше для группы и для всех остальных (r=4).

    Вот как назначают права в числовом виде:

    alex@deb:~$ chmod 644 test/file1.txt alex@deb:~$ ls -l test/file1.txt -rw-r--r-- 1 alex alex 0 янв 19 13:12 test/file1.txt

    Смена владельца и группы владельцев — chown

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

    alex@deb:~$ su - Пароль: root@deb:~# chown testuser:testuser /home/alex/test/ root@deb:~# ls -ld /home/alex/test/ drwxr-x--x 2 testuser testuser 4096 янв 19 13:12 /home/alex/test/ alex@ubu:~$ sudo su - [sudo] password for alex: root@ubu:~# chown testuser:testuser /home/alex/test/ root@ubu:~# ls -ld /home/alex/test/ drwxrwx--x 2 testuser testuser 4096 янв 19 10:12 /home/alex/test/

    Так как в Ubuntu не задан пароль для root пользователя я использую sudo чтобы переключиться на него. Это я уже разбирал в этом курсе.

    Команде «chown» нужно указать имя пользователя, потом двоеточие и имя группы. После проделанного пользователь testuser и группа testuser станут владельцами данного каталога.

    Можно сменить только владельца а группу не менять:

    root@deb:~# chown alex /home/alex/test/ root@deb:~# ls -ld /home/alex/test/ drwxr-x--x 2 alex testuser 4096 янв 19 13:12 /home/alex/test/

    А можно сменить только группу владельцев:

    root@deb:~# chown :testuser /home/alex/test/ root@deb:~# ls -ld /home/alex/test/ drwxr-x--x 2 alex testuser 4096 янв 19 13:12 /home/alex/test/

    Как вы помните пользователь testuser не мог прочитать каталог test/, теперь он это сделать может, так как для группы у нас есть право читать этот каталог.

    root@deb:~# su testuser testuser@deb:/root$ ls /home/alex/test/ file1.txt file2.txt testuser@deb:/root$ exit exit root@deb:~#

    Рекурсивная смена прав и владельцев

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

    Для этого используется опция -R:

    root@deb:~# chmod -R 644 /home/alex/test/ root@deb:~# chown -R alex:testuser /home/alex/test/ root@deb:~# ls -l /home/alex/test/ итого 0 -rw-r--r-- 1 alex testuser 0 янв 19 13:12 file1.txt -rw-r--r-- 1 alex testuser 0 янв 19 13:12 file2.txt

    Источник

    Читайте также:  Управление кулером процессора linux
Оцените статью
Adblock
detector