Права доступа к файлам и директориям в UNIX

Одной из сложных задач для начинающего веб-разработчика является правильное использование chmod для установки прав доступа к файлам на UNIX и Linux веб-серверах. Вы должны установить правильные права на CGI скрипты, чтобы не появлялись эти ужасные сообщения «500 Server Error». В этом руководстве, мы собираемся объяснить концепцию прав, и показать вам как устанавливать права используя FTP утилиты или при помощи Telnet.

[Disclaimer: Данная статья была переведена в рамках «Конкурса на лучший перевод статьи» на сервисе Quizful. Ссылка на оригинал находится внизу страницы.]

Что такое права?

На веб-сервере UNIX, каждый отдельный файл и папка, хранящиеся на жестком диске имеет ряд прав, связанных с ним, в котором говорится, кто и что может делать с файлом. У каждого файла (и папки) также есть «владелец» и «группа» связанная с ним. Если вы создали файл, то как правило владельцем файла являетесь вы и ваша группа, или группе связанной с директорией в которой вы создали файл.

Кто может изменять права?

Есть три типа пользователей которые имеют доступ к файлам — Владелец файла, члены Группы, владеющей файлом и Остальные (все прочие). В UNIX эти 3 типа пользователей обозначаются буквами U (для Владельца, или Юзер), G (для Группы), и O (для Остальных).

Какие права можно устанавливать?

Есть три основных прав доступа котороые могут быть применены к файлам и директориям:

  1. Вы можете читать содержимое файлов. Для каталогов — просматривать перечень имен файлов в каталоге.
  2. Вы можете писать (или изменять) файл. Для каталогов — создание и удаление файлов из директории.
  3. Вы можете исполнять (запускать) файлы, если это бинарные программы или скрпты. Для каталогов — иметь доступ к файлам в директории.

Что означают все эти буквы и цифры?!

Здесь мы рассмотрим основы. Как вы можете заметить их не так уж и много на самом деле!

Путаница часто происходит, когда Вам надо сделать установку прав на сервере. Для CGI скриптов необходимо устанавливать права что-то вроде «Chmod 755» или «Убедитесь, что файл является исполняемым». Кроме того, при использовании FTP или SSH, вы увидите множество забавных букв рядом с файлами (например, rwxrw-rw). Сейчас мы объясним, что означают эти иероглифы!

Когда вы подключаетесь по FTP на ваш веб-сервер, вы вероятно увидите что-то типа этого возле каждого файла и папки:

drwxrwxrwx

Эта последовательность букв drwxrwxrwx означает права, установленные для этой папки (заметим, что их часто называют атрибутами FTP программы). Давайте разберем, что каждая из этих букв означает:

d         r    w     x       r    w     x       r    w     x
Owner Group Other
Directory Read Write Execute Read Write Execute Read Write Execute

Как вы можете видеть, последовательность букв разделяется на 3 колонки по 3 буквы каждая, обозначающие каждый из типов пользователей (владелец, члены группы, и все остальные).

Существует также и буква «d» атрибут слева, который говорит нам о том, что данный объект является директорией.

Если любая из этих букв заменена на дефис (-), то это означает, что разрешение не установлено. Например:

drwxr-x--x 

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

-rw-rw-rw-

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

-rw-r--r-- 

Файл который может прочитать и изменить пользователь, а прочитать только пользователи группы и остальные пользователи.

Использование чисел вместо букв

Как мы уже раньше говорили, вас будут часто просить установить права с помощью чисел таких, как «set 755 permissions». Что означают эти цифры?

Каждое из трех чисел соответствует каждой букве (r w x) о которых мы говорили ранее. Иными словами, первое число определяет права для владельца, второе число определяет права для группы, а третье число определяет права для всех остальных.

Каждое число может принимать одно из восьми значений в диапазоне от 0 до 7. Каждое значение соответствует определенным правам на чтение, запись и выполнение «, как указано в этой таблице:

Number     Read(R)     Write(W)     Execute(X)
0 No No No
1 No No Yes
2 No Yes No
3 No Yes Yes
4 Yes No No
5 Yes No Yes
6 Yes Yes No
7 Yes Yes Yes

Для примера:

777 =  rwxrwxrwx
755 = rwxr-xr-x
666 = rw-rw-rw-
744 = rwxr--r--

Настройка разрешений

Два самых распространённых способа установить разрешения на файлы и папки это с помощью FTP или SSH. Давайте рассмотрим первым FTP.

Установка разрешений с помощью FTP

С помощью FTP вы сможете установить права на ваши файлы, выбрав файл (в отдельном окне) и правой кнопкой мыши выбрать необходимые вм опции, такие как CHMOD или Set permissions или же выбрав в меню пункт CHMOD / Set permissions.

Как видите, довольно легко установить или убрать права на чтение, запись и выполнение для владельца, группы и других, используя флажки. Кроме того, вы можете ввести в эквиваленте 3-значный номер, если вы уже знаете как (см. предыдущий раздел). Все очень просто!

Установка разрешений с помощью SSH

