Введение
В этой лабораторной работе вы подробно изучите права доступа к файлам в 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
Разберём этот вывод:
-rw-rw-r--— права доступа к файлу (подробнее мы рассмотрим их на шаге 4). Первый символ указывает тип объекта:-означает обычный файл,d— каталог и т. д. Остальные символы обозначают права на чтение, запись и выполнение для владельца, группы и остальных пользователей.- Первый
labex— текущий владелец файла. Это имя пользователя, которому принадлежит файл. - Второй
labex— текущая группа файла. Группа — это набор пользователей, которые могут совместно использовать права доступа. 0— размер файла в байтах. Поскольку файл пустой, его размер равен нулю.Jul 29 15:11— дата и время последнего изменения.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 для управления правами доступа к файлам:
- С помощью
touchвы создавали новые файлы и обновляли существующие. - Вы научились использовать
chownдля изменения владельцев файлов и каталогов, включая рекурсивное изменение владельца всей структуры каталогов. - Вы применяли
chmodв числовой и символьной записи для изменения прав доступа к файлам и каталогам, а также разобрались в уровнях прав для владельца, группы и остальных пользователей. - Вы рассмотрели практический пример важности прав доступа: для запуска скриптов необходимо право на выполнение.
- Вы разобрались в различиях между числовой и символьной записью
chmodи в том, когда может быть удобна каждая из них.
Эти команды необходимы для обеспечения безопасности и управления доступом в системах Linux. Всегда осторожно изменяйте права доступа, особенно при использовании sudo: неправильные изменения могут серьёзно повлиять на безопасность и работу системы. Перед выполнением команды ещё раз проверьте её и убедитесь, что понимаете последствия вносимых изменений.



