Freebsd как изменить права на папку

Сегодня хочется задеть одну очень скользкую тему: права (и обязанности) на файлы в системах, основанных на Unix.

Сегодня хочется задеть одну очень скользкую тему: права (и обязанности) на файлы в системах, основанных на Unix.

Как всегда, хочется рассказать интересно и не упустить важные моменты. Но многим это просто не надо. Им нужен очередной stackoverflow с ответами, в которые не надо вдумываться… Вжух-вжух и ты ботнет.

Поэтому вот рецепты (tl;dr), а объяснение будет ниже.

Чтобы сменить владельца файлов в директории и во всех поддиректориях (рекурсивно), выполните:

sudo chown -R user:group /home/user/path/to/directory/

Например, чтобы apache смог в какой-то папке сохранять файлы, выполняем:

sudo chown -R www-data:www-data /home/user/www/site/upload/

Чтобы дать права на чтение файла для всех, выполните:

chmod o+r /var/www/index.html

Чтобы сделать это для всей папки и подпапок (рекурсивно):

chmod -R o+r /var/www/index.html

Чтобы для всех файлов в папке (рекурсивно) выставить права «владелец может читать и менять, остальные — только читать»:

find /var/www/html-site -type f -exec chmod 644 {} ;

Чтобы для папки и подпапок (рекурсивно) выставить права «владелец может просматривать содержимое и создавать файлы и папки, остальные — только просматривать»:

find /var/www/html-site -type d -exec chmod 755 {} ;

Чтобы проверить, что у пользователя есть права, самое простое — зайти под ним:

sudo su user_name

— прочитать файл / создать файл прямо под этим пользователем.

Ну и самое интересное, что я нашёл в популярных вопросах:

$ sudo chown -R user:group /data/
chown: неверный пользователь: «user:group»

— замените user на имя пользователя (не «Иван Иванович Иванов», а «ivanov»), а «:group» можно не указывать.

А на самом деле…

Изображение Шпаргалка по командам Linux, FreeBSD и MacOS

Файлы в Unix

Начнём с того, что файлы в Unix бывают разные. Идеология «всё есть файл» предполагает, что файлы — не то, чем кажутся.

  1. Обычный файл — как раз всё то, что мы называем файлом.
  2. Директория — она же «папка», она же «каталог».
  3. Символическая ссылка — этакий ярлык на другой «файл».
  4. Блочное устройство — те же жёсткие диски, флешки.
  5. Символьное устройство — например, терминалы tty.
  6. Канал (fifo) — один из вариантов межпроцессорного взаимодействия.
  7. Unix сокет — ещё один из вариантов межпроцессорного взаимодействия.

Так что даже с понятием «файл» не так уж и просто. Зато есть возможность на всех них единообразно раздавать права, пользоваться ими. Например, можно сделать cat на устройство, echo для записи в сеть и т. д.

Во FreeBSD я успешно делал cat на директорию, правда получал не особо читаемую информацию. Но и её можно было использовать для получения нужной информации о файле типа «каталог».

В особо весёлых Unix-ах, например Plan9 можно использовать вместо интерфейса сокетов файлы типа /net/tcp. В общем, как всегда идеология «всё есть что-то» не имеет границ здравого смысла. И это прекрасно!

Права в Unix

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

Суть модели прав довольно проста:

  1. У каждого файла есть владелец. Владелец устанавливает права доступа на свои файлы (например, командой chmod).
  2. В системе есть супер-пользователь (root), который устанавливает владельцев файлов (например, командой chown).

Теперь подробнее по первому пункту.

Доступ по пользователям делится на 3 группы

  1. Владелец (user) — тот самый, что имеет возможность изменять права доступа.
  2. Группа (group) — какая-то группа пользователей, которая должна иметь определённые права на файл. Посмотреть группы пользователя можно командой
    $ groups gosha
    gosha : gosha adm cdrom sudo dip plugdev lpadmin sambashare libvirtd
    

    — пользователь gosha состоит в группах: gosha adm cdrom sudo dip plugdev lpadmin sambashare libvirtd.

    С другой стороны можно посмотреть всех пользователей, состоящих в группе:

    $ grep cdrom /etc/group
    cdrom:x:24:gosha
    

    Не самый элегантный способ, но работает на всех Unix. Также можно использовать утилиты lid и members.

  3. Все другие (other) — любой пользователь, существующий в системе.

Сами права доступа также делятся на 3 группы

  1. Права на чтения (read или «4» в битовой маске) — право читать файл или читать содержимое директории.
  2. Права на запись (write или «2» в битовой маске) — право писать в файл или создавать файлы в директории.
  3. Право на исполнение (execute или «1» в битовой маске) — право запускать файл (программу, записанную в файле) или переходить по директории вглубь (например, сделать cd в поддиреторию).

Битовая маска прав доступа

Давайте посмотрим права на папку /bin, например, с помощью команды ls -l / | grep bin :

drwxr-xr-x   2 root root  4096 май  6 03:24 bin
||||||||||
|||||||||+-исполнение для всех остальных - разрешено
||||||||+--запись для всех остальных - НЕ разрешено
|||||||+---чтение для всех остальных - разрешено
||||||+----исполнение для группы владельца - разрешено
|||||+-----запись для группы владельца - НЕ разрешено
||||+------чтение для группы владельца - разрешено
|||+-------исполнение для владельца - разрешено
||+--------запись для владельца - разрешено
|+---------чтение для владельца - разрешено
+----------тип файла - диретория

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

  владелец группа остальные