Другой распространенный способ установить разрешения на файлы с помощью SSH (или консоли). Это в целом быстрее, если вы хотите изменить права на большое количество файлов одновременно (например, изменение всех. CGI файлов в папке только на вполнение).

После того, как вы подключитесь по SSH к вашему серверу, и залогинетесь в систему, перейдите в папку, содержащую файлы, которые вы хотите изменить, например:

cd mysite/cgi-bin 

Использование буквенного способа

Вы можете использовать буквы u (владелец / пользователь), g (группы) и o (другие), чтобы установить разрешение для каждого из типов пользователей, а также r (чтение), w (запись) и x (выполнение) для установки прав.

Вы также можете использовать «a» вместо u, g и o, что является синонимом для всех пользователей (u, g, o).

Вы можете назначить разрешения, используя либо знак плюс (+), которое означает «добавить эти права», знак минус (-), что означает «удалить эти разрешения», или знак равенства (=), что означает «изменить разрешения для конкретного случая «. Например:

chmod a+x formmail.cgi добавляет разрешение на выполнение для всех пользователей в файле formmail.cgi (другими словами, делает исполняемый файл).

chmod u=rwx formmail.cgi чтение, запсь и выполнение для владельца (разрешений для группы и для других остаются без изменений).

chmod go-w formmail.cgi удаляет запись для группы и для других, в результате чего разрешения владельца остаются неизменными.

Проверка разрешений

Вы можете проверить разрешения на все файлы и папки в текущей директории с помощью команды:

ls -l

Это покажет Вам разрешение для каждого файла и папки, так же, как и FTP программы.

Happy CHMOD’ing!

———-
Оригинальный текст статьи: Understanding Permissions (UNIX)

Команды FreeBSD

Здесь представленны основные команды FreeBSD для мониторинга системы и не только.


Информация о дисках

mount — показывает смонтированные подразделы и флаги из монтирования
df — показывает смонтированные подразделы, их размер и свободное место на них
fdisk /dev/ad0 — показывает информацию о диске ad0 и разделах на нем
disklabel /dev/ad0s1 — показывает список подразделов в первом разделе диска ad0
swapinfo — показывает список подразделов свопинга на дисках и их использование
fstat — показывает список открытых файлов (имена файлов не выводятся)
pstat -f — выводит список открытых файлов (имена файлов не выводятся)
systat -vmstat n — каждые n секунд выводит количество транзакций с диском в секунду, объем записанных/считанных данных на диск в секунду, средний размер транзакции и процент времени в течение которого диск был занят работой.
iostat — выводит информацию, аналогичную systat -vmstat, но не выводит занятости диска по времени и может выводить среднюю статистику с момента загрузки.
vmstat — выводит количество операций на диске в секунду
/stand/sysinstall — можно посмотреть и изменить разметку диска и монтирование
less /etc/fstab — таблица монтирования при загрузке
du -h /путь к каталогу — выводит размер каталога
gstat — выводит статистику о записи на диски(очередь) очень удобно!!!

Ремонт файловой системы

fsck — проверка диска на ошибки

Информация о процессоре и памяти

systat -vmstat n(systat -v 1) — вывод показателей загрузки (number of jobs in the run queue averaged over 1, 5 and 15 min), состояния памяти (в страницах), количества процессов в группах, количество вызовов специальных функций ядра (traps, interrupts, system calls, network software interrupts), использование процессора, трансляции имен, активность свопа, прерывания, а также информацию по использованию диска (см)
top — аналогичная информация в сокращенном виде + использование памяти и свопа в мегабайтах, список процессов, отсортированных по использованию процессора.
ps afx — список запущенных процессов и время процессора на каждый

Информация о сети

ifconfig — список сетевых интерфейсов с ip-адресами, масками, mac-адресами, типами карт и их статусами (названия карточек можно посмотреть в файле конфигурации ядра)
systat -ifstat n — объем трафика за n секунд на всех сетевых интерфейсах
netstat — вывод активных сетевых соединений (сокетов)
systat -netstat n — аналог netstat в реальном времени
systat -ip n — таблица IP-пакетов и ошибок по типам за n секунд
systat -tcp n — таблица TCP-пакетов и ошибок по типам за n секунд
systat -icmp n — таблица ICMP-пакетов и ошибок по типам за n секунд
netstat -ibt — список интерфейсов, разбитых по ip-адресам (!) с объемом трафика на каждом, количеством ошибок, коллизий, значением watchdog-таймера
netstat -r — таблица маршрутизации
arp -a — таблица ARP
tcpdump -i rl0 host 192.168.61.20 and port 80 — сниффер пакетов на интерфейсе rl0, фильтрующий пакеты, содержащие адрес 192.168.61.20 и порт 80
trafshow -i rl0 — программа для сортировки и вывода сетевых потоков (устанавливается дополнительно пакетом или из портов)

Службы времени

date — выводит текущее время и дату
date 201010012312 — устанавливает время 23:12 01-10-2010
— выводит, сколько времени назад система загрузилась и залогиненных пользователей
last — выводит историю перезагрузок и входов пользователей

