Linux и Bash

4.1 Владелец и группа

В Linux каждый файл и каталог имеет владельца и группу. Это основа системы безопасности.

Владелец файла

Владелец — это пользователь, который создал файл или каталог. Только владелец и root могут изменять права доступа к файлу.


                        ls -l file.txt
                        # -rw-r--r-- 1 user group 1234 Dec 15 10:30 file.txt
                        #           ↑     ↑
                        #        владелец группа

Группа файла

Группа — это набор пользователей, которые имеют одинаковые права доступа к файлу. Пользователь может принадлежать нескольким группам.

chown — изменение владельца

chown newuser file.txt      # изменить владельца
chown user:group file.txt   # изменить владельца и группу
chown -R user:group dir/    # рекурсивно для каталога

chgrp — изменение группы


chgrp newgroup file.txt     # изменить группу
chgrp -R newgroup dir/      # рекурсивно для каталога
Только root может изменять владельца файла. Обычные пользователи могут изменять группу только на те, в которых они состоят.

4.2 Права доступа

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

Три типа прав

r (read) — чтение

  • Для файлов: можно читать содержимое
  • Для каталогов: можно просматривать содержимое

w (write) — запись

  • Для файлов: можно изменять содержимое
  • Для каталогов: можно создавать и удалять файлы

x (execute) — выполнение

  • Для файлов: можно запускать как программу
  • Для каталогов: можно входить в каталог

Три категории пользователей


                        ls -l file.txt
                        # -rw-r--r-- 1 user group 1234 Dec 15 10:30 file.txt
                        #  ↑   ↑   ↑
                        #  |   |   └─ права для остальных (other)
                        #  |   └───── права для группы (group)
                        #  └───────── права для владельца (owner)
                    

chmod — изменение прав


                        chmod u+x file.txt          # добавить выполнение для владельца
                        chmod g-w file.txt          # убрать запись для группы
                        chmod o+r file.txt          # добавить чтение для остальных
                        chmod u+x,g-w,o+r file.txt  # комбинация прав
                    

4.3 Числовое представление прав

Права доступа можно задавать числовым способом, что часто удобнее.

Числовые значения

Базовые значения

  • 4 — чтение (r)
  • 2 — запись (w)
  • 1 — выполнение (x)

Комбинирование прав

# Права складываются:
                        # 4 (r) + 2 (w) + 1 (x) = 7 (rwx)
                        # 4 (r) + 0 (w) + 1 (x) = 5 (r-x)
                        # 4 (r) + 2 (w) + 0 (x) = 6 (rw-)
                        # 0 (r) + 0 (w) + 0 (x) = 0 (---)
                    

Примеры числовых прав


                        chmod 755 file.txt          # rwxr-xr-x
                        chmod 644 file.txt          # rw-r--r--
                        chmod 600 file.txt          # rw-------
                        chmod 777 file.txt          # rwxrwxrwx
                    

Расшифровка 755

chmod 755

  • 7 (4+2+1) — владелец: rwx
  • 5 (4+0+1) — группа: r-x
  • 5 (4+0+1) — остальные: r-x
Популярные комбинации:
• 755 — исполняемые файлы
• 644 — обычные файлы
• 600 — приватные файлы
• 777 — полные права (не рекомендуется)

4.4 Анализ прав доступа

Умение читать и анализировать права доступа — важный навык для работы с Linux.

Чтение вывода ls -l


                        ls -l
                        # -rwxr-xr-x 1 user group 1234 Dec 15 10:30 script.sh
                        # drwxr-xr-x 2 user group 4096 Dec 15 10:30 directory/
                        # lrwxrwxrwx 1 user group    8 Dec 15 10:30 link -> target
                    

Типы файлов

Первый символ

  • - — обычный файл
  • d — каталог
  • l — символическая ссылка
  • c — символьное устройство
  • b — блочное устройство

Практические примеры

# Файл с правами 644 (rw-r--r--)
                        -rw-r--r-- 1 user group 1024 Dec 15 10:30 document.txt
                        
                        # Исполняемый файл с правами 755 (rwxr-xr-x)
                        -rwxr-xr-x 1 user group 2048 Dec 15 10:30 program
                        
                        # Каталог с правами 755 (rwxr-xr-x)
                        drwxr-xr-x 2 user group 4096 Dec 15 10:30 folder/
                        
                        # Приватный файл с правами 600 (rw-------)
                        -rw------- 1 user group  512 Dec 15 10:30 secret.txt
                    

Проверка прав доступа


                        test -r file.txt && echo "Можно читать" || echo "Нельзя читать"
                        test -w file.txt && echo "Можно писать" || echo "Нельзя писать"
                        test -x file.txt && echo "Можно выполнять" || echo "Нельзя выполнять"