буквенное rwx r-x r-x
числовое (десятичное) 421 401 401
итоговое (сумма) 7 5 5

В приведенной таблице показано, что право чтения, соответствует значению 4, право записи — 2, право выполнения — 1, отсутствие права — 0, складывая данные показатели, можно представлять и назначать права в числовом виде. Таким образом, вместо drwxr-xr-x можно написать 755. Часто можно увидеть именно числовое определение прав доступа — теперь вы понимаете, что это значит.

Часто можно увидеть на файле права 644 — постарайтесь понять, что это значит, чтобы закрепить полученные знания.

Содержание

  • 1 Владение файлом.
  • 2 Чтение прав доступа
  • 3 Изменение владельца файла и прав доступа.
    • 3.1 Числовой способ назначения режима доступа:
    • 3.2 Символическое изменение режимов

Владение файлом.

Вот так, потихоньку, мы и подошли к понимаю модели владения файлами в операционной системе FreeBSD. Да и не только FreeBSD, всем операционным системам семейства UNIX присуща одна и та же структура принадлежности. Файл может принадлежать как пользователю, так и группе.

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

Для того, чтобы увидеть детали полномочий и владений для набора файлов воспользуемся командой ls с ключом -la (-l – ключ, дающий подробный листинг, -a для того, чтобы отобразить “скрытые” файлы, имена которых начинаются с точки).

Первая мысль после увиденного: “Что это?”. Хотя всё намного проще, чем кажется. Строка типа -rw-r–r– обозначает режим файла. Существует три модели прав владения файлом (каталогом): пользователь (user), группа (group) и другие (others). И три модели доступа: чтение (read), запись (write) и выполнение (execute).

Все эти позиции символов – это биты. По номерам.

  1. d, -. Означает “директория” и “файл” соответственно.
  2. r, -. Означает, может ли объект быть прочитан своим владельцем.
  3. w, -. Означает, может ли объект модифицироваться владельцем.
  4. x, -, s. Означает, может ли владелец выполнять этот файл, или (если “s”) может ли элемент выполняться в режиме setuid (об этом ниже).
  5. r, -. Может ли элемент быть прочитан членами той же группы, что и владелец.
  6. w, -. Может ли элемент быть модифицирован группой владельца.
  7. x, -, s. Может ли элемент выполняться группой владельца, либо выполняться в режиме setuid.
  8. r, -. Может ли элемент быть прочитан другим пользователем, отличным от владельца.
  9. w, -. Может ли элемент быть модифицирован другим пользователем, отличным от владельца.
  10. x, -, t. Может ли любой пользователь выполнять этот элемент, либо, (если “t”) элемент является “не поддающимся командам” (“sticky”) каталогом, в котором пользователь не может удалять файлы, если он им не владеет.

Таким образом комбинация:

drw-r–r– означает: директория, владелец может как читать, так и модифицировать, члены его группы могут только читать, любые другие пользователи могут только читать.

-rwxrwxrwx означает, что этот файл могут и читать и модифицировать абсолютно любые пользователи. И т.д.

Удобней всего представлять список прав в таком виде:

[d] [rwx], [rwx], [rwx], т.е. первый бит отдельно, а далее тройками для пользователя, группы и остальных соответственно.

Ну есть также общие правила:

Файл, который может быть удалён – можно и переименовать.

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

Изменение владельца файла и прав доступа.

Будучи суперпользователем, мы можем отдавать свои файлы другим пользователям, либо менять владельца файла по своему усмотрению. Для этого служит команда chown (“change own”):

# chown user file1.txt

установит владельцем file1.txt пользователя user, но не сменит группу. Точно так же можно воспользоваться этой командой, чтобы сменить владельца у каталога:

# chown -R user /home/user

Минуточку. А что это за ключ -R? Мы о нём не говорили! Исправляюсь. Ключ -R означает рекурсивную обработку и применяется для каталогов. То есть для каждого файла в каталоге, для каждого подкаталога в каталоге и для файлов в них. И так далее. В общем применит команду для всех элементов внутри директории. Очень полезно :).

Аналогичным образом действует команда chgrp (“change group”):

# chgrp users file1.txt

изменит группу владельца на users. По умолчанию, FreeBSD создает для каждого пользователя персональную (первичную) группу с именем пользователя. Например пользователь “ivan” будет состоять в группу “ivan” и т.д.

И наконец – смена полномочий доступа. Команда chmod (“change mode”). Эта хитрая команда может работать двумя способами – численном и символическом. Какой удобней – решать вам, но знать лучше всего оба.

Числовой способ назначения режима доступа:

Самый простой способ – установить трёхразрядное восьмиричное число, которое уникально определяет полномочия для каждого типа владения. Каждый разряд относится к определённому режиму владения, соответственно для пользователя, группы и остальных. А биты таковы:

  • 0 – нет полномочий;
  • 1 – выполнение (поиск);
  • 2 – запись;
  • 4 – чтение;

Комбинация вычисляется соответственно суммой этих бит. Например 755 будет значить то же самое, что rwxr-xr-x. 777 – соответственно rwxrwxrwx, 644 – rw-r–r–и т.д. Схема понятна, надеюсь. :)

