Содержание

Chmod: Управляйте доступом к файлам и папкам в Linux

chmod — программа для изменения прав доступа к файлам и каталогам. Название происходит от программы ОС Unix chmod, которая, собственно, изменяет права доступа к файлам, каталогам и символическим ссылкам.

Права устанавливаются командой chmod. Команда chmod поддерживает установку прав как в восьмеричном представлении, так и в символьном (маска режима доступа).

Популярные цифровые значения:

Символ s - означает SUID -бит-бит. Программа с этим битом выполняется от того пользователя, которому принадлежит файл. Например, если ваша программа называется daemon и вы хотите запускать его от пользователя user группы users, то сделать надо примерно следующее:

chown user:users daemon
chmod ug+sx daemon
#!/bin/bash
 
ROOT_DIR=$1
DIR_PERM=$2
FILE_PERM=$3
 
for name in $(find ${ROOT_DIR})
do
if [ -d $name ]
then
chmod ${DIR_PERM} ${name}
echo "DIRECTORY: '${name}' PERMS CHANGED TO 0x${DIR_PERM}"
else
chmod ${FILE_PERM} ${name}
echo "FILE: '${name}' PERMS CHANGED TO 0x${FILE_PERM}"
fi
done
 
#Пример запуска:
#/понятный путь для FreeBSD/*doperm.sh(пробел)
#/полный путь к нужному каталогу/(пробел)аттрибуты каталога в цифрах,
#например: 00770(пробел) аттрибуты файла в цифрах, например: 00600
#./doperm.sh /mnt/archive/oldmail 00770 00600

Права доступа в Linux/Unux

Поскольку Linux — система многопользовательская, для нее был разработан механизм разграничения доступа.

В основе механизмов разграничения доступа лежат имена пользователей и имена групп пользователей. В Linux каждый пользователь имеет уникальное имя, под которым он входит в систему (логируется). Кроме того, в системе создается некоторое число групп пользователей, причем каждый пользователь может быть включен в одну или несколько групп. Создает и удаляет группы суперпользователь, он же может изменять состав участников той или иной группы. Члены разных групп могут иметь разные права по доступу к файлам, например, группа администраторов может иметь больше прав, чем группа программистов.

В индексном дескрипторе каждого файла записаны имя так называемого владельца файла и группы, которая имеет права на этот файл. Первоначально, при создании файла его владельцем объявляется тот пользователь, который этот файл создал. Точнее — тот пользователь, от чьего имени запущен процесс, создающий файл. Группа тоже назначается при создании файла — по идентификатору группы процесса, создающего файл.

Посмотреть права доступа на объекты можно командой ls или stat (которая выводим например права доступа сразу в символьном и цифровом виде). Утилита ls

ls -l /bin/ls
-rwxr-xr-x 1 root root 110080 Янв 14  2015 /bin/ls

Утилита stat

stat /bin/ls
Доступ: (0755/-rwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
 -    rwx    r-x    r-x
---  -----  -----  -----
 |     |      |      |
 |     |      |      +----  Права доступа для всех остальных
 |     |      |      
 |     |      +-----------  Права доступа для группы
 |     |
 |     +------------------  Права достува для владельца (read, write, execute)
 |
 +------------------------ Тип файла. "-" означет, что это обычный файл.
                           "d" - директория. "l" - ссылка

Для назначения прав используются три группы флагов, первая определяет права для владельца, вторая - права для основной группы пользователя, третья - для всех остальных пользователей в системе.

Для файлов: r - право на чтение из файла; w - разрешает запись в файл (в частности перезапись или изменение); x - позволяет исполнить файл.

Для каталогов, флаги r w x имеют несколько отличный смысл: r - позволяет читать только имена файлов в каталоге; x - позволяет иметь доступ к самим файлам и их атрибутам (но не именам); w имеет смысл только в сочетании с x, и позволяет (в дополнение к x) манипулировать с файлами в каталоге (создавать, удалять и переименовывать). w без x - не имеет никакого эффекта.

Режим доступа к каталогу - 3 (-wx)

Очень любопытный режим доступа к каталогу - 3 (-wx): он позволяет делать в директории все, что угодно, но не позволяет прочитать имена объектов в директории. Т.е. если вам не известны названия объектов в этом каталоге, то вы сделать с ними ничего не сможете (даже удалить по маске * т.к. маску не к чему применять - имена то недоступны).

В каталоге с режимом доступа 3 (-wx) можно создавать новые, переименовывать и удалять файлы и каталоги (если вы знаете их имя); читать, изменять, запускать файл (если достаточно на него прав, и опять же - вы знаете его имя). Можно даже менять права доступа на файлы и каталоги (если вы знаете имя). Но самое интересное, что если вы сможете перейти по команде cd в подкаталог такого каталога (а для этого вам опять нужно знать его имя), то там у вас будет «все в ожуре» (если конечно у этого подкаталога будет нормальный режим доступа).

Никакой рекурсивный поиск/удаление тоже не сможет залезть внутрь такого каталога - ему ведь нужны названия - а их из такого каталога - никак не получить.

В этом примере пользователь "user1" может создавать, удалять или изменять файлы в каталоге "my_directory" и также может переходить в него, но не может видеть его содержимое.

d-wx-wx-wx 2 user1 users 4096 Apr  1 12:00 my_directory

Но не надо думать, что такой каталог полноценно заменяет крипто-контейнер (т.е. может использоваться для хранения очень секретных данных). Да, имен объектов из такого каталога никак не получить, однако если попытаться создать объект с именем, которое уже существует, то такая операция закончится неудачей (т.е. мы получим подтверждение, что такое имя уже есть). Так же можно пытаться открыть (как файл или как каталог) объект с произвольным именем, если такого имени нет, то мы получим ошибку. Безусловно имя может быть очень длинным и шансы угадать его могут быть не велики, но не надо забывать, что права доступа могут сменить как владелец каталога так root. Да и пути доступа могут сохраниться в различных логах и файлах истории.

Заключение

Несколько команд, которые помогут вам управлять правами доступа в Linux: