Примеры использования команды chmod в Linux

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

  • umask — функция изменяющая права доступа, которые присваиваются новым файлам и директориям по умолчанию.
  • Поиск файлов в Linux изучаем команду find на примерах - наиболее эффективное средство поиска и «массовой обработки» файлов. Удобно использовать в связке с chmod.

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

  • Назначение прав всем объектам текущего каталога, включая подкаталоги.
    chmod -R 755 *
  • Значениями по умолчанию являются (umask 0022):
    для файлов: 644 (-rw-r--r--)
    для директорий: 755 (drwxr-xr-x)
  • Использование chmod. Рекурсивно изменить права доступа файла_или_папки
    chmod -R 755 имя_файла_или_папки ( 7 - хозяин, 5 - группа, 5 - другие)
  • Сменить рекурсивно права на 640 на все файлы начиная с текущей директории:
    find . -type f -exec chmod 640 {} \;
  • Сменить рекурсивно права на 750 на все директории начиная с текущей директории:
    find . -type d -exec chmod 750 {} \;
  • Поиск файлов с установленным SUID -бит -битом. Для GUID perm будет 02000
    find / -type f -perm -04000 -ls
    4335260  340 -rwsr-xr--   1 root     dip        347296 кві 21 20:35 /usr/sbin/pppd
    4326414   20 -rwsr-sr-x   1 libuuid  libuuid     18904 вер  2 21:35 /usr/sbin/uuidd
    ...
  • Рекурсивно удалить атрибуты SUID -бит и SGID:
    chmod -R u-s,g-s directory

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

  • 777 (-rwxrwxrwx) Каждый пользователь может читать, редактировать и запускать на выполнение
  • 1555 (-r-xr-xr-t) Каждый пользователь имеет право читать и запускать на выполнение; удалить файл может только владелец этого файла. Символ t обозначает Sticky бит, который указывает, что удалять файлы в этой директории может только владелец этого файла.
  • 2555 (-r-xr-sr-x) GUID Каждый пользователь имеет право читать и запускать на выполнение с правами группы(user group) владельца файла.
  • 2775 (drwxrwsr-x) GUID Созданные новые файлы всегда будут получать ту группу, какая стоит у папки, в которой они находятся. За это отвечает бит 2 в правах на папки. Это важно, если с этим файловым пространством (сайтом) работают несколько пользователей.
  • 4555 (-r-sr-xr-x) SUID Каждый пользователь имеет право читать и запускать на выполнение с правами владельца файла

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

chown user:users daemon
chmod ug+sx daemon
  • Bash скрипт для рекурсивного изменения права доступа для вложенных файлов и каталогов.Cкрипт не понимает файлы и директории с пробелами. Для устранения ошибки, названия файлов и директории в строке запуска chmod нужно заключить в одинарные скобки.
#!/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

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

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

Хочется отметить, что пользователь 'root' всегда сможет получить доступ к Вашим файлам (вне зависимости какие были выставлены права) т.к. это супер-администратор (суперпользователь).

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

Посмотреть права доступа на объекты можно командой 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 - не имеет никакого эффекта.

Для полноценного просмотра каталога, необходимы права на чтение каталога и доступ к файлам, а главное к их атрибутам, т.е. минимальные разумные права на каталог - 5 (r-x). Прав 4 (r–) хватит только на просмотр имен файлов, без атрибутов, т.е. не будет известен ни размер файла, ни его тип (что даже не позволит отличить директории от файлов).

На практике для каталогов используется только три режима: 7 (rwx), 5 (r-x) и 0 (—).

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

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

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

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

PQ VPS сервера в 28+ странах.