Таким образом может быть доступно только 3 из 4 разрядов. Четвёртый, “самый старший” разряд управляет дополнительными функциями. Биты сейчас и рассмотрим:

  • 0. Обычные полномочия;
  • 1. “sticky”-бит. Может быть установлен только для каталогов, превращая их в каталоги “только для добавления”, в которые файлы можно добавлять, но не удалять.
  • 2. “setgid”, если этот бит установлен для исполняемого файла, то файл будет выполняться с групповыми полномочиями группы-владельца файла, а не того пользователя, кто запустил файл. Этот бит можно выставить только от имени суперпользователя.
  • 4. “setuid”. Аналогично, если выставлен этот бит для исполняемого файла, то файл будет выполняться от имени владельца, независимо от того, кто запустил файл.

Таким образом назначение прав

# chmod 755 file.txt

на самом деле означает

# chmod 0755 file.txt, но старший бит можно опускать.

Символическое изменение режимов

Доступен второй способ, с указанием алфавитных флагов. Основные литеры:

  • u (пользователь),
  • g (группа),
  • o (другие),
  • a (все).

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

  • r (чтение),
  • w (запись),
  • x (исполнение),
  • t (“липкий” бит),
  • s (setuid, setgid биты).

Операции:

  • + (добавление),
  • – (отъем),
  • = (установка)

Примеры здесь:

  • g+w – добавляет полномочия на запись группе владельцу;
  • +x – добавляет полномочия на исполнение для всех;
  • o-r – отменяет полномочие на чтение остальным пользователям;
  • ugo=rw – устанавливает для всех полномочия чтения-записи;
  • a=rw – аналогично предыдущему;

Какой способ удобней – решать каждому. Но теперь мы знаем оба!

сhmod — установка, изменение прав доступа для файлов и директорий

chmod [-fhv] [-R [-H | -L | -P]] права доступа файл ...

Утилита chmod изменяет биты прав доступа для файлов и директорий, перечисленных в командной строке, в опции права доступа.

Поддерживаются следующие опции:

-f
Не отображать диагностическую информацию, в случае невозможности изменения прав доступа файла, не менять код завершения с целью просигнализировать о неудачном завершении операции.
-H
Если указана опция -R, следовать по символическим ссылкам в командной строке. ( По-умолчанию символические ссылки, встреченные при обходе дерева каталогов не обходятся )
-h
Если файл является символической ссылкой, менять права доступа на саму ссылку, а не на файл, на который она указывает.
-L
Если присутствует опция -R следовать по символическим ссылкам.
-P
Если опция -R присутствует, не следовать по символическим ссылкам ( поведение по-умолчанию ).
-R
Рекурсивно изменить права доступа на все дерево файлов и директорий, находящихся ниже указанного в опции файл.
-v
Вывод отладочной информации. Показывает имена файлов на которые были изменены права доступа. Если опция указано больше одного раза, например -vv, chown покажет имя файла а также старые и новые права доступа в цифровом и символическом представлении.

Опции -H, -L и -P будут проигнорированы, если не указана опция -R. Кроме того, данные опции переопределяют друг друга, использована будет та, которая указана последней.

Изменить права доступа может только владелец файла или директории и суперпользователь.

При успешном выполнении операции chmod возвращает 0 и >0 в противном случае.

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

Права доступа могут быть представлены абсолютными или символическими значениями. Абсолютное значение является восьмеричным номером, получаемым из суммы следующих значений:

4000 ( setuid бит ).
Исполняемый файл с установленным битом setuid, будет запущен с еффективным userid владельца файла.
При установке setuid бита на директорию, все файлы и поддиректории создаваемые в данной директории будут иметь владельца данной директории, а не владельца процесса, создавшего файл или директорию. При условии что текущая файловая система поддерживает такой функционал. Смотрите chmod(2) и опцию suiddir команды mount(8).
2000 ( setgid бит).
Исполняемый файл будет запущен с groupid владельца файла.
1000 ( sticky бит ).
Смотрите chmod(2) и sticky(8)
0400
Разрешить чтение владельцу.
0200
Разрешает запись владельцу.
0100
Для файлов, разрешает запуск владельцу файла, для директорий, разрешает поиск владельцу директории.
0040
Разрешить чтение членам группы.
0020
Разрешить запись членам группы.
0010
Для файлов, разрешает запуск членам группы, для директорий, разрешает поиск членам группы.
0004
Разрешает чтение остальным.
0002
Разрешает запись для остальных.
0001
Для файлов, разрешает запуск остальным, для директории разрешает поиск.

Например, обсолютное значение прав доступа, разрешающих: чтение, запись и выполнение владельцу, чтение и выполнение для членов группы, чтение и выполнение для остальных и без установленных битов SUID и SGID, будутиметь такое значение: 755 (400+200+100+040+010+004+001).

Символическое выражение прав доступа имеет следующую грамматику:

	   mode 	::= clause [, clause ...]
	   clause	::= [who ...] [action ...] action
	   action	::= op [perm ...]
	   who		::= a | u | g | o
	   op		::= + | - | =
	   perm 	::= r | s | t | w | x | X | u | g | o

Символы для who, «u«, «g» и «o«, соответствуют значениям «пользователь«, «группа» и «остальные«. Символ «а» является эквивалентом «ugo«.

Символы perm соответствуют следующим значениям:

	   r	   Бит прав на чтение.
	   s	   Бит SUID и SGID на выполнение.
	   t	   Sticky бит.
	   w	   Бит прав на чтение.
	   x	   The execute/search bits.
	   X	   Бит выполнения/поиска, если файл является директорией или если данные быты установлены в оригинальных правах доступа. Операции с символом X имеют значение только совместно с op равным "+" и будет проигнорирован в любом другом случае.
	   u	   Бит прав для пользователя.
	   g	   Бит прав для членов группы.
	   o	   Бит прав для остальных.

Символы op ( операции )

