Я никогда не понимал, как chmod
работал до сегодняшнего дня. Я следовал учебнику, который объяснил мне многое.
Например, я прочитал, что у вас есть три разные группы разрешений:
- владелец (
u
) - группа (
g
) - каждый (
o
)
Основываясь на этих трех группах, я теперь знаю, что:
- Если файл принадлежит пользователю, права доступа определяют его права доступа.
- Если группа файла совпадает с группой пользователя, разрешение группы определяет доступ.
- Если пользователь не является владельцем файла и не входит в группу, используется другое разрешение.
Я также узнал, что у вас есть следующие разрешения:
- читать (
r
) - написать (
w
) - выполнить (
x
)
Я создал каталог, чтобы проверить мои новые знания:
mkdir test
Затем я сделал несколько тестов:
chmod u+rwx test/
# drwx------
chmod g+rx test/
# drwxr-x---
chmod u-x test/
# drw-r-x---
Поработав некоторое время, я думаю, что я наконец понял, chmod
как вы устанавливаете разрешение с помощью этой команды.
Но...
У меня еще есть несколько вопросов:
- Что означает
d
в начале? - Как называется и как используется содержащий слот и какие другие значения он может содержать?
- Как я могу установить и сбросить это?
- Какова ценность для этого
d
? (Поскольку у вас есть только 7 = 4 + 2 + 1 7 = 4 + 2 + 1 7 = 4 + 2 + 1) - Почему люди иногда используют
0777
вместо того,777
чтобы устанавливать свои разрешения?
Но так как мне не следует задавать несколько вопросов, я постараюсь задать это в одном вопросе.
В системе на основе UNIX, такой как все дистрибутивы Linux, относительно разрешений, что означает первая часть ( d
) и как используется эта часть разрешений?
источник
S_IFDIR
. Вы не используете его при настройке режима файла, ноstat()
функция фактически возвращает значение 040750 дляdrwxr-x---
.Ответы:
Я отвечу на ваши вопросы в трех частях: типы файлов, разрешения и варианты использования для различных форм
chmod
.Типы файлов
Первый символ в
ls -l
выводе представляет тип файла;d
означает, что это каталог. Его нельзя установить или отключить, это зависит от того, как был создан файл. Вы можете найти полный список типов файлов в документации по ls ; те, кого вы можете встретить-
: «Обычный» файл, созданный любой программой, которая может записать файлb
: блокировать специальный файл, как правило, дисковые устройства или устройства с разделами, можно создать с помощьюmknod
c
: символьный специальный файл, также может быть создан с помощьюmknod
(см./dev
примеры)d
: каталог, может быть создан сmkdir
l
: символическая ссылка, может быть создана сln -s
p
: именованная труба, может быть создана сmkfifo
s
: сокет, может быть создан сnc -U
D
: door , созданная некоторыми серверными процессами в Solaris / openindiana.права доступа
chmod 0777
используется для установки всех разрешений в одномchmod
исполнении, а не для объединения измененийu+
и т. д. Каждая из четырех цифр представляет собой восьмеричное значение, представляющее набор разрешений:suid
,sgid
И «липкие» (см ниже)Восьмеричное значение рассчитывается как сумма разрешений:
Для первой цифры:
suid
4; бинарные файлы с установленным битом запускаются от имени их владельца (обычноroot
)sgid
2; бинарные файлы с этим набором битов запускаются в качестве группы их владельцев (это использовалось для игр, поэтому можно делиться высокими результатами, но это часто представляет угрозу безопасности в сочетании с уязвимостями в играх), а файлы, созданные в каталогах с этим набором битов, принадлежат группа владельцев каталога по умолчанию (это удобно для создания общих папок)root
(см./tmp
общий пример этого).Смотрите на
chmod
страницу руководства для деталей. Обратите внимание, что во всем этом я игнорирую другие функции безопасности, которые могут изменять права пользователей на файлы (SELinux, файловые ACL ...).Специальные биты обрабатываются по-разному в зависимости от типа файла (обычный файл или каталог) и базовой системы. (Это упомянуто на
chmod
man-странице.) В системе, которую я использовал для тестирования (сcoreutils
8.23 наext4
файловой системе, работающей под ядром Linux 3.16.7-ckt2), поведение выглядит следующим образом. Для файла специальные биты всегда очищаются, если явно не установлено, чтоchmod 0777
эквивалентноchmod 777
, и обе команды очищают специальные биты и дают всем полные права доступа к файлу. Для каталога специальные биты никогда полностью не очищаются с использованием четырехзначной числовой формы, поэтому фактическиchmod 0777
эквивалентенchmod 777
но это вводит в заблуждение, поскольку некоторые специальные биты останутся как есть. (В предыдущей версии этого ответа это неправильно.) Чтобы очистить специальные биты в каталогах, которые вы должны использоватьu-s
,g-s
и / илиo-t
явно, или указать отрицательное числовое значение,chmod -7000
то есть очистите все специальные биты в каталоге.В
ls -l
выходеsuid
,sgid
и «липкие» появляются в местеx
входа:suid
этоs
илиS
вместо пользователяx
,sgid
являетсяs
илиS
вместо группы - хx
, и «липкий» являетсяt
илиT
вместо другихx
. Строчная буква означает, что установлены как специальный бит, так и исполняемый бит; заглавная буква означает, что установлен только специальный бит.Различные формы CHMOD
Из-за поведения, описанного выше, использование полных четырех цифр
chmod
может ввести в заблуждение (по крайней мере, оказалось, что я запутался). Это полезно, когда вы хотите установить специальные биты, а также биты прав доступа; в противном случае биты очищаются, если вы манипулируете файлом, сохраняются, если вы манипулируете каталогом. Так чтоchmod 2750
гарантирует, что вы получите по крайней мереsgid
и точноu=rwx,g=rx,o=
; ноchmod 0750
не обязательно очищать специальные биты.Использование числовых режимов вместо текстовых команд (
[ugo][=+-][rwxXst]
), вероятно, является скорее привычкой и целью команды. Когда вы привыкли использовать числовые режимы, часто проще просто указать полный режим таким образом; и полезно иметь возможность думать о разрешениях, используя числовые режимы, так как многие другие команды могут использовать их (install
,mknod
...).Некоторые текстовые варианты могут пригодиться: если вы просто хотите убедиться, что файл может быть выполнен кем-либо, это
chmod a+x
будет сделано независимо от того, какие есть другие разрешения. Аналогичным образом,+X
добавляет разрешение на выполнение, только если одно из разрешений на выполнение уже установлено или файл является каталогом; это может быть удобно для восстановления разрешений в глобальном масштабе без необходимости обращаться к специальным файлам v. каталогам. Таким образом,chmod -R ug=rX,u+w,o=
это эквивалентно применениюchmod -R 750
ко всем каталогам и исполняемым файлам иchmod -R 640
ко всем другим файлам.источник
sgid
бит был установлен всегда, независимо от его фактического значения. Во FreeBSDsuid
бит может быть сконфигурирован для работы аналогичноsgid
(то есть файлы и подкаталоги, созданные внутри, будут иметь того же владельца, что и каталог), при условии, что базовая файловая система это поддерживает и монтируется сsuiddir
опцией.+X
добавляет разрешение на выполнение только в том случае, если одно из разрешений на выполнение уже установлено или файл является каталогом» спасибо @ stephen-kitt, отсутствует документация «уже установлено», которая действительно заставила меня задуматься !Итак, разрешения в Linux очень важны. Я постараюсь сделать краткое объяснение.
Для кусков файлового режима
Каждый файл Unix имеет набор разрешений, которые определяют, можете ли вы читать, записывать или запускать файл. Запуск ls -l отображает права доступа. Вот пример такого дисплея:
Я прикрепляю изображение кусочков файлового режима:
Типа может быть другая вещь. Например:
Если вы хотите установить некоторые разрешения для всех каталогов, вы можете использовать атрибут R, например:
Для chmod 777 против 0777
Команда
chmod
обычно ожидает, что ввод будет восьмеричным числом, начальный ноль относится к значению триплета битов sticky / sgid / suid. Однако в Си это будет иметь значение, поскольку777
будет переведено в01411
(восьмеричное), таким образом, установив бит закрепления (см.chmod(2)
Страницу руководства ), разрешения на чтение для владельца и исполняемый бит для группы и других (что является довольно странной комбинацией) ,РЕДАКТИРОВАТЬ 1
Я нашел другую картину о разрешениях Linux и приложу, чтобы понять проще:
источник
chmod(777)
фактически будет эквивалент выполненияchmod 1411
(т. е.chmod
команда с аргументом1411
).0x1FF
двоичный:0b111111111
или восьмеричное:0o777
. PYTHON POWERd
означает, что это каталог, если у вас есть файл,-
и если это ссылка, вы найдетеl
. Это не может быть установлено / не установлено.Если вы используете 0777 в качестве разрешений, вы даете полный контроль (чтение + запись + выполнение) каждому пользователю / группе системы. Это ленивый способ решения проблем, когда у вас есть пользователи / группы, которые не имеют доступа к каталогам / файлам.
Например, если вы перечислите содержимое каталога и получите это:
-rw-r--r-- 1 root root 42596 jun 7 2012 preloadable_libintl.so
preloadable_libintl.so - файл, принадлежащий пользователю root и группе root. Владелец имеет чтение и запись, то группа имеет только доступ для чтения и любой другой пользователь имеет доступ на чтение. Это можно перевести как 644.
Если я изменю его на 777, он будет выглядеть так:
-rwxrwxrwx 1 root root 42596 jun 7 2012 preloadable_libintl.so
источник
Получив ответ на мой вопрос и проведя некоторое исследование результатов, я нашел статью, в которой все очень хорошо объясняется. Я хотел бы поделиться некоторыми частями этой статьи здесь для будущих ссылок.
Разрешения на просмотр
Чтобы
chmod
изменить права доступа к файлу или каталогу, вам сначала необходимо узнать, какой режим доступа используется в данный момент. Вы можете просмотреть содержимое каталога в терминале поcd
этому каталогу, а затем использовать:-l
Переключатель имеет важное значение , потому что использованиеls
без него будет отображать только имена файлов или папок в каталоге.Ниже приведен пример использования
ls -l
в моем домашнем каталоге:Что означают столбцы
Первый столбец - это тип каждого файла:
-
обозначает нормальный файл.d
обозначает каталог, то есть папку, содержащую другие файлы или папки.p
обозначает именованный канал (он же FIFO).l
обозначает символическую ссылку.Буквы после этого обозначают права доступа, этот первый столбец - то, что нас больше всего интересует. Второй - сколько ссылок в файле, мы можем смело игнорировать его. Третий столбец имеет два значения / имени: Первый (в моем примере 'peter') - это имя пользователя, которому принадлежит файл. Второе значение (в данном примере «пользователи») - это группа, к которой принадлежит владелец (Подробнее о группах).
Следующий столбец - это размер файла или каталога в байтах и информация, после которой указаны даты и время последнего изменения файла или каталога, и, конечно же, имя файла или каталога.
Что означают разрешения
Первые три буквы, после первой
-
илиd
, - это разрешения, которые есть у владельца. Следующие три буквы - это разрешения, которые применяются к группе. Последние три буквы - это разрешения, которые применяются ко всем остальным.Каждый набор из трех букв состоит из
r
w
иx
.r
всегда в первой позиции,w
всегда во второй позиции иx
всегда в третьей позиции.r
это разрешение на чтение, это разрешениеw
на запись и разрешениеx
на выполнение. Если-
вместо одной из этих букв есть дефис ( ), это означает, что разрешение не предоставлено, а если письмо присутствует, оно предоставляется.Папки
В случае папок биты режима можно интерпретировать следующим образом:
r
(чтение) означает способность читать оглавление данного каталога,w
(запись) означает возможность записи оглавления данного каталога (создание новых файлов, папок; переименование, удаление существующих файлов, папок) тогда и только тогда, когда установлен бит выполнения. В противном случае это разрешение не имеет смысла.x
(выполнить) означает возможность войти в данный каталог с помощью команды cd и получить доступ к файлам, папкам в этом каталоге.Изменение прав доступа с помощью команды chmod
chmod
это команда в Linux и других Unix-подобных операционных системах. Это позволяет вам изменять права доступа (или режим доступа) к файлу или каталогу.Вы можете изменить разрешения двумя различными способами: - на основе текста - на основе
chmod
номераchmod
Текстовый метод
Чтобы изменить права доступа или режим доступа к файлу, мы используем команду chmod в терминале. Ниже приведена общая структура команды:
Где Кто-нибудь из ряда букв, и каждое означает, кому вы собираетесь дать разрешение. Они заключаются в следующем:
Права доступа являются такими же , как уже обсуждалось (
r
,w
иx
).Команда chmod позволяет нам добавлять и вычитать разрешения из существующего набора, используя + или - вместо =. Это отличается от приведенных выше команд, которые, по сути, переписывают разрешения (т. Е. Для изменения разрешения с
r--
наrw-
, вам все равно нужно включить в команду,r
а такжеw
после нее . Если вы пропустили это , оно отнимает разрешение как они переписываются с помощью =. Использование + и - избегайте этого, добавляя или убирая из текущего набора разрешений).=
chmod
r
r
Числовой метод
chmod
Также можно установить разрешения, используя цифры.Использование чисел - это еще один метод, который позволяет редактировать разрешения для всех трех владельцев, групп и других пользователей одновременно. Эта базовая структура кода такова:
Где xxx - это трехзначное число, где каждая цифра может быть от 1 до 7. Первая цифра относится к разрешениям для владельца, вторая цифра относится к разрешениям для группы, а третья цифра применяется к разрешениям для всех остальных.
В этой числовой записи значения r, w и x имеют свои собственные числовые значения:
Чтобы придумать трехзначное число, вам нужно подумать, какие разрешения вы хотите иметь у владельца, группы и пользователя, а затем суммировать их значения. Например, скажем, я хотел предоставить владельцу каталога права на чтение и запись и выполнение, а я хотел, чтобы у группы и всех остальных были только права на чтение и выполнение. Я бы придумал числовые значения примерно так:
Это эквивалентно использованию следующего:
Для большинства папок / каталогов установлено значение 755, чтобы разрешить чтение и запись и выполнение владельцу, но запретить запись для всех остальных, а файлы обычно 644, чтобы разрешить чтение и запись для владельца, но только чтение для всех остальных, обратитесь к последнему обратите внимание на отсутствие разрешений x для неисполняемых файлов - здесь то же самое.
источник
Для д вопросов
Это говорит вам тип файла Unix. По умолчанию Unix имеет только 3 типа файлов. Они есть:
-
- обычный файлd
- Каталог файловb
- заблокировать файлc
- файл символьного устройстваp
- Файл именованного канала или просто файл каналаl
- Символическая ссылкаs
- файл сокетаПодробнее здесь: Типы файлов в Linux / Unix подробно описаны
0777
против777
Липкий бит указан или нет. Когда установлен липкий бит каталога, файловая система обрабатывает файлы в таких каталогах особым образом, так что только владелец файла, владелец каталога или пользователь root могут переименовывать или удалять файл. Без установленного фиксированного бита любой пользователь с разрешениями на запись и выполнение для каталога может переименовывать или удалять содержащиеся в нем файлы независимо от владельца файла.
0777
устанавливает права доступа к файлу 777, а бит закрепления равен 0 - специальных режимов нет.777
устанавливает права доступа к файлу 777, не изменяя прилипший бит.Читать подробнее: sticky bit и chmod
источник
chmod 777
, не очищает setuid, setgid и липкие биты? Попробуй.