• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Права на новые каталоги и файлы

Sproot

Green Team
12.08.2017
188
90
BIT
1
Казалось бы давно сижу на линуксах, но как то мало пользуюсь командами, только некоторые часто использую.
Вот столкнулся с такой проблемой :
есть каталог к примеру /catalog и у него установлены права и чтение и запись для всех пользователей, но вот те каталоги и файлы внутри этих каталогов которые создаются новые имеют совершенно другие права и приходится постоянно после добавления присваивать им нужные права.
Как присвоить новым файлам те права которые мне надо?
 
Если в Windows может быть 1 владелец файлов или объектов,то в Linux совершенно всё иначе.
Т.е.,для любого объекта существуют все пользователи в системе.
Каждый объект может иметь своего владельца или группу владельцев.

Задав простую команду # ls -l,можно увидеть директории и файлы с владельцами,группами и разрешениями.
Командами chown и chgrp,мы можем изменить владельца и группу соответственно.

К примеру, есть некий файл file.txt и два юзера, помимо root в системе.
Чтобы сменить владельца с Sergey на Vertigo:
Код:
# chown Vertigo file.txt
И поменяем ему группу с Sergey (какую угодно) на Vertigo:
Код:
# chgrp Vertigo file.txt
Также можно изменить группу и командой chown,но она по-умолчанию ищет владельца когда что-то печатается после этой команды,
поэтому смена группы происходит только таким образом при использовании данной команды:
Код:
# chown:Vertigo file.txt
Тонкость в том,что когда в 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 будет меньше.
Остальное относится не к правам,а ограничениям ,лимитированию и затрагивает процесс уже администрирования.
 
Последнее редактирование:
Казалось бы давно сижу на линуксах, но как то мало пользуюсь командами, только некоторые часто использую.
Вот столкнулся с такой проблемой :
есть каталог к примеру /catalog и у него установлены права и чтение и запись для всех пользователей, но вот те каталоги и файлы внутри этих каталогов которые создаются новые имеют совершенно другие права и приходится постоянно после добавления присваивать им нужные права.
Как присвоить новым файлам те права которые мне надо?
пока уважаемый коллега @Vertigo пишет мануал, можете воспользоваться таким вариантом: # chmod u+s /catalog устанавливает права юзера\владельца на все вновь созданные в каталоге файлы. а команда # chmod g+s /catalog устанавливает права группы, которой принадлежит каталог, на все создаваемые в каталоге файлы. т.е эти команды автоматом присваивают новым файлам в каталоге права владельца каталога, независимо от чьего имени они туда вносятся.
 
Последнее редактирование:
  • Нравится
Реакции: Vertigo
пока уважаемый коллега @Vertigo пишет мануал, можете воспользоваться таким вариантом: # chmod u+s /catalog устанавливает права юзера\владельца на все вновь созданные в каталоге файлы. а команда # cmod g+s /catalog устанавливает права группы, которой принадлежит каталог, на все создаваемые в каталоге файлы. т.е эти команды автоматом присваивают новым файлам в каталоге права владельца каталога, независимо от чьего имени они туда вносятся.

Уважаемые мануальные терапевты @Vertigo & @Глюк, здравы будьте!
В Linux(ах) не силен, просто прикрепляю вложение. Удачи во всех делах и начинаниях!
 

Вложения

Последнее редактирование:
  • Нравится
Реакции: Vertigo, Vander и z3RoTooL
пока уважаемый коллега @Vertigo пишет мануал, можете воспользоваться таким вариантом: # chmod u+s /catalog устанавливает права юзера\владельца на все вновь созданные в каталоге файлы. а команда # cmod g+s /catalog устанавливает права группы, которой принадлежит каталог, на все создаваемые в каталоге файлы. т.е эти команды автоматом присваивают новым файлам в каталоге права владельца каталога, независимо от чьего имени они туда вносятся.
благодарность огромная за ответ
но что то не сростается
видимо потому что не совсем "раскрыл карты" )
короче есть каталог media (это в django) в нём при добавлении материала создаётся ещё каталог в который загружаются файлы
на каталог media стоят права и на запись и на чтение а вот на файлы которые грузятся в генерируемый каталог прав почему то никаких даже на чтение нет
вот как решить это что то не въеду
 
