продолжение перевода статьи Linux Fundamentals Part 3 начало...
Численный метод указания разрешений

До этого, мы использовали то, что называется символическим методом указания изменения разрешений для chmod. Тем не менее, есть альтернативный метод указания разрешений: использование 4 значного числа. Использование этого метода, называемого синтаксис числового разрешения, при котором каждая цифра представляе разрешение для одного триплета. Например, число в 1777, цифры 777 устанавливают флаги разрешения для владельца, группы и всех остальных, таким образом, как показано ниже

Mode Digit
rwx 7
rw- 6
r-x 5
r-- 4
-wx 3
-w- 2
--x 1
--- 0

Первая цифраиспользуется для установки специального разрешения, который будет обсужден позже (см. " Неуловимая первая цифра " в конце секции).

Синтаксис указания разрешений в численной форме

Указания разрешения в численной форме полезны когда Вы хотите указать сразу все разрешения для файла, как показано ниже:

$ chmod 0755 scriptfile.sh
$ ls -l scriptfile.sh
-rwxr-xr-x 1 drobbins drobbins 0 Jan 9 17:44 scriptfile.sh

В этом примере мы используем синтаксис 0755, который укажет разрешения -rwxr-xr-x.

Команда umask

Когда процесс создает новый файл, он назначает разрешения для него те разрешения которые считает нужными. Часто, требется разрешения 0666 (чтение и запись для всех ), которые являются рекомендуемыми. К счастью Linux при создании нового файла консультируется с тем, что называется "umask" . Система, использующая значение umask снижает первоначально указанные разрешения на что-то более разумное и надежное. Вы можете увидеть значение "umask" Вашей системы напечатав:

$ umask 0022

На Дinux системах, значения umask по умолчанию 0022, которые позволяют другим читать новый файл, но не изменять его. Чтобы сделать новый файл более защищенным, Вы можете поменять значение следующей командой:

$ umask 0077

Это значение запретит и группам и всем остальным абсолютно все, для вновь созданных файлов. Так каким же образом "umask" работает? В отличии от обычного интерпретирования разрешений, "umask" команда указывает какие разрешения надо выключить. Давайте посмотрим на нижеследующую страницу, для того чтобы определить, что значит значение 0077:

Mode Digit
rwx 7
rw- 6
r-x 5
r-- 4
-wx 3
-w- 2
--x 1
--- 0

Используя эту таблицу, мы определили, что значение 0077 расшифровывается как ---rwxrwx. Теперь, помня о том, что umask говорит системе какие значения надо выключить, мы увидем, что для групп и других пользователей будут выключены все права, а для владельца ничего не изменится.

Введение в suid и sgid

Когда Вы инициируете вход в систему, запускается новый процесс shell (обычно это bash). Вы уже это знаете, но возможно не догадываетесь, что он использует Ваш пользовательский ID. Раз так, bash программа имеет доступ ко всем файлам и директориям, владельцем которого вы являетесь. Так как, мы как пользователи, польностью зависим от других программдля выполнения операций от нашего имени. Поскольку, программа которую Вы запустили, наследует Ваш id, она не сможет получить доступ к любому объекту файловой системы, для которых у Вас нет прав. Например, файл passwd не может быть изменен обычным пользователем, потому что флаг "write" выключен для всех пользователей кроме root:

$ ls -l /etc/passwd -rw-r--r-- 1 root wheel 1355 Nov 1 21:16 /etc/passwd

Тем не менее простой пользователь должен иметь возможность менять эитот файл, для того, чтобы изменять свой собственный пароль. Но, как же это будет работать, если он не может менять файл паролей?

suid

К счастью, модель разрешений Linux имеет два специальных бита называемые suid и sgid . Когда исполняемая программа имеет установленный бит suid, она будет работать от имени владельца, а не от имени человека который ее запустил. А теперь вернемся к проблеме /etc/passwd. Если Вы просмотрели права на passwd executable, Вы могли увидеть что она может быть запущена root:

$ ls -l /usr/bin/passwd -rwsr-xr-x 1 root wheel 17588 Sep 24 00:53 /usr/bin/passwd

Вы также могли заметить, что в триплете владельца файла на месте символа х стоит символ s . Это означает, что для данной программы, бит suid установлен. По причине этого, когда passwd работает, она будет работать от имени владельца root (который имеет все права), а не от пользователя который запустил ее. И соответственно будет в состоянии изменять файл /etc/passwd без каких либо проблем.

