Если в Windows может быть 1 владелец файлов или объектов,то в Linux совершенно всё иначе.
Т.е.,для любого объекта существуют все пользователи в системе.
Каждый объект может иметь своего владельца или группу владельцев.
Задав простую команду # ls -l,можно увидеть директории и файлы с владельцами,группами и разрешениями.
Командами chown и chgrp,мы можем изменить владельца и группу соответственно.
К примеру, есть некий файл file.txt и два юзера, помимо root в системе.
Чтобы сменить владельца с Sergey на Vertigo:
И поменяем ему группу с Sergey (какую угодно) на Vertigo:
Также можно изменить группу и командой chown,но она по-умолчанию ищет владельца когда что-то печатается после этой команды,
поэтому смена группы происходит только таким образом при использовании данной команды:
Тонкость в том,что когда в Linux создаётся какой-либо пользователь,
то по-умолчанию для него создаётся и такая же одноимённая группа (Sergey и группа будет Sergey)
Поменяем и владельца и группу на Vertigo командой chown:
Код:
# chown Vertigo:Vertigo file.txt
Но есть директории ,в которых очень много файлов,например директория Downloads
Мы можем рекурсивно поменять владельца для всех файлов ,которые находятся внутри директории:
# chown -R Vertigo Downloads
Это действие также применимо в ситуациях с установкой какого-либо сложного софта,который создаёт себе отдельную директорию и пользователя.
Чтобы в дальнейшем избежать проблем с запуском этого софта.
Давайте теперь разберёмся с правами доступа к директориям,файлам и прочим объектам.
В Linux отображение прав доступа всегда разбивается по 3 блока (чтение-запись-выполнение): для конкретного владельца (user) -u,
групп владельцев (group)-g и остальных (othes)-o
Именно в таком порядке , слева-направо они предстают перед вами и при изменении прав,вы должны ответить себе на вопрос:
какие права мы назначим для владельца,что там будет у нас с правом на чтение,на запись,а что мы сделаем с правами выполнения.
То же самое делаем для группы и остальных и также слева-напрво ,мы раздаём права в таком порядке:чтение-запись-выполнение
Применяются для этого численные и символьные значения : для чтения (Read)-4 и r ,записи (Write)-2 и w ,выполнения (Execute)-1 и x
Дефисом обозначается отсутствие каких-либо из этих прав:
Код:
Числовое значение Разрешение Символьное значение Бинарное значение
0 права отстутствуют вообще --- 000
1 Execute --x 001
2 write -w- 010
3 write и Execute -wx 011
4 Read r-- 100
5 Read и Execute r-x 101
6 Read и Write rw- 110
7 Read+write+Execute rwx 111
Т.е.,когда вы видите к примеру "три топора" 777,это значит,что владелец,группа владельцев и остальные имеют полные права на чтение,запись и выполнеие.
В символьном отображении это будет выглядеть так: rwxrwxrwx (видим,что всё разбито на 3 блока в каждом из которых назначны такие права rwx)
Если бы мы захотели не рисковать и для остальных отменили бы все права,то мы бы сделали так :770 или rwxrwx---
Или ,допустим,у меня есть в системе юзер Vertigo,который входит в одноимённую группу Vertigo,но не входит в группу Root,а является владельцем какого-то файла.
Мне это не нравится что он там чудит в системе и я хочу ему запретить выполнение файлов,оставить чтение и запись,запретить выполнение файлов для его группы.
А для остальных разрешить только чтение.
Тогда я делаю так:664 или rw-rw-r--
Для назначения прав используется команда chmod
Код:
# chmod 750 file - полные права владельцу,права на чтение и запись группе и никаких прав остальным.
# chmod u+w file - дать право записи владельцу.
# chmod ugo-x file - отобрать у всех права на выполнение файла.
# chmod u+x - вернуть владельцу право на выполнение.
Плюс (+) и минус(-) в командах разрешают права и отбирают их соответственно.
Знак равенства (=) оставляет только данное право,например:
# chmod g=rx -позволяет группе читать и выполнять файл,но ничего не записывать в него.
Есть ещё редко применяемый класс a (all— все),который касается всех других классов: u, g и o.
# chmod a-rwx file - отобрать у всех пользователей все права на файл.
Отдельно стоит обратить внимание на право выполнения файла,находящегося внутри директории.
Это право должно быть установлено на саму директорию.
Теперь пора рассмотреть маски создания файлов и директорий.
umask - маска создания файлов и директорий.
suid (значение 4)- бит запуска от имени владельца.
sgid (значение 2)- бит запуска от имени групп владельцев.
sticky (значение 1)-бит защиты содержимого директории.
Это применяется при создании новых директорий и объектов.
Рассчитывается математическим действием вычитания из максимальных прав (777) для директории и файла (666).
К примеру umask 022 будет означать,что все директории создадутся с правами 755 (777-22=755)
А umask 754 -значит,что все директории будут создаваться с разрешением 023 (777-754=023)
Значение 022 (755)- это значение по-умолчанию во всех Debian-подобных системах.
Убедиться в этом можно командой:
Код:
# grep UMASK /etc/login.defs
Мы можем для пользователя временно устанавливать такие значения и затем создавать файлы.
Всё это будет действовать до перезагрузки системы,а если требуется глобальное изменение ,то значение меняем в файле login.defs
Также ,в целях защиты в Linux по-умолчанию не устанавливается право выполнения на файлы,а только на директории.
Вернёмся к специальным битам,которые применяются толкьо для исполняемых файлов (никаких текстовых и т.п.):
suid - устанавливается для файлов
sgid - для файлов и директорий
sticky - для директорий.
Примеры :4755- видим 4 в начале,значит установлен suid -бит
3764- sticky и sgid биты (1+2)
6750-suid и sgid (4+2)
В случае работы с umask,задействуются бинарные значения.
И при рассчёте мы не отнимаем математически числа,а сбрасываем их бинарно.
Число 1-сбросить,а число 0-не сбрасывать.
Пример: у нас есть права 666,в бинарном значении согласно таблице это будет 110110110
А нам нужно ,допустим,установить маску 075,для которой бинарное значение 000111101
Помним,что 0-оставить без изменения,а 1-сбрасывает до 0,подставляем для удобства бинарное значение маски ниже бин.знач.прав 666:
Код:
110110110
000111101
110000010-получаем права 602 в итоге.
Важно помнить о таком моменте,что допустим мы даём право доступа конкретному юзеру и группе.
А у нас есть ещё один юзер,который не входит в разрешённую группу и он не сможет запустить файл.
Мы даём ему это право и юзер может получить облом,т.к.есть случаи,когда файл должен быть запущен только с правами и от имени владельца,кот.его создал.
Установив специальный бит # chmod u+s script,можно увидеть,что файл script изменил цвет на красный.
Это предупреждение оболочки,что опасно устанавливать спец.биты на файлы ,будучи неуверенными в своих действиях.
В правах вместо x (выполнение),мы теперь увидим букву s (что указывает на установленный спец.suid-бит: rwsrwx---
И файл теперь кто бы его не запускал будет выполняться от имени владельца.
Отобрать такое право:# chmod u-s script
На директории мы можем устанавливать групповой (sgid) и sticky -бит.
При этом,для вложенных в директорию файлов будут меняться владельцы на группу владельцев данной директории.
Как вариант наследования.
# chmod g+s Директория
Sticky бит применяется для защиты директории и к примеру удаление её содержимого сможет провести только root и владелец.
Примеры установки спец.битов:
Код:
# chmod u+s file или # chmod 2666 file
# chmod g+s file или # chmod 4755 file
Для обоих битов:
# chmod ug+s file или # chmod 6750 file
# chmod o+t директория или # chmod 1750 Директория
# chmod go+t Директория или # chmod 3750 Директория
Для удаления битов в команде chmod 0(пишем 0) в начале или 1 чтобы оставить только sticky-бит.
Также ,можно просто вычитать биты :
Код:
У группы или юзера
# chmod g-s и # chmod u-s
Sticky-бит удаляется вычитанием класса othes # chmod o-t
Спасибо за внимание,надеюсь вопросов о раздаче прав в Linux будет меньше.
Остальное относится не к правам,а ограничениям ,лимитированию и затрагивает процесс уже администрирования.