благодарность огромная за ответ
но что то не сростается
видимо потому что не совсем "раскрыл карты" )
короче есть каталог media (это в django) в нём при добавлении материала создаётся ещё каталог в который загружаются файлы
на каталог media стоят права и на запись и на чтение а вот на файлы которые грузятся в генерируемый каталог прав почему то никаких даже на чтение нет
вот как решить это что то не въеду
действительно странно. обычно даже без suid и sgid бита создаваемые файлы получают право на запись и чтение владельца создавшего файл. может проблема в программе которая грузит файлы в сгенерированный каталог, или в самом сгенерированном каталоге? но это моё предположение только.
 
действительно странно. обычно даже без suid и sgid бита создаваемые файлы получают право на запись и чтение владельца создавшего файл. может проблема в программе которая грузит файлы в сгенерированный каталог, или в самом сгенерированном каталоге? но это моё предположение только.
а может быть как то так cmod g+s /catalog* ?
это только догадка и как то не хочется проверять на боевом сервере
 
а может быть как то так cmod g+s /catalog* ?
это только догадка и как то не хочется проверять на боевом сервере
прошу прощение за ошибку, я неверно написал команду. нужно было chmod g+s а я написал chmod g+s. исправил.
а зачем на сервере сразу? можно проверить как это работает на локальной машине. эта команда будет давать все установленные права на создаваемые в каталоге файлы и директории, что и в каталоге, независимо от того, кто создаёт файл в этом каталоге. например, если рут создаёт файл в каталоге, принадлежащем юзеру, то у создаваемого файла будут те же права, что у юзера. а без этого бита sgid права у создаваемого файла будут права как у рута.
 
прошу прощение за ошибку, я неверно написал команду. нужно было chmod g+s а я написал chmod g+s. исправил.
да то не проблема я то понял сразу опечатку
а зачем на сервере сразу? можно проверить как это работает на локальной машине.
так на локалке всё нормально , просто не стал создавать именно с такими же конфигами что и у сервера, но чувствую что всё таки надо
а без этого бита sgid права у создаваемого файла будут права как у рута.
вот тут что то не понял немного
 
И это тоже постарался затронуть и объяснить,проверьте,буду рад ,если поможет.
спасибо , статья просто отличная
но я либо плохо читал либо всё же решения моей проблемы тут нет
вообщем есть каталог media (права 777) в который при добавлении какого либо материала генерируется ещё каталог (права 755) и уже в него размещаются файлы которым надо задать хотя бы 444 . И даже странно то что бывает иногда файлы добавляются туда с нормальными правами , а иногда запрещено всё
вот задать права файлам которые загружаются в генерируемые каталоги хз как
ткните носом пожалуйста )
 
  • Нравится
Реакции: Vertigo
вообщем есть каталог media (права 777) в который при добавлении какого либо материала генерируется ещё каталог (права 755) и уже в него размещаются файлы которым надо задать хотя бы 444 . И даже странно то что бывает иногда файлы добавляются туда с нормальными правами , а иногда запрещено всё
вот задать права файлам которые загружаются в генерируемые каталоги хз как
Вам надо проверить владельца как основной директории,так и поддиректорий и попробовать изменить их на своего и проверить что там за группы и добавлены ли Ваши пользователи в них.
У загружаемых файлов могут быть свои владельцы и даже требуют создания своих юзеров (такие framework есть к примеру) и идут со своими начальными правами.
Если это не поможет,тогда уже пробуйте установить специальный бит на поддиректорию,в которую закачиваются файлы,но это опасно с точки зрения безопасности.
Если там полное доверие,то со спец.битом файлы будут уже идти с правами конкретного владельца и запускаться от него же.

Пока думаю,что проблема именно с владельцами и юзерами,которые возможно не добавлены в соответствующие группы.
Пришлось подредактировать ответ,пока пришли мысли.

Поэтому , для избежания проблем когда создают нового юзера в системе,добавляют его сразу в различные группы:
Код:
useradd -m -g users -G audio,cdrom,lp,optical,power,scanner,storage,video,wheel -s /bin/bash имя_юзера
Или:
Код:
/usr/sbin/useradd --create-home --groups users,wheel,audio,cdrom,video,cdrw,usb,plugdev,games,lp,scanner,uucp имя_юзера
/bin/passwd имя_юзера
В конкретную группу добавить очень легко:
Код:
gpasswd -a имя_юзера имя_группы
 
Последнее редактирование:
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!