+ Если значение perm не установлено, ничего не делать. Если не установлено значение для who, будут установлены значения perm для которых не установлены биты в маске создания файлов ( см. umask(2) ).

— Поведение аналогичное «+» только наоборот.

= Если опция who и опция perm не указаны, будут очищены биты прав доступа для пользователя, группы и остальных. Если в perm установлены какие-то биты, они будут присвоены согласно umask. Проще показать)

freebsd88 /# chmod -vv = ./testfile
/testfile: 0100777 [-rwxrwxrwx ] -> 0100000 [---------- ] # Все биты били сброшены
freebsd88 /# chmod -vv =r ./testfile
/testfile: 0100000 [---------- ] -> 0100444 [-r--r--r-- ] # Установить биты прав на чтение для всех.
freebsd88 /# chmod -vv =rwx ./testfile
/testfile: 0100200 [--w------- ] -> 0100755 [-rwxr-xr-x ] # В этом случае права доступа устанавливаются согласно umask.
freebsd88 /# chmod -vv u= ./testfile
/testfile: 0100755 [-rwxr-xr-x ] -> 0100055 [----r-xr-x ] # Сбрасываем все права для пользователя.
freebsd88 /# chmod -vv g=rwx ./testfile
/testfile: 0100000 [---------- ] -> 0100070 [----rwx--- ] # Устанавливаем все права для группы.

Классические примеры:

 
      644	   Права доступа на чтение для всех и на запись только для владельца.

     go-w	   Запретить права на запись для группы и остальных.

     =rw,+X	   Установить права на чтение и запись в значения по умолчанию, но сохранить права на исполнение в текущей установке.

     +X 	   Установить права доступа поиск/выполнение для файла или дректории для всех.

     755           Сделать файл читаемым/исполняемым для всех и дать права на запись только для владельца.
     u=rwx,go=rx
     u=rwx,go=u-w  

     go=	   Сбросить все биты прав доступа для группы и остальных.

     g=u-w	   Установить биты прав для группы какие установлены для владельца, но снять бит на запись.

СМОТРИТЕ ТАКЖЕ
chflags(1), install(1), setfacl(1), chmod(2), stat(2), umask(2), fts(3), setmode(3), symlink(7), chown(8), mount(8), sticky(8)
администрирование серверов

Изменить владельца и права доступа на файлы и папки в Linux и *BSD системах

изменение прав доступа на файл Linux и FreeBSD

Представленная ниже информация будет полезная начинающим Linux и *BSD системным администраторам. По большому счету, в любой операционной системе, будь то Linux, Windows или FreeBSD, корректная работа приложений, сервисов и безопасность системы в целом напрямую зависит от прав доступа  на файлы и папки. Используя ниже приведённые средства, можно решить практически 90% проблем, возникающих при настройке прав доступа.

Сменить владельца для всех папок и файлов. Для этих целей в Unix используется команда chown. Она обладает рядом параметров:

  • Опции. Например, для того, чтобы изменения коснулись не только данной директории, но и всех поддиректорий, нужно применить команду рекурсивно, т.е. с параметром «-R».
  • Владелец или группа владельцев («user:group» или «user»).
  • Пути до папок / файлов, к которым нужно применить команду. Например, «/mnt/pool1/dts1/backup».

Таким образом, команда для смены смены владельца (и группы владельцев) для директорий и всех вложенных папок и фалов будет выглядеть так:

sudo chown -R user:group /home/user/dir/

Изменить права доступа на файл или папку  в Linux и *BDS системах можно командой chmod. Стоит отметить, что в Unix имеются свои особенности в работе данной команды и принципа разделения прав. Так, кроме владельца файла или папки, можно настроить, какие операции может выполнять этот самый владелец и группа, а также все остальные пользователи. В Unix идёт разделение возможностей следующим способом — владелец, группа владельцев и другие. Также присутствует следующее разделение прав:

  • Право на запуск файла (для папок — проход по директории).
  • Право на изменение файла (создание и удаление файлов и папок в директории)
  • Право на чтение файла (для папок — это право на просмотр содержимого директории)

Для удобства использования и запоминания, используется следующая кодировка:

  • запуск — 1
  • изменение — 2
  • чтение — 4

Складывая данные цифровые обозначения мы получим набор прав, предоставляемый владельцу/группе/другим. Разберем данную информацию на примере:

Изменять файл имеет право только владелец, группа владельцев может читать, остальные — ничего не могут, соответственно команда будет такой:

chmod 640 /media/fileshare/file.txt

Создавать файлы в папке могут все, но видит их только владелец:

chmod 622 /media/fileshare/messages/

Чтобы все могли запускать какую-либо программу, но никто, кроме владельца, не мог её редактировать:

chmod 711 /media/share/exec

Для изменения прав на все вложенные файлы и папки (т.е. рекурсивно) используется опять же ключ «-R».

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

Изменение прав только на файлы или только на папки  — команда find.  При этом файлы обозначаются как file (f), а директории, соответственно —  d. Например:

chmod -R 775 $(find . -type d)

nas4free — программное обеспечение на основе FreeBSD. Поэтому вся основа — файлы, папки, права доступа — как в этой оси. (И вся это основа — очень близка к Linux, хотя и не полностью совпадает). Я попытаюсь предельно кратко и поверхностно описать эти самые права. Более полное и корректное описание см «Руководство FreeBSD» Права доступа. В соседних главах, кстати, тоже есть что почитать долгими зимними вечерами ;)

