Права доступа к файлам

LinuxBeginner
Практиковаться сейчас

Введение

В этой лабораторной работе вы подробно изучите права доступа к файлам в Linux. Мы рассмотрим три важные команды: chown, touch и chmod. Эти инструменты необходимы для управления доступом к файлам и каталогам в системе Linux. К концу работы вы научитесь создавать файлы, изменять их владельца и настраивать права доступа. Понимание этих команд позволит вам контролировать, кто может читать, изменять и выполнять файлы в вашей системе.

Создание нового файла

Начнём с создания нового файла с помощью команды touch. Эта универсальная команда создаёт новые пустые файлы и обновляет временные метки существующих файлов. Иными словами, она «прикасается» к файлу: создаёт его, если файла ещё нет, или обновляет время последнего доступа к нему.

Сначала перейдите в нужный каталог. В этой работе мы будем использовать каталог project:

cd ~/project

Команда cd означает «сменить каталог». Символ ~ обозначает ваш домашний каталог, а /project — подкаталог, в который нужно перейти. Если каталога project не существует, команда, скорее всего, завершится ошибкой. Если вы не уверены в наличии каталога, обычно его сначала создают. Однако в этой лабораторной среде каталог уже должен существовать.

Теперь создайте файл с именем example.txt:

touch example.txt

Эта команда создаёт пустой файл example.txt в текущем каталоге. Чтобы проверить создание файла, выполните команду ls:

ls

ls означает «вывести список». Команда показывает файлы и каталоги в текущем расположении. В её выводе должен присутствовать example.txt. Если файла нет, проверьте, правильно ли вы выполнили команду touch и действительно ли находитесь в каталоге ~/project.

Изменение владельца файла

Теперь, когда файл создан, научимся изменять его владельца. Команда chown позволяет изменить владельца-пользователя и группу файла. Владелец определяет, кто управляет файлом.

Сначала проверьте текущего владельца файла example.txt:

ls -l example.txt

Команда ls -l («вывести список в подробном формате») показывает сведения о файле, включая права доступа, владельца и группу. Вы должны увидеть вывод, похожий на этот:

-rw-rw-r-- 1 labex labex 0 Jul 29 15:11 example.txt

Разберём этот вывод:

  1. -rw-rw-r-- — права доступа к файлу (подробнее мы рассмотрим их на шаге 4). Первый символ указывает тип объекта: - означает обычный файл, d — каталог и т. д. Остальные символы обозначают права на чтение, запись и выполнение для владельца, группы и остальных пользователей.
  2. Первый labex — текущий владелец файла. Это имя пользователя, которому принадлежит файл.
  3. Второй labex — текущая группа файла. Группа — это набор пользователей, которые могут совместно использовать права доступа.
  4. 0 — размер файла в байтах. Поскольку файл пустой, его размер равен нулю.
  5. Jul 29 15:11 — дата и время последнего изменения.
  6. example.txt — имя файла.

Теперь измените владельца файла на пользователя root. root — это административная учётная запись в системах Linux с особыми привилегиями.

sudo chown root:root example.txt

Эта команда работает следующим образом:

  • sudo запускает команду с правами root. Скорее всего, система попросит вас ввести пароль. Для chown нужны повышенные привилегии, поскольку эта команда может влиять на безопасность системы. Без sudo появится ошибка «Permission denied».
  • chown — команда для изменения владельца.
  • root:root задаёт нового владельца и группу; и владелец, и группа будут root. Синтаксис имеет вид owner:group.
  • example.txt — целевой файл.

Проверьте результат:

ls -l example.txt

Теперь владельцем и группой должны быть root:

-rw-rw-r-- 1 root root 0 Jul 29 15:11 example.txt

Если вместо root по-прежнему указан labex, убедитесь, что вы использовали sudo при выполнении команды chown и правильно ввели пароль.

Изменение владельца каталога

