Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Зачет по UNIX.docx
Скачиваний:
7
Добавлен:
02.08.2019
Размер:
50.16 Кб
Скачать

12. Пользователи и группы, понятие владельца, группы-владельца, реальные и эффективные идентификаторы

UNIX - многопользовательская операционная система. Пользователи, занимающиеся общими задачами, могут объединяться в группы. Каждый пользователь обязательно принадлежит к одной или нескольким группам. Все команды выполняются от имени определенного пользователя, принадлежащего в момент выполнения к определенной группе.

В многопользовательских системах необходимо обеспечивать защиту объектов (файлов, процессов), принадлежащих одному пользователю, от всех остальных. ОС UNIX предлагает базовые средства защиты и совместного использования файлов на основе отслеживания пользователя и группы, владеющих файлом, трех уровней доступа (для пользователя-владельца, для пользователей группы-владельца, и для всех остальных пользователей) и трех базовых прав доступа к файлам (на чтение, на запись и на выполнение). Базовые средства защиты процессов основаны на отслеживании принадлежности процессов пользователям.

Для отслеживания владельцев процессов и файлов используются числовые идентификаторы. Идентификатор пользователя и группы - целое число (обычно) в диапазоне от 0 до 65535. Присвоение уникального идентификатора пользователя выполняется при заведении системным администратором нового регистрационного имени. Значения идентификатора пользователя и группы - не просто числа, которые идентифицируют пользователя, - они определяют владельцев файлов и процессов. Среди пользователей системы выделяется один пользователь - системный администратор или суперпользователь, обладающий всей полнотой прав на использование и конфигурирование системы. Это пользователь с идентификатором 0 и регистрационным именем root.

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

UID (идентификатор) текущего пользователя, в соответствии с /etc/passwd

Это реальный UID текущего пользователя, даже если он временно приобрел права другого пользователя с помощью su. Переменная $UID доступна только для чтения.

"эффективный" идентификационный номер пользователя (Effective User ID)

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

Значение переменной $EUID необязательно должно совпадать с содержимым переменной $UID.

группы, к которым принадлежит текущий пользователь

Это список групп (массив) идентификационных номеров групп для текущего пользователя, как эо записано в /etc/passwd.

13.Права на файлы, смена прав, биты suid и sticky

конспект

Кроме основных прав доступа есть ещё дополнительные права. Это SUID бит, SGID бит и STICKY бит. О них и пойдет рассказ в этой статье. SUID бит может быть выставлен для пользователя или для группы. Выставленный SUID бит для пользователя означает, что любой пользователь, у которого есть право на выполнение для файла с SUID битом для пользователя, может выполнить запустить на выполнение этот файл с правами владельца файла. Поясню на примере. Для того, чтобы поменять пароль, необходимо внести изменения в файл /etc/passwd, в некоторых системах, информация о паролях хранится в файле /etc/shadow. Записывать в эти файлы имеет право только пользователь root. Тем не менее, пароль себе поменять может каждый пользователь. Для этого и нужен SUID бит. Он включен у команды для смены пароля – passwd. В данном случае, любой пользователь, выполняющий эту команду, выполняет её с правами пользователя root. Для группы аналогично, запускающий программу с установленным SGID битом для группы, выполняет её с правами той группы, которой принадлежит файл. Естественно, что устанавливать SUID бит для всех остальных просто бессмысленно.

Теперь о STICKY бите. Этот бит имеет значение для папок. Установленный STICKY бит на папку означает, что удалить из такой папки файлы, может только владелец. Чужие файлы удалить нельзя.

Устанавливаются эти биты также с помощью команды chmod:

chmod u+s file – установка SUID бита

chmod g+s file – установка SGID бита

chmod +t directory – установка STICKY бита

В некоторых системах, например в Linux, кроме этих расширенных правд доступа, есть ещё дополнительные атрибуты файлов:

a – разрешает только дописывать в файл, но запрещает удалять и переименовывать.

i – запрещает следующие операции с файлом: редактирование, переименование и удаление.

s – после удаления файла, место, которое он занимал, забивается нулями.

u – после удаления файла есть возможность его восстановить.

Вот наиболее интересные из них. Все они предназначены для повышения безопасности системы. Управление этими атрибутами осуществляется с помощью команды chattr. Формат аналогичен формату команды chmod.

14. условный оператор, конструкции проверки условий, использование && || как аналога условного оператора

практически любой язык программирования включает в себя условные операторы, предназначенные для проверки условий, чтобы выбрать тот или иной путь развития событий в зависимости от этих условий. В Bash, для проверки условий, имеется команда test, различного вида скобочные операторы и условный оператор if/then.

Оператор if/then проверяет -- является ли код завершения списка команд 0 (поскольку 0 означает "успех"), и если это так, то выполняет одну, или более, команд, следующие за словом then.

Существует специальная команда -- [ (левая квадратная скобка). Она является синонимом команды test, и является встроенной командой (т.е. более эффективной, в смысле производительности). Эта команда воспринимает свои аргументы как выражение сравнения или как файловую проверку и возвращает код завершения в соответствии с результатами проверки (0 -- истина, 1 -- ложь).

Начиная с версии 2.02, Bash предоставляет в распоряжение программиста конструкцию [[ ... ]] расширенный вариант команды test, которая выполняет сравнение способом более знакомым программистам, пишущим на ругих языках программирования. Обратите внимание: [[ -- это зарезервированное слово, а не команда.

Bash исполняет [[ $a -lt $b ]] как один элемент, который имеет код возврата.

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

Предложение let "1<2" возвращает 0 (так как результат сравнения "1<2" -- "1", или "истина")

(( 0 && 1 )) возвращает 1 (так как результат операции "0 && 1" -- "0", или "ложь")

логическое И (and)

if [ $condition1 ] && [ $condition2 ]

# То же самое, что: if [ $condition1 -a $condition2 ]

# Возвращает true если оба операнда condition1 и condition2 истинны...

if [[ $condition1 && $condition2 ]] # То же верно

# Обратите внимание: оператор && не должен использоваться внутри [ ... ].

логическое ИЛИ (or)

if [ $condition1 ] || [ $condition2 ]

# То же самое, что: if [ $condition1 -o $condition2 ]

# Возвращает true если хотя бы один из операндов истинен...

if [[ $condition1 || $condition2 ]] # Also works.

# Обратите внимание: оператор || не должен использоваться внутри [ ... ].

15. циклы while, код завершения, команда как условие, команды true, break

Оператор while проверяет условие перед началом каждой итерации и если условие истинно (если код возврата равен 0), то управление передается в тело цикла. В отличие от циклов for, циклы while используются в тех случаях, когда количество итераций заранее не известно.

while [condition]

do

command...

done

true (в переводе с английского «истинное») — консольная команда UNIX-совместимых операционных систем, единственное действие которой — возвратить значение 0, рассматриваемое командной оболочкой UNIX как логическое значение «истина».

Команда "break [n]" позволяет выходить из цикла. Если "n"

отсутствует, то это эквивалентно "break 1". "n" указывает число

вложенных циклов, из которых надо выйти, например, "break 3" -

выход из трех вложенных циклов.

В отличие от команды "break" команда "continue [n]" лишь

прекращает выполнение текущего цикла и возвращает на НАЧАЛО

цикла. Она также может быть с параметром. Например, "continue 2"

означает выход на начало второго (если считать из глубины)

вложенного цикла.