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

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

Введение

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

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

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

Сначала убедитесь, что вы находитесь в нужном каталоге. Мы будем работать в каталоге project:

cd ~/project

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

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

touch example.txt

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

ls

ls означает «list» (список). Она показывает файлы и каталоги в вашем текущем местоположении. Вы должны увидеть 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 выполняет команду с привилегиями суперпользователя. Скорее всего, вас попросят ввести пароль. chown требует повышенных привилегий, так как это мощная команда, которая может повлиять на безопасность системы. Без sudo вы получите ошибку "Permission denied" (отказано в доступе).
  • chown — команда для изменения владельца.
  • root:root указывает нового владельца и группу (оба установлены в root). Синтаксис: владелец:группа.
  • example.txt — целевой файл.

Проверим изменения:

ls -l example.txt

Теперь вы должны увидеть, что и владелец, и группа изменились на root:

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

Если вы все еще видите labex вместо root, убедитесь, что вы использовали 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 не существовал, создание new-dir/subdir завершилось бы ошибкой.
  • 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 (рекурсивно) заставляет 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 говорит ls вывести информацию о самом каталоге, а не о его содержимом. Без -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, так как неправильные изменения могут иметь серьезные последствия для безопасности и функциональности системы. Всегда дважды проверяйте свои команды перед их выполнением и понимайте последствия вносимых вами изменений.