- Как изменить Права Доступа в Linux
- Введение
- Что вам понадобится
- Шаг 1 – Как изменить права доступа в Linux через командную строку
- Шаг 2 – Изменение владельца файла или папки через командную строку
- Шаг 3 – Использование дополнительных опций с командами chmod и chown
- Заключение
- Как изменить права только к файлам/каталогам?
Как изменить Права Доступа в Linux
Введение
В этом руководстве вы научитесь изменять права доступа в Linux / Unix и устанавливать нового владельца файла/папки через командную строку. Существует 2 базовые команды, которые могут быть использованы для данных целей: chmod и chown.
Прокачайте ваш Linux сервер, воспользовавшись скидками на VPS-хостинг в Hostinger!
Что вам понадобится
Перед тем, как вы начнете это руководство, вам понадобится следующее:
- Доступ к командной строке
Шаг 1 – Как изменить права доступа в Linux через командную строку
chmod – эта команда используется для изменения прав доступа к файлу или папке. Каждый файл имеет типы пользователей, которые могут с ним взаимодействовать:
Тип | Объяснение |
---|---|
Владелец (owner) | Пользователь, создавший и владеющий данным файлом или папкой. |
Группа (group) | Все пользователи, члены одной группы. |
Другие (other) | Все другие пользователи в системе, не являющиеся ни владельцами, ни членами группы. |
Команда ls -l, может быть использована для отображения прав доступа и владельца. К примеру, команда ls -l file1.txt отобразит:
-rwxr–rw- 1 user user 0 Jan 19 12:59 file1.txt
- “-rwxr–rw-“ – эта часть строки показывает права доступа. Здесь 4 главные буквы на которые вам надо обратить внимание: r,w,x,d. d означает, что тип файла — это каталог. В нашем примере, такой буквы нет (она стояла бы первой в строке), здесь вместо нее стоит символ “-“ (который в основном означает “нет”). Буква x означает разрешение на выполнение файла или папки (это разрешение необходимо для входа в папку). Буква w означает разрешение на запись файла или папки (редактирование, удаление и т.д.) И наконец последняя буква r, которая означает чтение. Если у вас есть права на чтение файла, вы можете прочесть содержимое файла, но не сможете предпринять другие действия (к примеру, вы можете прочитать код скрипта, но не сможете выполнить его).
- 1 – число хард связи. Проще говоря, хард связь это дополнительное имя для существующего файла.
- user user – это значение показывает владельца файла и его группу.
- 0 – это значение показывает размер файла.
- Jan 19 12:59 – отображает дату последнего изменения.
- file1.txt – предоставляет имя файла или папки.
Хорошо, теперь давайте вернемся к команде chmod. Это команда позволяет нам изменить права доступа к файлу или папке. Мы научим вас, как это сделать просто складывая номера. Каждое из прав доступа имеет свой собственный номер:
- r (чтение) – 4
- w (запись) – 2
- x (выполнение) – 1
К примеру, если мы хотим изменить права доступа к файлу file1.txt на эти:
-rwxr–rw- 1 user user 0 Jan 19 12:59 file1.txt
Мы должны написать следующую команду:
Каждый номер в этой команде представляет собой права для одного из типов пользователей (владелец, группа и другие). Первый номер 7. Теперь, используя объяснение числовых значений выше, единственный вариант для получения числа 7 — сложение чисел 4, 2 и 1, получаем 4+2+1=7. Проще говоря, это означает ВСЕ права доступа (чтение, запись, выполнение — rwx). Первый номер устанавливает права доступа для владельца файла. Второй номер 4, который означает права доступа -r (чтение), устанавливает права доступа для группы владельца. Третий номер 6, используя тот же способ, что и с первым номером, 4+2=6, дает группе другие, права на чтение (4) и запись (2) файла. Третья часть в команде (file1.txt) – это имя файла для которого мы изменяем права доступа.
Еще один пример:
эта команда даст все права для каждого типа пользователей (владелец, группа и другие).
Вот список самых наиболее распространённых прав доступа для файлов:
Значение | Цифровое значение | Объяснение |
---|---|---|
-rw——- | 600 | Владелец может читать и записывать файл. |
-rw-r–r– | 644 | Владелец может читать и записывать файл, группа и другие могут только читать. |
-rw-rw-rw- | 666 | Владелец, группа и другие могут читать и записывать. |
-rwx—— | 700 | Владелец может читать, записывать и выполнять, группа и другие не имеют никаких прав доступа. |
-rwx–x–x | 711 | Владелец может читать, записывать и выполнять, группа и другие могут только выполнять. |
-rwxr-xr-x | 755 | Владелец может читать, записывать и выполнять, группа и другие могут читать и выполнять. |
-rwxrwxrwx | 777 | Все типы пользователей могут читать, записывать и выполнять. |
Наиболее распространенные права доступа для каталогов:
Значение | Цифровое значение | Объяснение |
---|---|---|
drwx—— | 700 | Только владелец может читать и записывать в этом каталоге. |
drwxr-xr-x | 755 | Владелец, группа и другие могут читать каталог, но только владелец может изменять содержимое. |
Существуют и другие способы изменения прав доступа в Linux, используя команду chmod. Но нашей персональной рекомендацией станет, изучение одной из этих команд и её использование (в этом случае способ с номерами). Если вы хотите узнать больше о других путях изменения прав доступа, вы можете прочитать об этом здесь.
Шаг 2 – Изменение владельца файла или папки через командную строку
chown – команда используется для смены владельца файла или папки. Самый стандартный синтаксис для этой команды:
К примеру, если у нас есть файл “demo.txt” и мы хотим изменить владельца на “jerry” и группу владельца на “clients”, нам необходима эта команда:
Как вы видите, мы отделили владельца и группу владельца символом “:” (двоеточие). Если мы хотим поменять только владельца файла, используем этот код:
Мы просто убрали группу владельца и вписали нового владельца файла, в таком случае группа владельца останется без изменений.
Другой схожий пример, если мы хотим поменять только группу владельца:
В этом случае, группа владельца изменится на clients (владелец останется прежним).
Шаг 3 – Использование дополнительных опций с командами chmod и chown
Одна из основных опций работающая с обеими командами это -R, которая означает рекурсивный. Эта опция позволяет вам менять права доступа и владельца файла, заданной папки и ВСЕХ других файлов внутри нее.
ВАЖНО! Будьте очень осторожны с этой опцией, если вы используете ее неправильно, вы можете изменить права доступа и владельца ВСЕХ файлов в вашей системе, что приведет к ошибкам в работе и трате огромного количества времени на откат изменений.
- “-f” – тихая или силовая опция. При использовании данной опции скроет большинство сообщений об ошибках.
- “-v” – делает диагностику каждого файла затронутого командой.
- “-c” – схожа с опцией -v, но предоставляет информацию только в случае реальных изменений.
Заключение
В этом руководстве вы научились, как изменить права доступа Linux и узнали команды для смены владельца папки или файла. Знание данных команд поможет вам в более удобном управлении вашим сервером. Если вы хотите продолжить изучение по данной теме, проверьте эти руководства:
Источник
Как изменить права только к файлам/каталогам?
Нужно задать права 755 только для каталогов и отдельно права 644 только для файлов. Как это сделать с помощью chmod?
find -type d -exec chmod 755 <> \; find -type f -exec chmod 644 <> \;
Мне в последнее время больше нравится так:
find . |xargs chmod .
Да, xargs как-то изящнее, но менее гибко.
Спасибо, а зачем симмвол «<>»?
Не проще ли find -type d -exec chmod 755 \*
На место «<>» — подставляется имя файла, кавычки нужны для экранирования символов-разделителей вроде пробела.
Не проще ли find -type d -exec chmod 755 \*
У меня такой вариант не работает, поэтому не понял.
Зато портабельнее — своими глазами видел find без exec-а! Честное слово видел! (Аж челюсть выпала — оно-ж даже на 386bsd было. )
man xargs
догадаешься почему — получишь печеньку
Когда мало файлов xargs быстрее, так как для каждого файла не вызывается chmod, это хотите сказать?
а ещё символ ‘ в имени файла
похоже, что без разницы — большой список или нет.
а ещё символ ‘ в имени файла
не распарсил что ты пытался сказать, чем меньше execve — тем быстрее; вот с xargs их намноого меньше
Ок. Полагал, что xargs выполняет команду, только прочитав весь поток целиком.
хм. ну тут кагбе не распараллелишь, ибо всё упрётся в seek-time винта
Я о другом — xargs же разбивает полученный список по группам и для каждой группы выполняет execve->chmod, а не ждёт SIGPIPE/что-то_там и выполняет chmod для всего полученного списка из 100500 файлов.
вы бы прочитали man find, а потом лезли со своими учениями
А, всё, у xargs есть соответствующие ключи -L -n, отвечающие за разбивку. Тогда xargs в любых ситуациях лучше получается.
а если пробел в имени файла, срыватель покровов?
chmod -R u=rwX,go=rX
а если пробел в имени файла, срыватель покровов?
да хоть \r — УМВР. Сам проверь.
А, всё, у xargs есть соответствующие ключи -L -n, отвечающие за разбивку. Тогда xargs в любых ситуациях лучше получается.
плюсик — это и есть xargs.
А ещё такой вариант. Допустим, на одну из директорий установлены права 0000 и find выдаст ошибку чтения каталога. Тогда и +, и | xargs варианты завершатся с ошибкой и нужно явно вызывать для каждого объекта chmod?
Век живи, век учись. Не знал об x и X
ну если я правильно распарсил документацию — да. Очевидно, что xargs -0 нужно если требуется обработать имена найденных файлов. ИМХО.
Допустим, на одну из директорий установлены права 0000 и find выдаст ошибку чтения каталога. Тогда и +, и | xargs варианты завершатся с ошибкой и нужно явно вызывать для каждого объекта chmod?
нет. Существует 3 порядка (order) обхода дерева:
1. прямой: корень, потом поддеревья/листья.
2. обратный: поддеревья, а потом корень.
3. центрированый. Применяется в бинарных деревьях — левое поддерево — корень — правое. Для ФС не применяется, приходится всё сортировать с нуля.
Так вот, по умолчанию применяется 1й обход. Возможен chmod <> (конечно, если он разрешает права). А с ключом -depth производится 2й обход, и возможно удаление (-delete, -exec rm), и chmod, который запрещает доступ (даже тому, кто обходит).
Век живи, век учись. Не знал об x и X
на практике они очень редко помогают.
Тогда и +, и | xargs варианты завершатся с ошибкой
забыл сказать — xargs НЕ меняет порядок аргументов. В отличие например от *, которая не просто выдаёт список, но его сортирует по алфавиту. По этому, в частности, xargs на больших каталогах намного быстрее, особенно в UTF-8, чем звёздочка.
на практике они очень редко помогают.
Не думаю, что случай ТС-а уникален. У самого часто такая потребность возникала после копирования с флешек c fat.
Не думаю, что случай ТС-а уникален. У самого часто такая потребность возникала после копирования с флешек c fat.
(Note: fat is not a separate filesystem, but a common part of the msdos, umsdos and vfat filesystems.)
dmask=value Set the umask applied to directories only. The default is the umask of the current process. The value is given in octal.
fmask=value Set the umask applied to regular files only. The default is the umask of the current process. The value is given in octal.
Спасибо за информацию! Полагаю, что понял всё верно.
Меня вот какой случай интересует. Независимо от порядка обхода дерева очередной элемент дерева может находится в директории, для которой установлены права 0000, но xargs/+ не выполнили для неё chmod 755.
Но без +, то есть когда в chmod передаются аргументы по одному, команда завершится без ошибок.
Итого, если не известно, есть ли права на чтение+выполнение для низлежащих директорий, я так понимаю, оптимальным вариантом будет.
Но без +, то есть когда в chmod передаются аргументы по одному, команда завершится без ошибок.
ну а что вы хотели, если получить список нельзя, по той причине, что доступ к внутренним каталогам закрыт. Очевидно, что приходится обходить каталоги, и сразу их открывать, ибо нельзя войти в закрытую дверь, а _потом_ её открыть.
Итого, если не известно, есть ли права на чтение+выполнение для низлежащих директорий, я так понимаю, оптимальным вариантом будет.
не знаю. Смотря что у вас за файлы/каталоги, и что вы с ними хотите сделать.
тогда для этого случая сферического chmod в вакууме идеологиечески правильней всего делать расово православный циклический рекурсивный find со скриптом.
По-моему, совершенно вероятна ситуация, когда пользователь снял права r или x для владельца. Кстати, зачем может быть нужна такая возможность?
Как правило число директорий много меньше числа файлов и замена ‘+’ на ‘\;’ не скажется на времени выполнения команды, зато гарантирует положительный результат.
x очень часто снимают чтобы содержимое папки не смотрели. например для хомяка. r бывает снято по ошибке или при копировании с FAT.
x очень часто снимают чтобы содержимое папки не смотрели
А чтобы u-rx для директории в каких случаях? Приходит на ум только «по ошибке».
Источник