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

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

Sproot

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

Vertigo

Lex mea est Vulgate Linux
Gold Team
15.02.2017
1 318
3 999
BIT
3
Если в 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 будет меньше.
Остальное относится не к правам,а ограничениям ,лимитированию и затрагивает процесс уже администрирования.
 
Последнее редактирование:

Глюк

Red Team
03.01.2018
1 185
1 879
BIT
176
Казалось бы давно сижу на линуксах, но как то мало пользуюсь командами, только некоторые часто использую.
Вот столкнулся с такой проблемой :
есть каталог к примеру /catalog и у него установлены права и чтение и запись для всех пользователей, но вот те каталоги и файлы внутри этих каталогов которые создаются новые имеют совершенно другие права и приходится постоянно после добавления присваивать им нужные права.
Как присвоить новым файлам те права которые мне надо?
пока уважаемый коллега @Vertigo пишет мануал, можете воспользоваться таким вариантом: # chmod u+s /catalog устанавливает права юзера\владельца на все вновь созданные в каталоге файлы. а команда # chmod g+s /catalog устанавливает права группы, которой принадлежит каталог, на все создаваемые в каталоге файлы. т.е эти команды автоматом присваивают новым файлам в каталоге права владельца каталога, независимо от чьего имени они туда вносятся.
 
Последнее редактирование:
  • Нравится
Реакции: Vertigo

SearcherSlava

Red Team
10.06.2017
943
1 261
BIT
206
пока уважаемый коллега @Vertigo пишет мануал, можете воспользоваться таким вариантом: # chmod u+s /catalog устанавливает права юзера\владельца на все вновь созданные в каталоге файлы. а команда # cmod g+s /catalog устанавливает права группы, которой принадлежит каталог, на все создаваемые в каталоге файлы. т.е эти команды автоматом присваивают новым файлам в каталоге права владельца каталога, независимо от чьего имени они туда вносятся.

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

Вложения

  • Стих o Linux.pdf
    249,2 КБ · Просмотры: 203
Последнее редактирование:
  • Нравится
Реакции: Vertigo, Vander и z3RoTooL

Sproot

Green Team
12.08.2017
188
90
BIT
1
пока уважаемый коллега @Vertigo пишет мануал, можете воспользоваться таким вариантом: # chmod u+s /catalog устанавливает права юзера\владельца на все вновь созданные в каталоге файлы. а команда # cmod g+s /catalog устанавливает права группы, которой принадлежит каталог, на все создаваемые в каталоге файлы. т.е эти команды автоматом присваивают новым файлам в каталоге права владельца каталога, независимо от чьего имени они туда вносятся.
благодарность огромная за ответ
но что то не сростается
видимо потому что не совсем "раскрыл карты" )
короче есть каталог media (это в django) в нём при добавлении материала создаётся ещё каталог в который загружаются файлы
на каталог media стоят права и на запись и на чтение а вот на файлы которые грузятся в генерируемый каталог прав почему то никаких даже на чтение нет
вот как решить это что то не въеду
 

Глюк

Red Team
03.01.2018
1 185
1 879
BIT
176
благодарность огромная за ответ
но что то не сростается
видимо потому что не совсем "раскрыл карты" )
короче есть каталог media (это в django) в нём при добавлении материала создаётся ещё каталог в который загружаются файлы
на каталог media стоят права и на запись и на чтение а вот на файлы которые грузятся в генерируемый каталог прав почему то никаких даже на чтение нет
вот как решить это что то не въеду
действительно странно. обычно даже без suid и sgid бита создаваемые файлы получают право на запись и чтение владельца создавшего файл. может проблема в программе которая грузит файлы в сгенерированный каталог, или в самом сгенерированном каталоге? но это моё предположение только.
 

Sproot

Green Team
12.08.2017
188
90
BIT
1
действительно странно. обычно даже без suid и sgid бита создаваемые файлы получают право на запись и чтение владельца создавшего файл. может проблема в программе которая грузит файлы в сгенерированный каталог, или в самом сгенерированном каталоге? но это моё предположение только.
а может быть как то так cmod g+s /catalog* ?
это только догадка и как то не хочется проверять на боевом сервере
 

Глюк

Red Team
03.01.2018
1 185
1 879
BIT
176
а может быть как то так cmod g+s /catalog* ?
это только догадка и как то не хочется проверять на боевом сервере
прошу прощение за ошибку, я неверно написал команду. нужно было chmod g+s а я написал chmod g+s. исправил.
а зачем на сервере сразу? можно проверить как это работает на локальной машине. эта команда будет давать все установленные права на создаваемые в каталоге файлы и директории, что и в каталоге, независимо от того, кто создаёт файл в этом каталоге. например, если рут создаёт файл в каталоге, принадлежащем юзеру, то у создаваемого файла будут те же права, что у юзера. а без этого бита sgid права у создаваемого файла будут права как у рута.
 

Sproot

Green Team
12.08.2017
188
90
BIT
1
прошу прощение за ошибку, я неверно написал команду. нужно было chmod g+s а я написал chmod g+s. исправил.
да то не проблема я то понял сразу опечатку
а зачем на сервере сразу? можно проверить как это работает на локальной машине.
так на локалке всё нормально , просто не стал создавать именно с такими же конфигами что и у сервера, но чувствую что всё таки надо
а без этого бита sgid права у создаваемого файла будут права как у рута.
вот тут что то не понял немного
 

Sproot

Green Team
12.08.2017
188
90
BIT
1
И это тоже постарался затронуть и объяснить,проверьте,буду рад ,если поможет.
спасибо , статья просто отличная
но я либо плохо читал либо всё же решения моей проблемы тут нет
вообщем есть каталог media (права 777) в который при добавлении какого либо материала генерируется ещё каталог (права 755) и уже в него размещаются файлы которым надо задать хотя бы 444 . И даже странно то что бывает иногда файлы добавляются туда с нормальными правами , а иногда запрещено всё
вот задать права файлам которые загружаются в генерируемые каталоги хз как
ткните носом пожалуйста )
 
  • Нравится
Реакции: Vertigo

Vertigo

Lex mea est Vulgate Linux
Gold Team
15.02.2017
1 318
3 999
BIT
3
вообщем есть каталог 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 имя_юзера имя_группы
 
Последнее редактирование:
Мы в соцсетях:

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