- Sudo chmod on windows
- Использование
- Ключи
- Изменение разрешений
- Основные моменты
- Первое
- Второе
- Chmod/Chown WSL Improvements
- What is DrvFs?
- Support for Additional Metadata
- How did permissions work in the past?
- How do permissions work now?
- Important Caveats
- Special Files
- Mount Options
- Mount Options Example
- Команда chmod Linux
- Команда chmod Linux
- Примеры использования chmod
- Выводы
Sudo chmod on windows
Вообще, когда мы говорим о каталогах или файлах, нас интересует три набора прав:
- Пользовательские — касающиеся владельца файла
- Групповые — права, касающиеся участников одной группы
- Все остальные — разрешения для тех, кто не подходит к первым двум группам
Соответственно, каждый пользователь имеет своё уникальное имя и, как правило, принадлежит к одной или нескольким группам. Более того в одну группу может входить несколько пользователей.
Заметка: команда chmod в качестве одного из параметров принимает целочисленное значение, которое отвечает за набор прав. По ссылке вы найдете более подробную информацию по теме.
Я расскажу, как использовать chmod — команда, предназначенная для управления разрешениями (правами доступа) для работы с директориями и файлами.
Использование
Ключи
Команда chmod -R будет рекурсивно применена ко всем вложенным файлам и каталогам.
Изменение разрешений
Указать к кому применяется тот или иной набор прав вы можете при помощи следующих ключей:
- u — пользователь
- g — группа
- o — все остальные
Добавлять и удалять права можно следующим образом:
- + — добавит права (знак плюс)
- — — удалит права (знак минус)
Сами же права задаются вот так:
Применим все это, чтобы настроить права доступа для Apache.
Основные моменты
- Apache запущен под пользователем и группой www-data
- Корень сервера располагается по адресу /var/www
Первое
Изменим владельца корневого каталога сервера:
Добавить пользователя к группе www-data можно следующей командой:
Удалить пользователя из группы www-data можно командой:
Второе
Необходимо задать соответствующие права пользователям и группам. Сначала мы полностью закроем доступ, а потом разрешим только то, что необходимо.
Для начала закроем доступ к корневому каталогу для всех кроме его владельца, а именно — www-data . Мы используем ключ -go , чтобы изменения затронули группу и всех остальных пользователей, — означает удаление прав, а rwx означает, что мы запрещаем им читать, писать и запускать файлы из этого каталога.
Чтобы проверить какие права установлены на директорию выполните в командной строке: ls -la /var/www
Затем разрешим пользователям группы www-data и всем остальным просматривать корневой каталог. Команда работает не рекурсивно. Опять таки мы используем + , чтобы добавить права, а х отвечает за право выполнять файлы.
Теперь изменим группу, к которой принадлежит корневой каталог, применив рекурсивный вариант команды.
Сделаем очередной сброс прав, таким образом только один пользователь имеет доступ к каталогу и всем входящим в него файлам.
Теперь разрешим всем пользователям, входящим в одну группу, чтение и запись в каталоги:
На самом деле я выдаю права записи пользователям, входящим в одну группу, которую потом использую для всех, кто может изменять код на веб сервере. Делаю я это следующим образом:
Очень часто нам не требуется выполнять все эти шаги, и базовой настройки сервера вполне достаточно, но, зато на примере настройки прав для Apache мы рассмотрели возможности команды chmod .
Chmod/Chown WSL Improvements
January 12th, 2018
We’ve added new file system features to WSL in Insider Build 1706 3 . You can now set the owner and group of files using chmod/chown and modify read/write/execute permissions in WSL. You can also create special files like fifos, unix sockets, and device files. We’re introducing new mounting options with DrvFs for projecting permissions onto files alongside providing new Linux metadata on files and folders.
There’s one step you must take before you can enjoy these new features : you must unmount drvfs and remount it with the ‘metadata’ flag. To do this:
sudo umount /mnt/c sudo mount -t drvfs C: /mnt/c -o metadata
You can verify that it mounted correctly by running “mount -l” to see the output below:
What is DrvFs?
DrvFs is a filesystem plugin to WSL that was designed to support interop between WSL and the Windows filesystem. DrvFs enables WSL to mount drives with supported file systems under / mnt , such as / mnt /c, / mnt /d, etc.
You can learn more about DrvFs and the WSL filesystem in a previous blog post from June 2016, WSL File System Support , which covers the Linux filesystem as it pertains to WSL and compares it to the Windows filesystem.
Let’s take a look at the two new features in detail. A nd remember, some of the functionality discussed below already exists on the Linux filesystem side—bringing this over to the Windows side is what’s new.
Support for Additional Metadata
Linux permissions are added as additional metadata to the file. This means a file can have Linux *and *Windows read/write/execute permission bits.
How did permissions work in the past?
Prior to Build 17063, all files/folders list “root” as the owner and belonged to the group “root”. The permission bits on each file/folder was derived from Windows permissions–no write bit checked for Windows meant no write bit set in WSL.
Additionally, attempting to chmod or chown on a file/folder resulted in a no-op (they wouldn’t do anything!)
How do permissions work now?
For files that don’t have metadata, we apply the same approach as what is described in pre-17063 builds. But now, chmod/chown can assign metadata to the file or folder. Newly created files in WSL will be created with metadata by default and will respect the mount options you’ve set (discussed later) or the permissions you pass when executing a mkdir/open.
Once the file or folder has metadata, Windows and Linux permissions will not remain in lock-step with each other.
Important Caveats
There are a few things to make sure you’re aware of when tinkering with the new metadata:
- Editing a file using a Windows editor may remove the file’s Linux metadata. In this case, the file will revert to its default permissions
- Removing all write bits on a file in WSL will make Windows mark the file as read-only.
- If you have multiple WSL distros installed or multiple Windows users with WSL installed, they will all use the same metadata on the same files. The uid’s of each WSL user account might differ. This something to consider when setting permissions.
For example, you can disable write permissions on a file in Windows and chmod the file to show write permissions are enabled in WSL. Or you can have read permissions enabled under Windows and remove read permissions in WSL. You can see this concept illustrated below.
In the example below, I remove a file’s write permissions in WSL which disables the ability to write changes to the file from WSL. But I can still open the file and write changes from Windows because I have the write permission set in Windows.
Inversely, if I have a file in WSL which states its Linux permissions allows writing–but I’ve disabled write permissions in Windows–I still won’t be able to perform actions. Windows permissions for a file or folder will trump the permissions set under WSL. You can see this concept illustrated below.
Special Files
You can create special files like fifos, unix sockets, and device files.
Mount Options
We’ve added new mount options to DrvFs to control permissions for files without metadata. Y ou can combine with the metadata option to specify default permissions for files without metadata. The new mount options include:
- uid: the user ID used for the owner of all files
- gid: the group ID used for the owner of all files
- *umask : *an octal mask of permissions to exclude for all files and directories.
- fmask: an octal mask of permissions to exclude for all regular files.
- dmask: an octal mask of permissions to exclude for all directories.
A sample command using the mount options could look like this:
sudo mount -t drvfs C: /mnt/c -o metadata,uid=1000,gid=1000,umask=22,fmask=111
After executing the mount command, you will see your mount (in this case, C:) listed with all the parameters you passed in when querying for a list of mounted devices.
If you’re unfamiliar with octal masks, consult the man pages for chmod to learn more (in the WSL console, enter “man chmod “).
Mount Options Example
In my WSL instance, I have created a group called “metadatagroup” and a user named “msbob”. They have gid and uid values equal to 1001. I also have a file and folder without metadata in WSL. If I mount DrvFs with this command:
sudo mount -t drvfs C: /mnt/c -o metadata,uid=1001,gid=1001,umask=22,fmask=111
Take a peek at the permissions on the file and directory that did not previously have metadata. It was appropriately assigned msbob and metadatagroup for the owner and group bits, as expected.
Additionally, because we passed in umask=22 and fmask=111, our files and directories have had their read/write/execute permissions update accordingly. The umask used in this example will disable execution rights for files by default, which allows you to be more explicit in setting execution permissions on a file-by-file basis.
By default, WSL will set the uid and gid to the default user with drives that are auto-mounted during instance start. If you mount manually, you will have to set these explicitly (the default user that gets created when WSL is first installed has a uid=1000 and gid=1000).
What do you think about the latest changes to DrvFs ? Drop us a comment below or tweet at us!
Команда chmod Linux
Система полномочий в Linux имеет очень важное значение, поскольку благодаря ей можно разделять привилегии между пользователями, ограничить доступ к нежелательным файлам или возможностям, контролировать доступные действия для сервисов и многое другое. В Linux существует всего три вида прав — право на чтение, запись и выполнение, а также три категории пользователей, к которым они могут применяться — владелец файла, группа файла и все остальные.
Эти права применяются для каждого файла, а поскольку все в системе Linux, даже устройства, считаются файлами, то, получается что эти права применимы ко всему. Мы более подробно рассматривали как работают права доступа к файлам Linux в отдельной статье, а этой, я хочу остановиться на команде chmod, которая используется для установки прав.
Команда chmod Linux
Эта команда имеет типичный для команд linux синтаксис, сначала команда, затем опции, а в конце файл или папка, к которой ее нужно применить:
$ chmod опции права /путь/к/файлу
Сначала рассмотрим какими бывают права доступа linux и как они устанавливаются. Пред этим рекомендую прочитать статью про права, ссылка на которую есть выше. Есть три основных вида прав:
- r — чтение;
- w — запись;
- x — выполнение;
- s — выполнение от имени суперпользователя (дополнительный);
Также есть три категории пользователей, для которых вы можете установить эти права на файл linux:
- u — владелец файла;
- g — группа файла;
- o — все остальные пользователи;
Синтаксис настройки прав такой:
группа_пользователей действие в ид_прав
В качестве действий могут использоваться знаки «+» — включить или «-« — отключить. Рассмотрим несколько примеров:
- u+x — разрешить выполнение для владельца;
- ugo+x — разрешить выполнение для всех;
- ug+w — разрешить запись для владельца и группы;
- o-x — запретить выполнение для остальных пользователей;
- ugo+rwx — разрешить все для всех;
Но права можно записывать не только таким способом. Есть еще восьмеричный формат записи, он более сложен для понимания, но пишется короче и проще. Я не буду рассказывать как считать эти цифры, просто запомните какая цифра за что отвечает, так проще:
- 0 — никаких прав;
- 1 — только выполнение;
- 2 — только запись;
- 3 — выполнение и запись;
- 4 — только чтение;
- 5 — чтение и выполнение;
- 6 — чтение и запись;
- 7 — чтение запись и выполнение.
Права на папку linux такие же, как и для файла. Во время установки прав сначала укажите цифру прав для владельца, затем для группы, а потом для остальных. Например, :
- 744 — разрешить все для владельца, а остальным только чтение;
- 755 — все для владельца, остальным только чтение и выполнение;
- 764 — все для владельца, чтение и запись для группы, и только чтение для остальных;
- 777 — всем разрешено все.
Каждая из цифр не зависит от предыдущих, вы вбираете именно то, что вам нужно. Теперь давайте рассмотрим несколько опций команды, которые нам понадобятся во время работы:
- -c — выводить информацию обо всех изменениях;
- -f — не выводить сообщения об ошибках;
- -v — выводить максимум информации;
- —preserve-root — не выполнять рекурсивные операции для корня «/»;
- —reference — взять маску прав из указанного файла;
- -R — включить поддержку рекурсии;
- —version — вывести версию утилиты;
Теперь, когда вы знаете опции и как настраиваются права доступа chmod, давайте рассмотрим несколько примеров как работает команда chmod linux.
Примеры использования chmod
Я не буду приводить много примеров, так как там и так все более-менее понятно после пояснения правил создания выражений установки прав. Сначала самый частый случай — разрешить выполнения скрипта владельцу:
Или можно воспользоваться цифровой записью:
chmod 766 file
ls — l file
Недостаток цифровой записи в том, что вы не можете модифицировать уже существующие права доступа linux. Например, в первом варианте вы просто добавили флаг выполнения для владельца файла, а все остальные права оставили неизменными. В восьмеричном варианте мы полностью заменили текущие права новыми — все для владельца и чтение/запись для группы и остальных. Как видите, права установлены как и ожидалось. Теперь отключим выполнение владельцем:
И снова проверяем:
Дальше разрешим только чтение всем, кроме владельца:
chmod 744 file
ls -l file
Или отберем все права:
chmod ugo-rwx file
Файлы с правами 000 недоступны никаким пользователям, кроме суперпользователя и владельца. Вернем права обратно:
chmod 755 file
ls -l file
Такая же ситуация с файлами, владельцем которых вы не являетесь, если вы хотите изменить их права — используйте sudo. Из модификаторов прав вы можете конструировать любые последовательности, я думаю тут нет смысла разбирать их все. Для того чтобы поменять права на все файлы в папке используйте опцию -R:
chmod -R ug+rw dir
ls -l dir/
Также вы можете смотреть подробную информацию про вносимые изменения, например:
chmod -Rv ug+rw dir
Выводы
В этой небольшой статье была рассмотрена команда chmod linux. Она очень часто используется наряду с такими командами, как chown и umask для управления правами. Надеюсь, эта информация была полезной для вас. Если у вас остались вопросы, спрашивайте в комментариях!