Команда chown также может изменять владельца целых каталогов и их содержимого. Рассмотрим это на практике. Такой подход особенно полезен при работе со сложными структурами каталогов, когда нужно назначить одного владельца всем файлам и подкаталогам.

Сначала создайте новый каталог с несколькими файлами:

mkdir -p new-dir/subdir
echo "Hello, world" > new-dir/file1.txt
echo "Another file" > new-dir/subdir/file2.txt

Разберём эти команды:

  • mkdir -p new-dir/subdir создаёт каталог new-dir и его подкаталог subdir. Параметр -p указывает mkdir при необходимости создавать родительские каталоги. Без -p команда завершилась бы ошибкой, если бы каталога new-dir ещё не было.
  • echo "Hello, world" > new-dir/file1.txt создаёт файл file1.txt внутри каталога new-dir и записывает в него текст "Hello, world". Символ > используется для перенаправления: он направляет вывод команды echo в указанный файл.
  • echo "Another file" > new-dir/subdir/file2.txt аналогичным образом создаёт файл file2.txt внутри каталога new-dir/subdir и записывает в него текст "Another file".

Теперь проверьте текущих владельцев:

ls -lR new-dir

Команда ls -lR рекурсивно выводит содержимое new-dir. Параметр -R (recursive, рекурсивный режим) заставляет ls показывать все файлы и подкаталоги внутри new-dir, а также их содержимое.

Вы должны увидеть примерно такой вывод:

new-dir:
total 4
-rw-rw-r-- 1 labex labex 13 Jul 29 09:15 file1.txt
drwxrwxr-x 2 labex labex 23 Jul 29 09:15 subdir

new-dir/subdir:
total 4
-rw-rw-r-- 1 labex labex 13 Jul 29 09:15 file2.txt

Это означает, что каталог new-dir, его подкаталог subdir и файлы file1.txt и file2.txt принадлежат пользователю labex.

Теперь измените владельца new-dir и всего его содержимого на пользователя root:

sudo chown -R root:root new-dir

В этой команде:

  • Параметр -R указывает chown выполнить операцию рекурсивно: изменить владельца всех файлов и подкаталогов внутри new-dir. Это важно: без -R изменился бы только владелец каталога new-dir, а файлы и подкаталоги внутри него по-прежнему принадлежали бы labex.

Проверьте результат:

ls -lR new-dir

Теперь вы должны увидеть:

new-dir:
total 4
-rw-rw-r-- 1 root root 13 Jul 29 09:15 file1.txt
drwxrwxr-x 2 root root 23 Jul 29 09:15 subdir

new-dir/subdir:
total 4
-rw-rw-r-- 1 root root 13 Jul 29 09:15 file2.txt

Как видно, владельцем каталога и всего его содержимого стал root. Это показывает, насколько полезен параметр -R для массового изменения владельцев в структуре каталогов.

Изменение прав доступа к файлу

В Linux права доступа к файлам представлены набором букв или чисел. Научимся читать и изменять эти права. Понимание прав доступа необходимо для защиты файлов и предотвращения несанкционированного доступа.

Сначала посмотрите текущие права файла example.txt:

ls -l example.txt

Вы можете увидеть примерно такой вывод:

-rw-rw-r-- 1 root root 0 Jul 29 15:11 example.txt

Фрагмент -rw-rw-r-- обозначает права доступа к файлу. Здесь используются числовая и символьная формы записи. Разберём их:

  • Первый символ (-) означает, что это обычный файл. Другие распространённые обозначения: d для каталога и l для символической ссылки.
  • Следующие три символа (rw-) задают права владельца: чтение и запись, но не выполнение.
    • r означает право на чтение: владелец может открыть файл и прочитать его.
    • w означает право на запись: владелец может изменять файл.
    • x означает право на выполнение: владелец может запустить файл, если это программа или скрипт. Символ - означает, что право отсутствует.
  • Следующие три символа (rw-) задают права группы. Они имеют то же значение, но применяются к участникам группы файла.
  • Последние три символа (r--) задают права остальных пользователей. Они также имеют то же значение, но применяются к пользователям, которые не являются владельцами и не входят в группу файла.