suid/sgid caveats

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

Важно!
Есть некоторые важные замечания о suid и sgid . Во первых, suid и sgid занимают то же самое место, что и бит x в ls -l листинге. Если бит х также установлен, то бит s будет отображен в нижнем регистре, то есть "s" . В противном случае, то есть если не установлен, он будет показан в верхнем регистре, то есть "S" .

Важно!
Другое важное замечание: suid и sgid могут быть полезны во многих случаях, но частое использование этих битов, может отрицательно сказаться на безопасности системы. Лучше иметь как можно меньше программ с установленным битом suid. Команда passwd одна из этого переченя.

Изменение suid и sgid
Установка и удаление битов suid и sgid достаточно простая процедура. Вы можете установить эти биты таким образом: # chmod u+s /usr/bin/myapp И здесь, мы удаляем, бит sgid директории. Мы можем увидеть, как бит sgid влияет на несколько директорий: # chmod g-s /home/drobbins
Разрешения и директории

До сих пор мы рассматривали модель разрешений Linux приминительно к файлам. Что же касается директорий, то есть некоторые отличия в интерпритации этой модели. Директории имеют те же флаги разрешений, но несколько другие значения. Если для директорий установлен флаг “read”, то это значит, что Вы можете просмотреть содержимое этой директории; установленный флаг “write” разрешает вам записывать файлы в эту директорию; и, наконец установленный флаг “execute", означает , что Вы имеете доступ к этой директории и к любой поддиректории этой директории . Без флага "execute", объекты фаловой системы в директории будут недоступны. Без флага "read" объекты фаловой системы в этой директории не будут отображаться , но все же будут доступны для тех, кто знает полный путь к объектам на диске.

Директории и sgid

И, если для директория бит "sgid" установлен, любой объект файловой системы созданный внутри унаследует группу директории. Эта особенность бывает полезнакогда вам необходимо создать дерево директорий для пользования ею группой людей входящих в одну пользовательскую группу. Например:

# mkdir /home/groupspace # chgrp mygroup /home/groupspace # chmod g+s /home/groupspace

Теперь, все пользователи группы mygroup могут создавать файлы или директории в /home/groupspace, и они автоматически будут назначены как владения для всех членов группы mygroup. Независимо от настройки umask, могут или не могут быть readable, writable, или executable для любого члена группы mygroup.

Директории и удаление

По умолчанию, поведение Linux директорий не является оптимальным для всех ситуаций. В нормальной ситуации, кто-либо может переименовать или удалить файл, если имеет права для записи в эту директорию. Для директорий использование которых осуществляет один человек , такое поведение является приемылимым. Тем не менее, для директорий которыми пользуется много людей, например /tmp или /var/tmp, такое поведение не является оптимальным. Поскольку каждый может записывать в эту директорию и удалять из нее файлы, то возможно он может удалить чужой файл, не смотря на то, что он не является его владельцем! Очевидно, тяжело использовать директорию /tmp для чего-либо значимого, в то время как любой друго пользователь, может напечатать rm -rf /tmp/* в любое время и стереть чужие файлы. К счастью, Linux имеет нечто, называемое sticky битом. Когда для / tmp установлен sticky бит (с помощью команды chmod +t) то единственно кто в состоянии удалить или переименовать файлы в этой директории, это только владелец файла и root. Практически все дистрибутивы Linux имеют /tmp's sticky бит установленным по умолчанию, кроме того, вы можете найти, что этот бит sticky полезен и в других ситуациях.

Неуловимая первая цифра

И в заключение этой секции, мы рассмотри назначение первой цифры в цифровом отображении прав фалов и каталогов. Как вы можете увидеть, первая цифра используется для установки битов sticky, suid, и sgid:

suid sgid sticky mode digit
on on on 7
on on off 6
on off on 5
on off off 4
off on on 3
off on off 2
off off on 1
off off off 0

Ниже показано, как использовать 4-ёх цифровой способ установки прав для директории, которой будет пользоваться workgroup:

# chmod 1775 /home/groupfiles

Ваше домашнее задание, выяснить смысл задания прав для обозначения 1755. :)

перевод статьи Linux Fundamentals Part 3 далее...