С правами доступа к файлам на NAS вы обычно сталкиваетесь, когда при попытке удалить файл на Windows шаре, а система не даёт. Если посмотреть на такой файл в файловом менеджере nas4free (как пример — files.db на картинке), то


в столбце справа видим запись -rw-r—r—. А у папки — drwxr-xr-x. Можно догадаться, что первая буква позволяет отличить папку (от слова directory) от файла. Так и есть. Бывают и другие значения, например l — (от link) софтлинк, ссылка на файл, примерно как ярлык в Windows.

Остальные 9 букв — три тройки. Первая тройка флагов — права для пользователя-владельца файла. Вторая — для тех, кто состоит в той же группе, что и основная группа владельца и третья — для всех прочих. В нашем примере для файла files.db владелец может его читать ( r — read), писать в него (включая изменять содержимое и удалять; w — write) и исполнять как программу (x — eXecute). Для папки флаг x имеет немного другое значение. Если не вдаваться в детали — для нормального чтения папки должны быть подняты флаги r и x.

Как менять права?
NB хорошая практика — давать доступ тем пользователям и туда, куда им положено. Она обязательна на работе. Да и дома позволяет ограничить доступ членам семьи туда, где они что-то могут по незнанию поломать. Так что если вы можете внедрить и использовать такую практику дома — так и делайте. А описываемая ниже практика с полным доступам ко всем данным годится только для важного частного случая домашней доверенной сети без доступа извне, в которой кроме вас никто файлы не пишет-стирает.

Для новичка наиболее простой способ сменть права одному-двум файлам — через файловый менеджер. Кликаем мышкой на строку прав файла (напр -rw-r—r—) — открывается диалог редактирования прав.

Но если хочется разом изменить права многим файлам в многих подпапках — то без командной строки не обойтись.

Команда ls c ключами la показывает полную информацию о файлах, включая права и владельцев

n4fodroid: ~# ls -la /mnt/Pool/Media/
total 116779
drwxrwxrwx  4 root       wheel              6 Jan  6 01:07 .
drwxr-xr-x  6 vboxusers  vboxusers          6 Jan  4 22:39 ..
drwxr-xr-x  2 ftp        wheel              3 Jan  3 21:38 .wd_tv
drwxrwxrwx  5 ftp        wheel              5 Dec 28 01:39 SyncThing
-rw-r--r--  1 root       wheel          12351 Jan  6 01:07 lortr.S01E06.MP4.torrent
-rwxrw-rw-  1 ftp        wheel      119389144 Jan  4 23:14 pi2_11.xz

Команда chmod меняет права доступа

n4fodroid: ~# chmod 777 /mnt/Pool/Media/lortr.S01E06.MP4.torrent
n4fodroid: ~# ls -la /mnt/Pool/Media/
total 116779
drwxrwxrwx  4 root       wheel              6 Jan  8 17:56 .
drwxr-xr-x  6 vboxusers  vboxusers          6 Jan  4 22:39 ..
drwxr-xr-x  2 ftp        wheel              3 Jan  3 21:38 .wd_tv
drwxrwxrwx  5 ftp        wheel              5 Dec 28 01:39 SyncThing
-rwxrwxrwx  1 root       wheel          12351 Jan  6 01:07 lortr.S01E06.MP4.torrent
-rwxrw-rw-  1 ftp        wheel      119389144 Jan  4 23:14 pi2_11.xz

права 777 — это обозначение полных прав доступа — всем разрешено всё.
[Подробнее…]

Значение

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

Список файлов каталога

0 Ничего не разрешено ---
1 Нельзя читать и писать, разрешено исполнять --x
2 Нельзя читать и исполнять, разрешено писать -w-
3 Нельзя читать, разрешено писать и исполнять -wx
4 Разрешено читать, нельзя писать и исполнять r--
5 Разрешено читать и исполнять, нельзя писать r-x
6 Разрешено читать и писать, нельзя исполнять rw-
7 Разрешено все rwx


Ключ -R применяет команду рекурсивно — к папке, на которую команда дана, ко всем подпапкам в этой папке, ко всем файлам в этих папках.

n4fodroid: ~# chmod -R 777 /mnt/Pool/Media/test

даст полный доступ ко всему содержимому папки /mnt/Pool/Media/test

Обращаться с ОСТОРОЖНОСТЬЮ. Например, команда chmod -R 777 /mnt/Pool/Media даст полный доступ к содержимому /mnt/Pool/Media — а это нежелательно. К примеру, у нас там был служебный файл .wd_tv и сломать доступ к нему — нехорошо. Ещё хуже, если мы нарушим доступ к чему-то более сложному, чем данные — к клеткам (jail), папкам с исполняемыми кодами и пр. Скорее всего просто перестанет работать. И починить будет непросто.

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

PS А владельцев позволяет задавать команда chown.

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

cd /var/www/sheensay.ru
find ./ -type f -exec chmod 0644 {} ;
find ./ -type d -exec chmod 0755 {} ;

Если не в курсе, что это, подробности далее

  • Что такое Chmod

  • Зачем использовать Chmod

  • Синтаксис Chmod

  • Ключи -R, -v, -f

  • Правила доступа Chmod

  • Как проверить права Chmod

  • Пример правильного использования Chmod

  • После использования Chmod появились ошибки

Это UNIX-утилита, с помощью которой можно быстро через консоль изменить права на доступ для определённых владельцев (owner) и групп (group) для указанных категорий и файлов.

Зачем использовать Chmod