Теперь измените права с помощью команды chmod. Название chmod происходит от «change mode» («изменить режим»); команда позволяет изменять права доступа. Начнём с числовой записи.

sudo chmod 700 example.txt

В этой команде:

  • 700 — числовое представление прав доступа:
    • первая цифра (7) задаёт права владельца;
    • вторая цифра (0) задаёт права группы;
    • третья цифра (0) задаёт права остальных пользователей.

Каждая цифра — число от 0 до 7, полученное сложением значений прав на чтение (4), запись (2) и выполнение (1):

  • 4: право на чтение
  • 2: право на запись
  • 1: право на выполнение
  • 0: нет прав

Поэтому 7 (первая цифра) даёт владельцу права на чтение (4), запись (2) и выполнение (1): 4+2+1=7.
0 (вторая цифра) не даёт группе никаких прав (0+0+0=0).
0 (третья цифра) не даёт никаких прав остальным пользователям (0+0+0=0).

Таким образом, 700 означает: владелец — чтение, запись и выполнение; группа — нет прав; остальные — нет прав.

Проверьте результат:

ls -l example.txt

Теперь вы должны увидеть:

-rwx------ 1 root root 0 Jul 29 15:11 example.txt

У владельца появились права rwx (чтение, запись и выполнение), а у группы и остальных пользователей прав нет.

Изменение прав доступа к каталогу

Изменение прав доступа к каталогам выполняется аналогично изменению прав доступа к файлам. Создадим новый каталог и изменим его права. Права каталога определяют, кто может просматривать его содержимое, создавать в нём файлы и получать доступ к уже существующим файлам.

Сначала создайте каталог и задайте ему нестандартные права:

mkdir ~/test-dir
chmod 700 ~/test-dir

Теперь проверьте текущие права:

ls -ld ~/test-dir

Параметр -d команды ls -l указывает вывести сам каталог, а не его содержимое. Без -d команда ls показала бы файлы и подкаталоги внутри test-dir, который сейчас пуст. Вы должны увидеть:

drwx------ 2 labex labex 4096 Jul 29 15:45 /home/labex/test-dir

Буква d в начале означает, что это каталог. Обозначение rwx------ показывает, что владелец имеет права на чтение, запись и выполнение, а у группы и остальных пользователей прав нет. Для каталогов:

  • Право на чтение (r) позволяет просматривать содержимое каталога с помощью ls.
  • Право на запись (w) позволяет создавать в каталоге файлы и подкаталоги.
  • Право на выполнение (x) позволяет обращаться к файлам и подкаталогам внутри каталога, то есть выполнять переход в него с помощью cd.

Теперь измените права доступа:

chmod -R 755 ~/test-dir

В этой команде:

  • Параметр -R применяет изменение рекурсивно ко всем файлам и подкаталогам. В данном случае каталог пуст, но при работе с каталогами полезно указывать этот параметр, даже если сейчас внутри ничего нет: позднее туда могут быть добавлены файлы.
  • 755 даёт владельцу права на чтение, запись и выполнение, а группе и остальным пользователям — права на чтение и выполнение.

Разберём значение 755:

  • Владелец (7): чтение (4) + запись (2) + выполнение (1) = 7
  • Группа (5): чтение (4) + выполнение (1) = 5
  • Остальные (5): чтение (4) + выполнение (1) = 5

Проверьте результат:

ls -ld ~/test-dir

Теперь вы должны увидеть:

drwxr-xr-x 2 labex labex 4096 Jul 29 15:45 /home/labex/test-dir

