karapuz → Практика распределния прав пользователей на Linux десктопе
Когда я окончательно перешел на Linux, я соответственно перенес все документы, музыку, фото и etc с NTFS разделов на ext3. Следующим шагом я создал две учетные пользовательские записи, для себя и жены, по банальной причине, разошлись во взглядах по поводу оформления рабочего стола :). Естественно весь перенесенный с Windows контент я поместил в своем домашнем каталоге. Жена активно использует каталог с фото и соответственно необходимо было дать ей права на запись в данный каталог, причем я не должен был терять полный доступ на созданные женой каталоги и файлы.
В этой статье я приведу практический пример, как можно распределить права между пользователями на Linux десктопе. Для наглядности примера добавим в условие задачи еще одного пользователя.
Итак, задача
Дано:
1.Три пользователя с учетными записями «А», «В», и «С».
2.Все три пользователя состоят в группе users.
3.Каталог «Фото», в котором содержится сложная иерархия подкаталогов и файлов, и для которого необходимо раздать права.
4.Владелец каталога «Фото» пользователь «А».
Неосновное условие:
1.Так как каталог «Фото» со всем содержимым был перенесен с NTFS раздела, то все файлы (более 500) помечены как исполняемые.
Задача:
1.Дать полный доступ на каталог «Фото» и все подкаталоги и файлы пользователю «В».
2.Для новых каталогов и файлов должны автоматически выставляться права на полный доступ для пользователей «А» и «В» независимо от того, кто является владельцем создаваемых элементов.
3.Пользователь «С» должен иметь доступ только на чтение.
4.Снять метку «исполняемый» со всех файлов в каталоге «Фото».
Краткая справка по используемым для решения задачи инструментам
Выполним в консоли команду
ls -l Фото
Увидим информацию о содержащихся внутри элементах примерно такого вида
drwxr-xr-x 1 А users 4096 Июл 20 00:30
В данной строке нас интересует та часть, где написано:
drwxr-xr-x А users.
В этой части содержится информация о правах доступа и означает следующее:
d — каталог.
Первые три символа rwx — права доступа для владельца. Чтение ( r ), запись (w) и выполнение (x), для каталога x — возможность его открывать.
Вторые r-x — права доступа для владеющей группы. Прочерк между r и x означает, что отсутствует возможность на запись. Отсутствует w.
Следующие r-x — права доступа для всех остальных.
А — владеющая учетная запись.
users — владеющая группа.
Можно сделать вывод. Владелец каталога, пользователь «А», имеет полный доступ, все остальные, в том числе и другие члены владеющей группы users, имеют доступ только на чтение.
Для решения данной задачи будем использовать три консольные команды:
chmod
setfacl
find
Команда chmod изменяет права доступа для владельца, владеющей группы и всех остальных.
Основные параметры команды chmod:
u — владелец,
g — владеющая группа,
o — другие пользователи, не входящие во владеющую группу,
a — все. Идентично ugo,
и соответственно знакомые rwx.
Например, команда
chmod g+rwx Фото #без ковычек
добавляет доступ на чтение, запись и выполнение для владеющей группы.
Подробней смотри man chmod.
Команда setfacl устанавливает расширенные права доступа (access control list или ACL).
Основные параметры команды setfacl:
-m — установить ACL,
-x — удалить ACL,
-b — удалить все установленные параметры ACL.
Например, команда
setfacl -m user:B:rwx
добавляет доступ на чтение, запись и выполнение для пользователя «В».
Подробней смотри man setfacl. Также смотри man acl и man getfacl.
Команда find осуществляет поиск файлов. Имеет большое количество параметров. Основной прелестью данной команды является то, что поиск может осуществляться со многими условиями. Например команда
find Фото -type d -exec chmod g+rwx {} \;
находит содержащиеся в каталоге «Фото» все каталоги (-type d) и выполняет для них (-exec) команду chmod g+rwx
Подробней смотри man find.
Решение задачи
Здесь я приведу два способа решения задачи.
Способ 1
Все команды выполняются от имени владельца каталога «Фото».
Сначала уберем метку «исполняемый» со всех фалов в каталоге «Фото».
cd ~/Фото
find Фото -type f -exec chmod a-x {} \;
Все три пользователя члены одной группы. Разрешим группе полный доступ к каталогу «Фото», всем подкаталогам и файлам. Тем самым мы дадим полный доступ всем трем пользователям.
find Фото -type f -exec chmod g+rw {} \; #полный доступ для файлов.
find Фото -type d -exec chmod g+rwx {} \; #полный доступ для каталогов.
Пользователь «С» имеет полный доступ к каталогу «Фото». Исправим это путем явного указания прав для пользователя «С».
find Фото -type d -exec setfacl -m user:C:rx {} \;
find Фото -type f -exec setfacl -m user:C:r {} \;
Теперь необходимо, чтобы для всех вновь создаваемых файлов и каталогов внутри каталога «Фото» выставлялись те же права доступа, которые мы установили выше.
find Фото -type d -exec setfacl -m default:user:C:rx {} \;
Все. Теперь пользователи «А» и «В» имеют полный доступ к каталогу «Фото», ко всем подкаталогам и файлам, даже к вновь созданным. Пользователю «С» все это доступно только для чтения.
В этом случае, если в группе users появляется еще один пользователь, и если явно не прописать права для него, то он автоматически получает полный доступ к каталогу «Фото». Это не всегда приемлемо. Рассмотрим второй способ, где данный недочет (если можно так сказать) устранен.
Способ 2
Зададим права доступа для пользователя «В» в явном виде. Напомню, что пользователь «А» является владельцем и уже имеет полный доступ.
find Фото -type f -exec setfacl -m user:B:rw {} \;
find Фото -type d -exec setfacl -m user:B:rwx {} \;
Теперь установим права по умолчанию для вновь создаваемых файлов и каталогов отдельно для пользователей «А» и «В», потому как нам неизвестно кто будет владельцем новых файлов и каталогов.
find Фото -type d -exec setfacl -m default:user:A:rwx {} \;
find Фото -type d -exec setfacl -m default:user:B:rwx {} \;
Пользователя «С» мы не трогаем, он является членом группы users, котрая имеет права rx, и соответственно пользователь «С» будет иметь права rx, что и необходимо было сделать.
Вроде все, за исключением одного НО. Права автоматически не назначаются на копируемые и перемещаемые файлы. Я так и не смог разобраться почему. Похоже что так просто задумано.
На этом все.
В этой статье я приведу практический пример, как можно распределить права между пользователями на Linux десктопе. Для наглядности примера добавим в условие задачи еще одного пользователя.
Итак, задача
Дано:
1.Три пользователя с учетными записями «А», «В», и «С».
2.Все три пользователя состоят в группе users.
3.Каталог «Фото», в котором содержится сложная иерархия подкаталогов и файлов, и для которого необходимо раздать права.
4.Владелец каталога «Фото» пользователь «А».
Неосновное условие:
1.Так как каталог «Фото» со всем содержимым был перенесен с NTFS раздела, то все файлы (более 500) помечены как исполняемые.
Задача:
1.Дать полный доступ на каталог «Фото» и все подкаталоги и файлы пользователю «В».
2.Для новых каталогов и файлов должны автоматически выставляться права на полный доступ для пользователей «А» и «В» независимо от того, кто является владельцем создаваемых элементов.
3.Пользователь «С» должен иметь доступ только на чтение.
4.Снять метку «исполняемый» со всех файлов в каталоге «Фото».
Краткая справка по используемым для решения задачи инструментам
Выполним в консоли команду
ls -l Фото
Увидим информацию о содержащихся внутри элементах примерно такого вида
drwxr-xr-x 1 А users 4096 Июл 20 00:30
В данной строке нас интересует та часть, где написано:
drwxr-xr-x А users.
В этой части содержится информация о правах доступа и означает следующее:
d — каталог.
Первые три символа rwx — права доступа для владельца. Чтение ( r ), запись (w) и выполнение (x), для каталога x — возможность его открывать.
Вторые r-x — права доступа для владеющей группы. Прочерк между r и x означает, что отсутствует возможность на запись. Отсутствует w.
Следующие r-x — права доступа для всех остальных.
А — владеющая учетная запись.
users — владеющая группа.
Можно сделать вывод. Владелец каталога, пользователь «А», имеет полный доступ, все остальные, в том числе и другие члены владеющей группы users, имеют доступ только на чтение.
Для решения данной задачи будем использовать три консольные команды:
chmod
setfacl
find
Команда chmod изменяет права доступа для владельца, владеющей группы и всех остальных.
Основные параметры команды chmod:
u — владелец,
g — владеющая группа,
o — другие пользователи, не входящие во владеющую группу,
a — все. Идентично ugo,
и соответственно знакомые rwx.
Например, команда
chmod g+rwx Фото #без ковычек
добавляет доступ на чтение, запись и выполнение для владеющей группы.
Подробней смотри man chmod.
Команда setfacl устанавливает расширенные права доступа (access control list или ACL).
Основные параметры команды setfacl:
-m — установить ACL,
-x — удалить ACL,
-b — удалить все установленные параметры ACL.
Например, команда
setfacl -m user:B:rwx
добавляет доступ на чтение, запись и выполнение для пользователя «В».
Подробней смотри man setfacl. Также смотри man acl и man getfacl.
Команда find осуществляет поиск файлов. Имеет большое количество параметров. Основной прелестью данной команды является то, что поиск может осуществляться со многими условиями. Например команда
find Фото -type d -exec chmod g+rwx {} \;
находит содержащиеся в каталоге «Фото» все каталоги (-type d) и выполняет для них (-exec) команду chmod g+rwx
Подробней смотри man find.
Решение задачи
Здесь я приведу два способа решения задачи.
Способ 1
Все команды выполняются от имени владельца каталога «Фото».
Сначала уберем метку «исполняемый» со всех фалов в каталоге «Фото».
cd ~/Фото
find Фото -type f -exec chmod a-x {} \;
Все три пользователя члены одной группы. Разрешим группе полный доступ к каталогу «Фото», всем подкаталогам и файлам. Тем самым мы дадим полный доступ всем трем пользователям.
find Фото -type f -exec chmod g+rw {} \; #полный доступ для файлов.
find Фото -type d -exec chmod g+rwx {} \; #полный доступ для каталогов.
Пользователь «С» имеет полный доступ к каталогу «Фото». Исправим это путем явного указания прав для пользователя «С».
find Фото -type d -exec setfacl -m user:C:rx {} \;
find Фото -type f -exec setfacl -m user:C:r {} \;
Теперь необходимо, чтобы для всех вновь создаваемых файлов и каталогов внутри каталога «Фото» выставлялись те же права доступа, которые мы установили выше.
find Фото -type d -exec setfacl -m default:user:C:rx {} \;
Все. Теперь пользователи «А» и «В» имеют полный доступ к каталогу «Фото», ко всем подкаталогам и файлам, даже к вновь созданным. Пользователю «С» все это доступно только для чтения.
В этом случае, если в группе users появляется еще один пользователь, и если явно не прописать права для него, то он автоматически получает полный доступ к каталогу «Фото». Это не всегда приемлемо. Рассмотрим второй способ, где данный недочет (если можно так сказать) устранен.
Способ 2
Зададим права доступа для пользователя «В» в явном виде. Напомню, что пользователь «А» является владельцем и уже имеет полный доступ.
find Фото -type f -exec setfacl -m user:B:rw {} \;
find Фото -type d -exec setfacl -m user:B:rwx {} \;
Теперь установим права по умолчанию для вновь создаваемых файлов и каталогов отдельно для пользователей «А» и «В», потому как нам неизвестно кто будет владельцем новых файлов и каталогов.
find Фото -type d -exec setfacl -m default:user:A:rwx {} \;
find Фото -type d -exec setfacl -m default:user:B:rwx {} \;
Пользователя «С» мы не трогаем, он является членом группы users, котрая имеет права rx, и соответственно пользователь «С» будет иметь права rx, что и необходимо было сделать.
Вроде все, за исключением одного НО. Права автоматически не назначаются на копируемые и перемещаемые файлы. Я так и не смог разобраться почему. Похоже что так просто задумано.
На этом все.