Команда chmod — Linux
1
24285
27 мая 2020 15:37
27/05/2020
Visitors have accessed this post 24285 times.
Chmod устанавливает права на чтение, запись и выполнение и является одной из наиболее важных команд безопасности в операционных системах на базе Linux.
У каждого объекта в вашей системе Linux есть режим выдачи прав, который описывает, какие действия пользователь может выполнять в системе. Существует три типа разрешений: на чтение (chmod r), запись (chmod w) и выполнение (chmod x).
Читать файл — значит просматривать его содержимое. Например, текстовый файл должен иметь разрешение на чтение, чтобы кто-то мог прочитать текст внутри. Если пользователь хочет добавить что-то в этот файл, ему нужно разрешение на запись. Разрешение на выполнение позволяет запускать такие файлы, как сценарий командной оболочки или бинарный программный файл.
Давайте посмотрим примеры использования chmod.
Базовые права
Команда ls -l отображает права доступа, назначенные файлу. Например:
ls -l
-rw-rw-r-- 1 bruce bruce 0 Jul 30 16:25 schedule1.txt
Некоторые права (rw) появляются более одного раза, потому что они относятся к разным объектам: user (пользователь), group (группа) и other (другое). User – здесь синоним владельца, group – это основная группа пользователя, обе — bruce. Other относится ко всем остальным пользователям.
Первый знак обозначает тип объекта: — для файла, d — для директории (как еще говорят, chmod на папку) и l — для символической ссылки. Следующие девять символов сгруппированы по три и описывают режим прав. Позиции упорядочены по r, w, x, а группы упорядочены по user, group, other.
— — — |
rwx rwx rwx |
uuu ggg ooo |
u=user, g=group, o=other |
Файлы
У нас есть файл с правами на чтение, запись и выполнение, установленными для всех объектов:
rwxrwxrwx
Конечно, в реальном мире мы обычно не настраиваем файлы с такими правами; это просто иллюстрация того, как используется каждая позиция.
В следующем примере файл сконфигурирован так, чтобы его владелец (pablo) имел права на чтение и запись, члены группы — только на чтение, а остальные – не имели никаких прав.
-rw-r----- 1 pablo pablo 0 Jul 30 16:25 textfile
Команда chmod изменяет режим прав объектов в системе. Это одна из наиболее используемых и важных команд в наборе команд безопасности Linux.
Символ плюс (+) добавляет права, а символ минус (-) удаляет права. Вы можете прочитать chmod u+r как «пользователь плюс чтение», так как она дает пользователю права на чтение. Команда chmod u-r означает «пользователь минус чтение», так как забирает у пользователя права на чтение.
Справочники
Те же три типа прав также применяются к директории. Директория должна иметь права на чтение, чтобы пользователь мог просматривать ее содержимое. Пользователю потребуются права на запись для добавления чего-либо в нее (например, для создания нового файла). Чтобы пользователь мог изменить директорию (cd), у него должны быть права на выполнение.
drw-rw-r-- 2 pablo pablo 4096 Jul 30 15:56 JBOSS
Пабло может быть владельцем директории JBOSS, но поскольку у него нет прав на выполнение, он не может внести изменения (cd) в нее. Он может использовать команду chmod u+x, чтобы добавить права, и только после этого выполнить cd.
$ cd JBOSS
bash: cd: JBOSS: Permission denied
$ chmod u+x JBOSS
$ ls -l
drwxrw-r-- 2 pablo pablo 4096 Jul 30 15:56 JBOSS
$ cd JBOSS
$ pwd
/opt/JBOSS
Объединение аргументов
Вы можете объединять аргументы, используя запятую. В этом примере вам нужна только одна команда для назначения прав, чтобы группа не могла записывать в файл, а остальной мир не мог его прочитать:
$ chmod o-r,g-w readme.txt
$ ls -l
-rw-r----- 1 pablo share 0 Jul 31 13:34 readme.txt
Вы можете прочитать это как «другие минус чтение и группа минус запись».
Предположим, что Дениз написала Bash-скрипт с именем home_backup.sh и хочет дать ему права на выполнение. Она также хочет запретить кому-либо чтение, запись или выполнение скрипта.
Один из способов сделать это — с помощью символов плюс и минус:
$ chmod go-rw,u+x home_backup.sh
Другой способ — использовать символ равенства (=). Это позволит установить права без учета предыдущих настроек. Обратите внимание, что после второго знака «равно» — пробел; это указывает на значение none:
$ chmod u=rwx,go= home_backup.sh
Вы можете прочитать это как «права для пользователя, группы и других на чтение, запись и выполнение равно нет».
Числовой режим
Chmod также поддерживает числовой режим, когда используются числовые значения, присвоенные каждой позиции:
owner |
group |
other |
r |
w |
x |
r |
w |
x |
r |
w |
x |
400 |
200 |
100 |
40 |
20 |
10 |
4 |
2 |
1 |
Общее значение набора прав может быть вычислено и передано команде chmod в качестве одного аргумента. Возьмем пример с Дениз и ее скриптом. Если она использует числовой режим, чтобы установить права для своего сценария, она должна сначала вычислить итоговое значение:
-rwx------ 1 denise denise 0 Jul 31 13:53 home_backup.sh
Суммируем числа, соответствующие каждому разрешению, которое она хочет применить:
400 + 200 + 100 = 700
То есть, ее команда будет chmod 700 home_backup.sh
.
Теперь предположим, что Дениз решила сбросить исходные права доступа к файлу:
-rw-rw-r-- 1 denise denise 0 Jul 31 13:53 home_backup.sh
Рассчитываем числовое значение:
400 + 200 + 40 + 20 + 4 = 664
Значит, Дениз может использовать команду chmod 664 home_backup.sh
.
А чтобы установить разрешение на чтение и запись для владельца файла и только на чтение для группы и остальных используем команду rw-r–r– chmod или chmod 644 file.
Давайте рассмотрим, что такое chmod 777. В случае использования этой команды вы предоставляете права на чтение, запись и выполнение владельцу, группе и другим. Поэтому эта команда считается потенциально очень опасной.
Специальные режимы
Три других режима могут быть установлены на объекте:
Имя |
Символьный код |
Числовой код |
setuid |
s |
4000 |
setgid |
s |
2000 |
sticky |
t |
1000 |
Бит SetUID (SUID) – это бит смены идентификатора пользователя. Когда он установлен, файл будет выполняться с идентификатором пользователя — владельца файла, а не того, кто его запускает.
$ chmod u + s
Бит SetGID (SGID) – бит смены идентификатора группы, обеспечивает групповое владение файлами и директориями. Когда он установлен, любой файл или директория, созданные в каталоге, будут принадлежать группе директории, а не пользователя. Когда этот бит установлен для файла, тот всегда будет выполняться как принадлежащий группе, а не пользователю:
$ chmod g + s
Бит sticky, также называемый «флагом, ограничивающим удаление», может быть установлен в директории, чтобы запретить удаление файла в ней всем, кроме владельца:
$ chmod o + t
sticky бит можно установить в числовом режиме, добавив его значение к значениям других прав. Если у вас есть объект со значением chmod 755 и вы хотите установить бит sticky, добавьте 1000:
1000 + 400 + 200 + 100 + 40 + 10 + 4 + 1 = 1755
Дополнительно
Буква а является ярлыком для назначения прав всем пользователям. Команда chmod a + rwx эквивалентна команде chmod ugo + rwx.
Рекурсивный аргумент
Как и у многих других команд Linux, у chmod есть рекурсивный аргумент -R, который позволяет рекурсивно работать с директорией и ее содержимым. Подразумевается, что команда будет пытаться работать со всеми объектами ниже указанной директории, а не только с самой директорией. Наш пример начинается с пустой директории, добавим аргумент -v (подробный), поэтому chmod нам подробно сообщит, что он делает:
$ ls -l . conf
.:
drwxrwxr-x 2 alan alan 4096 Aug 5 15:33 conf
conf:
-rw-rw-r-- 1 alan alan 0 Aug 5 15:33 conf.xml
$ chmod -vR 700 conf
mode of 'conf' changed from 0775 (rwxrwxr-x) to 0700 (rwx------)
mode of 'conf/conf.xml' changed from 0664 (rw-rw-r--) to 0700 (rwx------)
Команда RFILE
Команда (—reference=RFILE) может использоваться, чтобы дублировать режим другого файла (RFILE), используемого как справочный. Это удобно, если вы меняете режимы файлов под определенную конфигурацию, или не знаете точный режим, или не хотите тратить время на его вычисление:
$ ls -l
-rw-r--r-x 1 alan alan 0 Aug 5 17:10 notes.txt
-rw-rw-r-- 1 alan alan 0 Aug 5 17:10 readme.txt
$ chmod --reference=readme.txt notes.txt
$ ls -l
-rw-rw-r-- 1 alan alan 0 Aug 5 17:10 notes.txt
-rw-rw-r-- 1 alan alan 0 Aug 5 17:10 readme.txt
Отчет об изменениях
У команды chmod есть аргумент -c (—changes), который означает, что chmod будет сообщать только о внесении изменений (в отличие от -v (-verbose) – в этом случае chmod сообщает обо всех выходных данных). При этом chmod по-прежнему будет сообщать, например, о том, что операция не разрешена.
Аргумент -f (—silent, —quiet) убирает большинство сообщений об ошибках. Используя этот аргумент вместе с –c, вы будете видеть только реальные изменения.
Сохраняем корневую файловую систему
К корню (/) файловой системы Linux следует относиться с большим вниманием. Если вы допустите ошибку на этом уровне, последствия могут быть очень серьезными, вплоть до того, что система будет неработоспособна. Особенно это актуально, когда вы запускаете рекурсивную команду, которая вносит изменения или, что еще хуже, удаления. Аргумент —preserve-root команды chmod защитит корневую файловую систему. Если с аргументом используется рекурсивная команда chmod, ничего не произойдет, и вы увидите это сообщение:
[alan@localhost ~]# chmod -cfR --preserve-root a+w /
chmod: it is dangerous to operate recursively on '/'
chmod: use --no-preserve-root to override this failsafe
Опция не действует без рекурсивного аргумента. Однако, если команду запустит пользователь root, будут изменены права для /, но не для других файлов или директорий.
[alan@localhost ~]$ chmod -c --preserve-root a+w /
chmod: changing permissions of '/': Operation not permitted
[root@localhost /]# chmod -c --preserve-root a+w /
mode of '/' changed from 0555 (r-xr-xr-x) to 0777 (rwxrwxrwx)
Удивительно, но —no-preserve-root — это не аргумент по умолчанию. Если вы запустите команду без опции «сохранить», по умолчанию будет выбран режим «без сохранения» и, возможно, изменятся разрешения для файлов, которые не следует изменять.
[alan@localhost ~]$ chmod -cfR a+x /
mode of '/proc/1525/task/1525/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of '/proc/1541/task/1541/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of '/proc/1541/task/1580/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of '/proc/1541/task/1592/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of '/proc/1557/task/1557/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of '/proc/1558/task/1558/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
mode of '/proc/1561/task/1561/comm' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x)
Заключение
Все объекты в операционной системе Linux имеют набор разрешений. Важно периодически проверять и контролировать их, чтобы предотвратить попытки нежелательного доступа.
Оригинал статьи — https://opensource.com/article/19/8/linux-chmod-command
Подробно и, главное, на практике познакомиться с chmod и многими другими командами Linux вы можете на нашем практикуме Linux by Rebrain.
Каждую неделю мы в live режиме решаем кейсы на наших открытых онлайн-практикумах, присоединяйтесь к нашему каналу в Телеграм, вся информация там.
… [Trackback]
[…] Informations on that Topic: rebrainme.com/blog/linux/komanda-chmod-linux/ […]
… [Trackback]
[…] Here you can find 3832 more Info on that Topic: rebrainme.com/blog/linux/komanda-chmod-linux/ […]
… [Trackback]
[…] Find More here on that Topic: rebrainme.com/blog/linux/komanda-chmod-linux/ […]