Работа над файлами
tar -xzf archive.tgz — разархивировать архив *.tar.gz
unzip archive.zip — разархивировать архив *.zip

Поиск файлов
find /etc -name «*.conf» -найти в каталоге /etc все файлы с расширением .conf
find /etc -name «moy_f*» -найти в каталоге /etc все файлы имя которого начинается с moy_f

По материалам syscentr

Как добавить нового пользователя в FreeBSD и поставить ему sudo (root) права

Для выполнения некоторых команд в системе FreeBSD требуется повышенные права (sudo). Разберемся, как создать пользователя во FreeBSD и выдать ему sudo права.

Содержание:

1. Создание пользователя во FreeBSD

2. Настройка sudo (root права) пользователю во FreeBSD

Я думаю что это не сильно сложные шаги, но все же рассмотрим их более подробно.

1. Создание пользователя во FreeBSD

Для начала нам необходимо получить повышенные права (root). Для этого выполним команду su и введем пароль от пользователя root:

su
Password:
root@freebsd:/home/username #

Теперь переходим к созданию пользователя. Для это воспользуемся командой adduser:

# adduser

Рассмотрим поля, которые нам далее придется заполнять:

Username: sysadmin
имя создаваемого пользователя
Full name: Ivan Ivanov
полное имя, можно оставить пусты, просто нажать Enter
Uid (Leave empty for default):
user id, можно ввести самому, начиная с номера 1001, либо нажать Enter, система выберет сама
Login group [sysadmin]:
группа в которую входит создаваемый пользователь, по умолчанию совпадает с именем
Login group is sysadmin. Invitesysadmin into other groups? []:
включить-ли пользователя в другие группы, если нет, жмем Enter
Login class [default]:
класс пользователя, о них поговорим чуть позже, на данном этапе, жмем Enter
Shell (sh csh tcsh nologin) [sh]: sh
здесь предлагается выбрать системную оболочку, если вы не собираетесь давать данной учетной записи, 
удаленный доступ к системе, например через SSH, вписываем nologin, 
либо выбираем из предложенных вариантов, я обычно ставлю sh
Home directory [/home/sysadmin]:
назначаем домашнюю директорию, если значение по-умолчанию устраивает, жмем Enter
Home directory permissions (Leave empty for default):
права доступа на домашнюю директорию, что-бы оставить по-умолчанию, жмем Enter
Use password-based authentication? [yes]:
использовать-ли авторизацию по паролю
Use an empty password? (yes/no) [no]:
можно-ли использовать пустые пароли
Use a random password? (yes/no) [no]:
система предлагает сгенерировать вам пароль, если вы хотите согласиться, нужно написать yes 
на заключительном этапе создания учетной записи, будет показан сгенерированный пароль
если предпочитаете ставить пароль вручную, жмите Enter
Enter password:
вводим пароль, имейте в виду, программа не покажет, что вы вообще что-либо вводите
так что будьте внимательны
Enter password again:
повторный ввод пароля
Lock out the account after creation? [no]:
заблокировать-ли учетную запись после создания

Если Вы планируете выдать в дальнейшем данному пользователю повышенные права, то сразу можно его при создании поместить в группу wheel.
В принципе создание пользователя на этом завершено

2. Настройка sudo (root права) пользователю во FreeBSD

Для начала нам необходимо установить sudo. Устанавливать будем из пакетов. Для начала обновим пакеты:

pkg update

Теперь установим сам пакет sudo

pkg install sudo

После установки у нас появится файл sudoers в директории /usr/local/etc. Давайте проверим, появился ли он?:

# cd /usr/local/etc
# ls -l sudoers
-r--r----- 1 root wheel 3646 20 авг. 21:36 sudoers

Да, файл есть, все хорошо. Данный файл создается с атрибутами «только чтение». Нам необходимо разрешить его редактирование:

# chmod u+w /usr/local/etc/sudoers

Давайте теперь отредактируем файл:

# mcedit /usr/local/etc/sudoers

находим файле строку root ALL=(ALL) ALL и под ней добавим нашего созданного пользователя:

...
##
## Runas alias specification
##

##
## User privilege specification
##
root ALL=(ALL) ALL
 sysadmin ALL=(ALL) ALL

## Uncomment to allow members of group wheel to execute any command
# %wheel ALL=(ALL) ALL

## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL

## Uncomment to allow members of group sudo to execute any command
# %sudo ALL=(ALL) ALL

Для того, чтобы разрешить всей группе права суперпользователя, необходимо просто раскомментировать строчку %wheel ALL=(ALL) NOPASSWD: ALL Если вы ее расскоментируете в том виде, в котором она есть, то при вызове команды от суперпользователя пароль запрашиваться не будет. Чтобы пароль запрашивался, уберите надпись NOPASSWD. На этом все. Теперь, для того, чтобы вызвать команду с повышенными правами необходимо вначале набрать su. Например:

$ su service zabbix-server restart

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

По материалам sysadmin-note.ru