В UNIX-системах — FreeBSD, Ubuntu, Debian, Centos — у каждого файла и папки (каталога) есть свои владелец и группа, к которым они относятся. Сделано это с целью разграничения прав доступа на чтение (r, read), запись (w, write) и исполнение (x, execute) для разных пользователей: владельцев (u), пользователей, входящих в группу владельца (g) и остальных (o).
Например, если вы пользуетесь хостингом, то должны знать, что ваш сайт физически находится на одном сервере рядом со множеством других сайтов таких же, как вы, пользователей со своими сайтами. Чтобы вы не смогли помешать друг другу, у каждой директории с сайтами свой владелец и группа пользователей, к которым они относятся.
На shared хостинге о вас позаботятся профессиональные системные администраторы. А если вы имеете свой сервер VDS/VPS, то просто обязаны следить за прописанными правами на доступ к файлам. Например, если вдруг с помощью уязвимости на сайте злоумышленник сможет записать backdoor в директорию для загрузки файлов, то с правильно прописанными правами доступа он не сможет причинить большого вреда файловой системе. Конечно, в директории для загрузки файлов должно быть принудительно отключено исполнение скриптов, но это тема уже для другого разговора.

Синтаксис Chmod

chmod [-Rvf] [Правила доступа] [Файл/Файлы/Каталог, директория файлов] 

В части [Правила доступа] могут быть либо числовые, либо символьные значения.
[Файл/Файлы/Каталог файлов] — путь к файлу, файлам или к каталогу файлов, абсолютный или относительный.

Ключи -R, -v, -f

  • -R
    Рекурсивное изменение прав доступа для каталога и вложенных файлов и подкаталогов
  • -v
    Подробное описание применения изменения прав доступа или невозможности этого действия
  • -f
    Не выдавать сообщение об ошибке для тех файлов и каталогов, для которых невозможно изменить права доступа

Правила доступа Chmod

Как вы уже знаете, права доступа определяются тем, как пользователь может взаимодействовать с файлами и каталогами, а именно r — read (чтение), w — write (запись), x — execute (выполнение).
А также, вы знаете, что эти права должны быть прописаны для трёх групп пользователей:

  1. Владелец файла или каталога;
  2. Пользователи, входящие в группу владельца;
  3. Остальные.

Теперь посмотрим в таблицу определения прав:

Три варианта записи прав пользователей

Три варианта записи прав пользователей

То есть, для того, чтобы записать правило для владельца дать доступ на чтение и запись, остальным дать права только на чтение, мы должны дать права (rw-r--r--)

Теперь обратите внимание на столбец Символьная и Восьмеричная. Там визуально показано, что то, что выглядит символьно как (rw-r--r--), в восьмеричном виде выглядит как (644). Это выражение и будем использовать как числовую запись в команде.

Теперь осталось собрать всё воедино в одну запись. Для примера, изменим права на доступ «всем дать права на чтение, владельцу право изменять содержимое» для файла index.php:

chmod -v 644 index.php

Как одной командой массово изменить права всем файлам в текущем каталоге и подкаталогах

Как проверить права Chmod

ls -ld index.php

где index.php — файл или каталог, который нужно проверить.

Пример правильного использования Chmod

Правила доступа по умолчанию для каталогов 755, для файлов 644. Поэтому, в подавляющем большинстве случаев, вам понадобятся только эти права.

Ниже пример того, как в каталоге /var/www/sheensay.ru на все файлы рекурсивно поставить права 0644, а на все каталоги и подкаталоги 0755

cd /var/www/sheensay.ru
find ./ -type f -exec chmod 0644 {} ;
find ./ -type d -exec chmod 0755 {} ;

Первой командой переходим в нужную директорию, далее с помощью команды find ищем нужный тип: файлы -f (files) и каталоги -d (directories) — и запускаем chmod с нужными правами.

После использования Chmod появились ошибки

Если после правильной настройки Chmod перестали открываться некоторые страницы сайта, открывается белый экран, не загружаются файлы на сайт, проверьте, правильно ли вы установили Chown для всех каталогов и файлов сайта, возможно, права доступа стоят слишком строгие. Либо или php, или Apache запускаются не от того пользователя.

Загрузка…

Прервать выполняющуюся команду:
^C (Ctrl-C)

Выйти из shell:
exit

Показать документацию к команде ls. Вместо ls можно подставить любую другую команду:
man ls

Описание структур каталогов:
man hier

Показать текущую дату и время:
date

Показать продолжительность того, сколько времеи включена система:
uptime

Показать кто залогинен:
w

Показать последние 10 входов:
last -10

Показать директорию, в которой сейчас находимся:
pwd

Перейти в директорию /usr/local/etc/:
cd /usr/local/etc/
Вместо /usr/local/etc/ можно указать любую другую директорию, в которую есть доступ.

Перейти в каталог на один уровень вверх:
cd ..

Перейти в свою домашнюю директорию:
cd ~

Перейти в корневую директорию:
cd /

Узнать размер папки:
du -hsx /путь/до/папки

Показать содержимое текущей директории:
ls

Показать подробно содержимое текущей директории (в выводе команды указаны даты, права на файлы/директории):
ls -l

Показать список всех файлов, включая скрытые файлы:
ls -a

Показать права доступа к файлу filename:
ls -l filename

Показать права доступа к директории directory:
ls -ld directory

Создать даректорию newdir в папке tmp:
mkdir /tmp/newdir/

Создаём директорию subdir, даже если у нас отсутствует папка newdir. Все папки создадутся автоматически:
mkdir -p /tmp/newdir/subdir/

