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

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

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

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

Достижения

После завершения этого практического занятия вы сможете:

  • Использовать chmod для изменения прав доступа к файлам
  • Использовать chown для изменения владельца файлов
  • Использовать touch для создания новых файлов и обновления временных меток существующих файлов

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL shell(("Shell")) -.-> shell/SystemInteractionandConfigurationGroup(["System Interaction and Configuration"]) linux(("Linux")) -.-> linux/UserandGroupManagementGroup(["User and Group Management"]) shell(("Shell")) -.-> shell/BasicSyntaxandStructureGroup(["Basic Syntax and Structure"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) shell(("Shell")) -.-> shell/ControlFlowGroup(["Control Flow"]) shell/BasicSyntaxandStructureGroup -.-> shell/comments("Comments") linux/BasicFileOperationsGroup -.-> linux/touch("File Creating/Updating") linux/BasicFileOperationsGroup -.-> linux/chown("Ownership Changing") linux/BasicFileOperationsGroup -.-> linux/chmod("Permission Modifying") linux/FileandDirectoryManagementGroup -.-> linux/mkdir("Directory Creating") shell/ControlFlowGroup -.-> shell/cond_expr("Conditional Expressions") shell/SystemInteractionandConfigurationGroup -.-> shell/globbing_expansion("Globbing and Pathname Expansion") linux/UserandGroupManagementGroup -.-> linux/sudo("Privilege Granting") subgraph Lab Skills shell/comments -.-> lab-270252{{"Права доступа к файлам"}} linux/touch -.-> lab-270252{{"Права доступа к файлам"}} linux/chown -.-> lab-270252{{"Права доступа к файлам"}} linux/chmod -.-> lab-270252{{"Права доступа к файлам"}} linux/mkdir -.-> lab-270252{{"Права доступа к файлам"}} shell/cond_expr -.-> lab-270252{{"Права доступа к файлам"}} shell/globbing_expansion -.-> lab-270252{{"Права доступа к файлам"}} linux/sudo -.-> lab-270252{{"Права доступа к файлам"}} end

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

Начнем с создания нового файла с помощью команды 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 запускает команду с привилегиями 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

Если вы по-прежнему видите 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 и получать доступ к файлам в ней, но только владелец может создавать новые файлы или изменять существующие.

Использование символьного обозначения для прав доступа

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

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

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

Эта команда выполняет две задачи:

  1. Она создает новый файл с именем script.sh. Расширение .sh обычно используется для shell - скриптов. Shell - скрипты - это исполняемые файлы, содержащие последовательность команд, которые выполняются по порядку.
  2. Она записывает две строки в этот файл:
    • #!/bin/bash (называемая шебангом) сообщает системе, что это bash - скрипт. Строка шебанга указывает интерпретатор, который должен быть использован для выполнения скрипта. В данном случае это /bin/bash, который является путем к интерпретатору Bash.
    • echo "Hello, World" - это команда, которая выведет "Hello, World" при запуске скрипта. Команда echo просто выводит текст, который следует за ней.
    • \n - это символ новой строки, который обеспечивает размещение команд на отдельных строках в файле.

Теперь проверим начальные права доступа к скрипту:

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, так как неправильные изменения могут иметь серьезные последствия для безопасности и функциональности системы. Всегда проверяйте свои команды перед выполнением и понимайте последствия вносимых изменений.