Вы ясно увидите изменение прав: раньше доступ был только у владельца (700), а теперь владелец имеет полный доступ, а группа и остальные пользователи могут читать и выполнять (755). Теперь любой пользователь может просматривать содержимое test-dir и обращаться к файлам внутри него, но только владелец может создавать новые файлы и изменять существующие.

Использование символьной записи прав доступа

Числовая запись компактна, но символьная может быть понятнее, особенно если нужно изменить только одно право. В символьной записи буквы обозначают пользователя, группу и остальных пользователей, а операторы — добавление или удаление прав.

На этом шаге вы создадите небольшой shell-скрипт и добавите ему право на выполнение.

Сначала создайте новый файл скрипта с содержимым:

cd ~/project
echo '#!/bin/bash' > script.sh
echo 'echo "Hello, World"' >> script.sh

Эти команды выполняют две операции:

  • Первая команда echo создаёт script.sh и записывает в него первую строку #!/bin/bash. Эта строка называется shebang и указывает Linux запускать скрипт с помощью Bash.
  • Вторая команда echo добавляет в конец файла новую строку с помощью >>. Она записывает echo "Hello, World", которая при запуске скрипта выведет Hello, World.

Проверьте, что файл содержит две отдельные строки:

cat script.sh

Вы должны увидеть:

#!/bin/bash
echo "Hello, World"

Теперь проверьте исходные права файла:

ls -l script.sh

Вы должны увидеть примерно такой вывод:

-rw-rw-r-- 1 labex labex 32 Jul 29 16:30 script.sh

Как видно, изначально скрипт имеет права на чтение и запись для владельца и группы, а для остальных пользователей — только право на чтение. Права на выполнение отсутствуют, хотя они нужны для запуска файла как программы.

Попробуйте запустить скрипт:

./script.sh

Вы должны увидеть ошибку «Permission denied», поскольку у скрипта пока нет права на выполнение. Часть ./ указывает оболочке запустить скрипт из текущего каталога.

Теперь добавьте владельцу право на выполнение, используя символьную запись:

chmod u+x script.sh

В этой команде:

  • u обозначает пользователя-владельца. Другие варианты: g — группа, o — остальные пользователи, a — все (пользователь, группа и остальные).
  • +x добавляет право на выполнение. Символ + добавляет право, а символ - удаляет его.

Таким образом, u+x означает «добавить владельцу право на выполнение».

Проверьте изменение:

ls -l script.sh

Теперь вы должны увидеть:

-rwxrw-r-- 1 labex labex 32 Jul 29 16:30 script.sh

У владельца появились права rwx (чтение, запись и выполнение).

Снова запустите скрипт:

./script.sh

На этот раз вы должны увидеть такой вывод:

Hello, World

Этот пример показывает, зачем скриптам нужно право на выполнение, а также демонстрирует разницу до и после его добавления. Символьная запись позволяет легко изменять отдельные права без пересчёта всей числовой комбинации.

Итоги

В этой лабораторной работе вы изучили основные команды Linux для управления правами доступа к файлам:

  1. С помощью touch вы создавали новые файлы и обновляли существующие.
  2. Вы научились использовать chown для изменения владельцев файлов и каталогов, включая рекурсивное изменение владельца всей структуры каталогов.
  3. Вы применяли chmod в числовой и символьной записи для изменения прав доступа к файлам и каталогам, а также разобрались в уровнях прав для владельца, группы и остальных пользователей.
  4. Вы рассмотрели практический пример важности прав доступа: для запуска скриптов необходимо право на выполнение.
  5. Вы разобрались в различиях между числовой и символьной записью chmod и в том, когда может быть удобна каждая из них.

Эти команды необходимы для обеспечения безопасности и управления доступом в системах Linux. Всегда осторожно изменяйте права доступа, особенно при использовании sudo: неправильные изменения могут серьёзно повлиять на безопасность и работу системы. Перед выполнением команды ещё раз проверьте её и убедитесь, что понимаете последствия вносимых изменений.