Удалить директорию /tmp/newdir/ . Вместо /tmp/newdir/ можете указать нужную вам папку:
rmdir /tmp/newdir/

Удалить непускую директорию newdir. Вместо «newdir» у вас может быть другая папка:
rm -rd /tmp/newdir/

Список частовводимых комманд:
history | awk ‘{a[$2]++}END{for(i in a){print a[i] » » i}}’ | sort -rn | head

Колличество активных соединений tcp:
netstat -an|grep tcp | wc -l

Колличество активных соединений udp:
netstat -an|grep udp | wc -l

Прочитать несколько байт файла и определить тип файла:
file filename
Пример 1:
file /etc/rc.conf
/etc/rc.conf: ASCII English text
Пример 2:
file /bin/cp
/bin/cp: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), for FreeBSD 7.1, dynamically linked (uses shared libs), FreeBSD-style, stripped

Вывести на экран содержимое файла filename:
less filename
space(пробел) = следующая страница, b = предыдущая страница,
q = выйти, / = искать далее, ? = искать в предыдущем, n = повторить поиск.

Вывести на экран содержимое файла filename. -M = показывать название файла:
less -Mi filename

Показать количество строк в файле filename:
wc -l filename

Показать первые 5 строк файла filename (количество строк можно указать самостоятельно):
head -5 filename

Показать последние 5 строк файла filename (количество строк можно указать самостоятельно):
tail -5 filename

Показать последние 10 строк файла, подождать и показать новые линии по мере их добавления (^ C для выхода). Особенно полезено для лог-файлов:
tail -f filename

Создать файл filename, если он не существует или обновить время создания, если такой файлик имеется:
touch filename

Удалить файл filename:
rm filename

Копировать файл filename и присвоить ему новое имя — newname:
cp filename newname

Копировать файл или файлы в директорию /tmp/ ,название файлов и директорию укажите самостоятельно:
cp file1 file2 … /tmp/

Копировать директорию /tmp/ в директорию /home/ ,название директорий укажите самостоятельно:
cp -R /tmp/ /home/

Перенести файл oldname в туже директорию, где он находится, но под другим названием — newname. Проще говоря, переименовать файл oldname в newname:
mv oldname newname

Перенести файл или файлы в директорию /tmp/ , название файлов и директорию укажите самостоятельно:
mv file1 file2 … /tmp/

Сделать жёсткую ссылку newname на файл filename:
ln filename newname

Найти все файлы в директории /etc/ , или в любой другой указанной вами директории (/etc/ -для примера):
find /etc/ -type f

Найти все файлы в директории /etc/, начинающиеся с rc. Вместо /etc/ и rc укажите свои данные:
find /etc/ -type f -name ‘rc*’

Читать сжатый текстовый файл, без распаковки его на диск:
gzip -dc filename.gz | less
bzip2 -dc filename.bz2 | less

Показать содержимое сжатого архива:
tar -tzf filename.tgz или .tar.gz
tar -tjf filename.tbz2 или .tar.bz2

Извлеч содержимое архива filename.tgz в директорию /tmp/:
tar -xvzf filename.tgz -C /tmp/
Извлеч содержимое архива filename.tbz2 в директорию /tmp/:
tar -xvjf filename.tbz2 -C /tmp/

Извлеч содержимое архива filename.tgz в текущую директорию:
tar -xvzf filename.tgz
Извлеч содержимое архива filename.tbz2 в текущую директорию:
tar -xvjf filename.tbz2

Показать все процессы:
ps auxw

Показать все процессы «sshd»:
ps auxw | grep sshd

Постоянно показывать наиболее активные процессы (q — выход):
top

Отправить сигнал для остановки процесса, идентификатором которого является его pid:

kill pid
или
kill -TERM pid

Послать сигнал всем процессам, чье имя «httpd»:
killall httpd

Искать команду cp в PATH и показать, где она была найдена:
which cp

Показать 20 последних введённых команд:
history 20

Показать все переменные окружения:
printenv

Показать одну переменную окружения ‘PATH’:
printenv PATH
или
echo $PATH
Переменные среды можно установить в ~/.profile для sh, ~/.bash_profile для bash, или ~/.cshrc для csh

Показать текущие uid, gid и дополнительные groups:
id

Показать текущее имя пользователя:
whoami

Стать root’ом (пользователь должен быть в группе «wheel»):
su

Изменить uid на username:
su username

Показать все учётные записи (выводится содержимое файла /etc/passwd, где они перечислены):
cat /etc/passwd

Показать все группы (выводится содержимое файла /etc/group, где они перечислены):
cat /etc/group

Создать пользователя username; — m = создать домашную директорию:
pw useradd username -m

Изменить свой пароль:
passwd

Изменить пароль пользователя username (имеет право только root):
passwd username

Добавить пользователя username в группу «wheel» (или отредактируйте /etc/group):
pw usermod username -G wheel

Удалить пользователя username; -r = удалить домашную директорию:
pw userdel username -r

Показать все учётные записи с зашифрованными паролями:
cat /etc/master.passwd

Показать примонтированные файловые системы:
mount

Показать используемое и свободное место на всех примонтированных файловых системах (-h = для большей читабельности для людей, -m = если надо узнать размер в Мб):
df
df -h
df -m

Список процессов с открытыми файлами:
fstat

Показать файловую таблицу:
cat /etc/fstab

Показать слайсы устройства ad0:
fdisk /dev/ad0

Показать статистику дисковых операций ввода/вывода каждые 2 секунды:
iostat 2 gstat -I 2s

Показать список установленных пакетов:
pkg_info

Показать подробное описание пакета «zip» (вместо zip укажите любой установленный у вас пакет):
pkg_info zip*

Показать список файлов, включенных в пакет «zip»:
pkg_info -L zip*

Установить пакет foo-1.2.3.tbz:
pkg_add foo-1.2.3.tbz

Установить пакет foo из FTP сервера, используемого по умолчанию:
pkg_add -r foo

Установить пакет foo из альтернативного FTP сервера:
PACKAGEROOT=»ftp://ftp.freebsd. org» pkg_add -r foo

Удалить пакет foo-1.2.3:
pkg_delete foo-1.2.3

Выполнять после установки пакетов, для повторного сканирования PATH. (Необходимо только если используете csh):
rehash

Показать загруженные модули:
kldstat

Загрузить модуль:
kldload название_модуля

Выгрузить модуль:
kldunload название_модуля

Показать все сетевые интерфейсы:
ifconfig -a

Показать таблицу маршрутизации:
netstat -r -n

Добавить статический маршрут по умолчанию:
route add default 192.168.0.254

Отправить ping пакеты на адрес 1.2.3.4, проверка доступности хоста (^C для выхода):
ping 1.2.3.4

Отправка пакетов до адреса 1.2.3.4 и отображение промежуточных найденных маршрутизаторов:
traceroute -n 1.2.3.4

Показать все пакеты, переданные и принятые на интерфейсе em0:
tcpdump -i em0 -n -s1500 -X

Показать только заголовки tcp пакетов приходящих/уходящих на 80 порт:
tcpdump -i em0 -n tcp port 80

Открыть TCP соединение на порт 80 хоста с адресом 1.2.3.4:
telnet 1.2.3.4 80

Инициализация настроек сетевых интерфейсов в /etc/rc.conf:
/etc/rc.d/netif start

Инициализация настроек статических маршрутов из /etc/rc.conf:
/etc/rc.d/routing start

Настройка интерфейса с пометкой «DHCP» в /etc/rc.conf:
/etc/rc.d/dhclient start

Показать активные сетевые подключения:
netstat -finet -n

Показать процессы слушающие на IPv4 sockets:
sockstat -4 -l

Перезагрузить ОС:
reboot

Выключить ПК, немедленно
shutdown -p now

Права на файлы/папки:
права на файлы и папки обозначаются в виде цифр или букв:
4 = read (разрешение на чтение)
2 = write (разрешение на запись)
1 = execute (разрешение на выполнение)
Права представлены тремя цифрами:
первая цифра — разрешения для вас
вторая цифра — разрешения для группы
третяя цифра — разрешения для всех остальных

Сложение цифр можно добиться установления прав. Например:
3 (2+1) — разрешение на запись и выполнение файла (каталога);
5 (4+1) — разрешение на чтение и выполнение;
6 (4+2) — разрешение на чтение и запись;
7 (4+2+1) — разрешение на чтения, запись и выполнение

То есть существует всего семь вариантов:
7 = read, write & execute (чтение, запись, выполнение);
6 = read & write (чтение и запись);
5 = read & execute (чтение и выполнение);
4 = read (чтение);
3 = write & execute (запись и выполнение);
2 = write (запись);
1 = execute (выполнение).

Для установления прав доступа используется команда CHMOD.
На примере нагляднее:
chmod 777 /tmp/file.sh -разрешить читать, изменять, выполнять файл file.sh всем
chmod 766 /tmp/file.sh -разрешить себе читать, изменять, выполнять файл file.sh, а группе и всем остальным только читать, изменять.
Если надо дать права всем файлам в папке и всему содержимому включая подпапки(рекурсивно), надо использовать параметр -R, т.е.:
chmod -R 766 /tmp/

Узнать погоду из консоли (должен быть установлен curl, Вместо Moscow напишите свой город):
curl -s «http://www.google.com/ig/api?weather=Moscow» | sed ‘s|.*.*|1|’

Узнать количество установленной физической памяти:
cat /var/run/dmesg.boot | grep «real memory»

Узнать переменные окружения (PATH) в языке csh (по умолчанию во FreeBSD):
setenv | grep PATH

Перестартовать сеть (сетевое подключение по ssh сохранится)
/etc/rc.d/netif restart

Остановить сетевую карту:
ifconfig network-interface down
здесь network-interface — это интерфейс сетевой карты, который можно посмотреть командой ifconfig

Аналогично запуск сетевой карты:
ifconfig network-interface up

Получить список поднятых сетевых интерфейсов:
ifconfig -u

Получить список выключенных сетевых интерфейсов:
ifconfig -d

Посмотреть размер директории:
du -h

Перезапустить ipfw:
/etc/rc.d/ipfw restart

Информация об установленном CPU:
sysctl -a | egrep -i ‘hw.machine|hw.model|hw.ncpu’

Узнать все IP-адреса сайта:
host -t a mediaunix.com

Создать дамп базы mysql:
mysqldump -u ЛогинАдминаБД -pПарольАдминаБД -B ИмяБД > /путь/куда/сохранить/дамп/базы/ИмяБазы.sql

Настроить дату и время на freebsd:
date yymmddhhss
где
yy -сокращённо год (две последние цифры)
mm -месяц
dd -день
hh -час
ss -минуты

Синхронизировать дату и время с сервером:
ntpdate pool.ntp.org

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

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Freebsd fetch authentication error
  • Freebsd error code 1
  • Freebsd config error device tun is unknown
  • Fortnite ошибка 0000142
  • Freebsd bus error

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии