Команда whoami в linux
Реплики в таком диалоге строго чередуются, а собеседники не могут говорить одновременно — в естественном диалоге так никогда не происходит. Скорее это напоминает диалог в учебнике иностранного языка. Однако и в диалоге с Linux у собеседников есть возможность «перебить» друг друга — об этом речь пойдёт в последующих лекциях.
Простейшая команда в Linux состоит из одного «слова» — названия программы, которую необходимо выполнить. Одну такую команду ( passwd ) Мефодий уже использовал для того, чтобы изменить свой пароль. Теперь Мефодий решил вернуться на одну из виртуальных консолей, на которой он зарегистрировался, и попробовать выполнить несколько простых команд.
[methody@localhost methody]$ whoami
methody
[methody@localhost methody]$
Пример 8. Команда whoami
Название этой команды происходит от английского выражения «Who am I?» («Кто я?»). В ответ на эту команду система вывела только одно слово: « methody » и завершила свою работу, о чём свидетельствует вновь появившееся приглашение командной строки. Программа whoami возвращает название учётной записи того пользователя, от имени которого она была выполнена. Эта команда полезна в системах, в которых работает много разных пользователей, чтобы не воспользоваться по ошибке чужой учётной записью. Однако, в приглашении командной строки зачастую указывается имя пользователя (как и в наших примерах), поэтому без команды whoami можно обойтись. Следующий пример демонстрирует программу, которая выдаст Мефодию уже больше полезной информации: who («Кто»).
[methody@localhost methody]$ who
methody tty1 Sep 23 16:31 (localhost)
methody tty2 Sep 23 17:12 (localhost)
[methody@localhost methody]$
[methody@localhost methody]$ who am i
methody tty2 Sep 23 17:12 (localhost)
[methody@localhost methody]$
Пример 9. Команда who
Ещё одна программа, выдающая информацию о пользователях, работавших в системе в последнее время — last . Выводимые этой программой строки напоминают вывод программы who , с той разницей, что здесь перечислены и те пользователи, которые уже завершили работу.
В некоторых Linux-системах эта программа может называться lastlog .
[methody@localhost methody]$ last
methody tty2 localhost Thu Sep 23 17:12 still logged in
methody tty1 localhost Thu Sep 23 16:31 still logged in
cacheman . localhost Thu Sep 23 16:15 - 16:17 (00:01)
cacheman . localhost Thu Sep 23 16:08 - 16:08 (00:00)
cyrus . localhost Thu Sep 23 16:08 - 16:08 (00:00)
reboot system boot 2.4.26-std-up-al Thu Sep 23 16:03 (04:13)
Пример 10. Команда last
В этом примере Мефодий неожиданно обнаружил кроме себя самого неизвестных ему пользователей cacheman и cyrus — он совершенно точно знает, что не создавал учётных записей с такими именами. Это псевдопользователи (или системные пользователи) — специальные учётные записи, которые используются для работы некоторыми программами. Поскольку эти «пользователи» регистрируются в системе без помощи монитора и клавиатуры, их «точка входа» в систему не определена (во второй колонке записано « . »). В выводе программы last появляется даже пользователь reboot (перезагрузка). В действительности такой учётной записи нет, программа last таким способом выводит информацию о том, когда была загружена система.
Как следует из названия, команда whoami печатает имя пользователя с действующим идентификатором пользователя. Другими словами, он отображает имя вошедшего в систему пользователя.
Как использовать команду whoami
Синтаксис команды whoami следующий:
Чтобы отобразить имя пользователя, который в данный момент вошел в систему, вызовите команду без каких-либо параметров:
Вывод, подобный следующему, будет отображаться на экране, показывая имя пользователя, который вызвал команду:
Команда whoami может быть использована в скриптах для проверки имени пользователя, запустившего сценарий.
Вот пример использования оператора if для сравнения имени пользователя, выполняющего скрипт, с заданной строкой.
Команда whoami также удобна для проверки имени пользователя после переключения на другого пользователя с помощью команды su.
Команда whoami принимает только две опции:
Альтернативные Команды
Запуск команды id с параметрами -un дает тот же результат, что и запуск whoami:
Используйте команду id для получения дополнительной информации о данном пользователе.
Переменная окружения $USER содержит имя вошедшего в систему пользователя:
Заключение
Команда whoami является составной частью слов «Who am I? (Кто я?)» И печатает имя пользователя, связанного с текущим действующим идентификатором пользователя.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Глава 25. Вводная информация об учетных записях пользователей
По прочтении данной небольшой главы вы научитесь идентифицировать свою учетную запись на компьютере под управлением системы Unix с помощью таких команд, как who am i , id и других.
Из второй части главы вы узнаете о том, как представиться другим пользователем с помощью команды su .
Кроме того, вы узнаете о том, как запустить программу от лица другого пользователя с помощью команды sudo .
Утилита whoami
Утилита whoami сообщит вам имя вашей учетной записи.Утилита who
Утилита who предоставит вам информацию о том, какие пользователи осуществили вход в систему.Команда who am i
В случае использования утилиты who в рамках команды who am i будет выведена только одна строка с информацией о вашей текущей сессии.Утилита w
Утилита w предоставляет информацию о пользователях, которые осуществили вход в систему, а также о том, чем они занимаются.Утилита id
Утилита id предоставит вам информацию о вашем идентификаторе пользователя, основном идентификаторе группы, а также выведет список групп, в которых вы состоите. В дистрибутивах RHEL/CentOS с помощью данной утилиты вы также можете получить информацию о контексте SELinux .Утилита su для работы от лица другого пользователя
Утилита su позволяет пользователю запустить командную оболочку от лица другого пользователя.Утилита su для работы от лица пользователя root
Да, вы также можете использовать утилиту su для работы от лица пользователя root в том случае, если знаете пароль пользователя root .Утилита su для пользователя root
Вы должны знать пароль пользователя, от лица которого хотите работать, за исключением случая, когда вы входите в систему как пользователь root . Пользователь root может работать от лица любого существующего в системе пользователя, не зная пароля этого пользователя.Команда su - $имя_пользователя
По умолчанию при смене пользователя утилита su осуществляет сохранение переменных окружения командной оболочки. Для того, чтобы работать от лица другого пользователя в окружении командной оболочки целевого пользователя, следует применять команду su - с последующим вводом имени целевого пользователя.Команда su -
В том случае, если после команды su или su - не следует имени пользователя, считается, что целевым пользователем является пользователь root .Запуск приложения от лица другого пользователя
Утилита sudo позволяет пользователю осуществлять запуск программ с привилегиями других пользователей. Для того, чтобы данная утилита работала, системный администратор должен отредактировать соответствующим образом файл /etc/sudoers . Данная утилита может оказаться полезной в случае возникновения необходимости делегирования административных задач другому пользователю (без передачи этому пользователю пароля пользователя root).
В примере ниже показана методика использования утилиты sudo . Пользователь paul получил право запускать утилиту useradd с привилегиями пользователя root . Это позволило пользователю paul создавать учетные записи новых пользователей в системе, не работая от лица пользователя root и не зная пароля пользователя root .
Исполнение первой введенной пользователем paul команды завершилось неудачей. Но в случае использования sudo данная команда работает.Утилита visudo
Изучите страницу руководства утилиты visudo перед редактированием файла /etc/sudoers . Методика редактирования файла sudoers выходит за пределы набора тем, рассматриваемых в рамках данной книги.Команда sudo su -
В некоторых дистрибутивах Linux, таких, как Ubuntu и Xubuntu пароль пользователя root изначально не установлен. Это значит, что не имеется возможности войти в систему под именем пользователя root (по сути это дополнительная мера безопасности). Для выполнения задач от лица пользователя root первому пользователю системы предоставляется возможность использования утилиты sudo благодаря добавлению специальной записи в файл /etc/sudoers . Фактически все пользователи, являющиеся членами группы admin, также могут использовать утилиту sudo для исполнения команд от лица пользователя root. В результате пользователь может ввести команду sudo su - и работать от лица пользователя root без ввода пароля пользователя root. При этом команда sudo требует ввода пароля вызвавшего ее пользователя. Исходя из вышесказанного, можно сделать вывод о том, что запрос пароля из примера ниже выполняется утилитой sudo, а не su.Журналирование неудачных попыток использования утилиты sudo
Использование утилиты sudo без авторизации приведет к выводу строгого предупреждения. После этого пользователь root сможет увидеть следующую запись в файле /var/log/secure в случае использования дистрибутива Red Hat (или /var/log/auth.log в случае использования дистрибутива Debian).Практическое задание: вводная информация об учетных записях пользователей
1. Выполните команду, которая выведет информацию только об имени вашей учетной записи, благодаря наличию которой вы осуществили вход в систему.
2. Выведите список всех пользователей, осуществивших вход в систему.
3. Выведите список всех пользователей, осуществивших вход в систему, включая информацию о командах, которые они выполняют в данный момент.
4. Выведите информацию об имени вашей учетной записи и вашем уникальном идентификаторе пользователя (userid).
5. Используйте утилиту su для перехода к использованию учетной записи другого пользователя (если вы не используете учетную запись пользователя root, вам потребуется пароль от учетной записи другого пользователя). После этого вернитесь к использованию предыдущей учетной записи.
6. А теперь используйте команду su - для перехода к использованию учетной записи другого пользователя и отметьте различия.
Учтите, что команда su - переместит вас в домашнюю директорию другого пользователя (в примере это пользователь Tania ).
7. Попробуйте создать новую учетную запись пользователя (используя для этого вашу обычную учетную запись). Попытка должна завершиться неудачей. (Подробности процесса добавления учетных записей пользователей описаны в следующей главе.)
8. А теперь попытайтесь сделать то же самое, но добавив вызов утилиты sudo перед вашей командой.
Корректная процедура выполнения практического задания: вводная информация об учетных записях пользователей
1. Выполните команду, которая выведет информацию только об имени вашей учетной записи, благодаря наличию которой вы осуществили вход в систему.
2. Выведите список всех пользователей, осуществивших вход в систему.
3. Выведите список всех пользователей, осуществивших вход в систему, включая информацию о командах, которые они выполняют в данный момент.
4. Выведите информацию об имени вашей учетной записи и вашем уникальном идентификаторе пользователя (userid).
5. Используйте утилиту su для перехода к использованию учетной записи другого пользователя (если вы не используете учетную запись пользователя root, вам потребуется пароль от учетной записи другого пользователя). После этого вернитесь к использованию предыдущей учетной записи.
6. А теперь используйте команду su - для перехода к использованию учетной записи другого пользователя и отметьте различия.
Учтите, что команда su - переместит вас в домашнюю директорию другого пользователя (в примере это пользователь Tania ).
7. Попробуйте создать новую учетную запись пользователя (используя для этого вашу обычную учетную запись). Попытка должна завершиться неудачей. (Подробности процесса добавления учетных записей пользователей описаны в следующей главе.)
Вполне возможно, что утилита useradd будет расположена по пути /sbin/useradd в файловой системе вашего компьютера.
8. А теперь попытайтесь сделать то же самое, но добавив вызов утилиты sudo перед вашей командой.
Обратите внимание на то, что пользователь laura не имеет разрешения на использование утилиты sudo в данной системе.
Всеобъемлющего Linux руководство по командам для пользователей операционной системы Linux с описанием команды и примером использования.
команда даты
Команда Date печатает текущую дату и время.
команда Cal
Команда cal используется для отображения календаря в вашей оболочке, по умолчанию будет отображаться текущий месяц
Syntax: $ cal или $ cal 15 2020
команда whoami
Команда whoami сообщит вам, какую учетную запись вы используете в этой системе.
команда id
id выводит реальный идентификатор пользователя и различные другие детали, связанные с учетной записью.
команда pwd
Команда pwd, сокращение от рабочего каталога печати, поможет вам найти абсолютный путь к текущему каталогу.
команда cd
Сокращенный от смены каталога, эта команда поможет вам изменить ваш текущий каталог.
, каталог и .. каталог команд linux
, и .. имеет особое значение в Linux. , означает текущий каталог, а .. означает родительский каталог. Мы можем использовать их в различных ситуациях для повседневной деятельности.
команда ls
Мы используем команду ls для вывода списка файлов и каталогов внутри любого данного каталога. Если вы используете команду ls без аргументов, она будет работать с текущим каталогом.
команда mkdir
Он обозначает make directory и с помощью этой команды мы можем создавать новые каталоги.
Syntax: $ mkdir имя_нового_каталога
команда rm
Команда rm используется для удаления файла или каталога. Опция -r используется для рекурсивного удаления. С -f вы форсируете удаление, игнорируя ошибки и никогда не предлагая. Вы можете связать флаги, поэтому вместо rm -r -f вы также можете набрать rm -rf. Но всегда проверяйте дважды, прежде чем использовать команду rm -rf, если вы по ошибке дадите эту команду в своем домашнем каталоге или любом другом важном каталоге, она не будет запрашивать подтверждение, но она все там удалит. Поэтому, пожалуйста, будьте внимательны и прочитайте дважды, прежде чем нажимать клавишу ввода.
Syntax: $ rm -rf dir1 / dir2 / dir3
команда cp
Мы используем команду cp для копирования файла в оболочке Linux. Для рекурсивного копирования папки с ее содержимым используйте команду cp с ключом -r.
Syntax: $ cp hello.txt hello2.txt
мв команда
Команда mv используется для переименования или перемещения файла или каталога.
Syntax: $ mv hello.txt nothello.txt
древовидная команда
Команда tree печатает структуру каталогов в виде визуального дерева.
команда wc
Это сокращение от подсчета слов, это полезная команда, которая может помочь нам подсчитать новые строки, слова и байты файла.
Syntax: $ wc -l hello.txt или $ wc -w hello.txt
команда эха
Команда echo отображает любую заданную строку на дисплее.
Перенаправление вывода команды
Использование> для перенаправления вывода в файл
Команды Linux для перемещения в командной строке
TherearekeyshortcutsavailableinBashwhichwillhelpyoutomovearoundfaster. Таким образом, они очень похожи на стандартные сочетания клавиш в emacs, ряд комбинаций клавиш, которые вы обнаружите во многих местах и поэтому очень удобны для запоминания и усвоения. Следующая таблица является хорошей отправной точкой.
Комбинация клавиш | Действие |
Ctrl + | Перейти к началу строки |
Ctrl + E | Переместиться в конец строки |
Alt + B | Перейти к предыдущему слову |
Alt + F | Перейти к следующему слову |
Ctrl + U | Стереть до начала строки |
Ctrl + K | Стереть до конца строки |
Ctrl + W | Стереть предыдущее слово |
Ctrl + P | Просмотр ранее введенных команд |
Ctrl + R | Обратный поиск ранее введенных команд |
В этом разделе мы рассмотрим права доступа в Linux и модель владения (ownership). Мы уже видели, что каждый файл принадлежит одному пользователю и одной группе. Это сама суть модели прав доступа в Linux. Вы можете узнать, какому пользователю и группе принадлежит файл в выводе команды ls -l.
$ ls -l /bin/bash
-rwxr-xr-x 1 root wheel 430540 Dec 23 18:27 /bin/bash
В данном примере исполнимый файл /bin/bash принадлежит пользователю root и группе wheel. Модель прав доступа позволяет задать три независимых уровня прав на каждый объект файловой системы — для владельца, для группы и для всех остальных пользователей.
Понимание «ls -l»
Давайте рассмотрим вывод команды ls -l. Взглянем на первую колонку листинга:
$ ls -l /bin/bash
-rwxr-xr-x 1 root wheel 430540 Dec 23 18:27 /bin/bash
Первое поле -rwxr-xr-x содержит символическое представление прав на данный файл. Первый знак (-) в этом поле определяет тип файла, в данном случае это обычный файл. Другие возможные значения:
'd' директория
'l' символическая ссылка
'c' устройство символьного ввода-вывода
'b' устройство блочного ввода-вывода
'p' FIFO
's' сокет
Три тройки
$ ls -l /bin/bash
-rwxr-xr-x 1 root wheel 430540 Dec 23 18:27 /bin/bash
Остальная часть поля состоит из трех троек символов. Первая тройка представляет права владельца файла, вторая представляет права группы файла и третья права всех остальных пользователей.
"rwx"
"r-x"
"r-x"
Выше r означает, что чтение (просмотр данных содержащихся в файле) разрешено, w означает запись ( изменение, а также удаление данных) разрешено и x означает исполнение (запуск программы разрешен). Собрав все воедино мы видим, что кому угодно разрешено читать содержимое и исполнять этот файл, но только владельцу (root) разрешено как либо модифицировать этот файл. Так что если нормальным пользователям разрешено копировать содержимое этого файла, то только root может изменять или удалять его.
Кто я?
Перед тем, как мы узнаем как изменить владельца или группу которой принадлежит файл, давайте сперва рассмотрим, как узнать вашего текущего пользователя и группу к которой вы принадлежите. Если вы не использовали команду su недавно, ваш текущий пользователь это тот, которым вы вошли в систему. Если вы часто используете su, вы можете не помнить пользователя под которым вы работаете в данный момент. Чтобы узнать под каким пользователем вы работаете, наберите whoami:
В каких группах я состою?
Чтобы увидеть к каким группам вы принадлежите используйте команду groups:
$ groups
drobbins wheel audio
Из этого примера видно, что я состою в группах drobbins, wheel, и audio. Если вы хотите посмотреть, в каких группах состоит другой пользователь, то передайте его имя в качестве аргумента.
$ groups root daemon
root : root bin daemon sys adm disk wheel floppy dialout tape video
daemon : daemon bin adm
Изменение пользователя и группы владельца
Чтобы изменить владельца или группу файла (или другого объекта) используется команды chown или chgrp соответственно. Сначала нужно передать имя группы или владельца, а потом список файлов.
Вы не можете использовать команду chown без прав суперпользователя, но chgrp может быть использована всеми, чтобы изменить группу-владельца файла на ту группу, к которой они принадлежат.
Рекурсивное изменение прав
Команды chown и chgrp могут быть использованы с параметром -R, что позволяет рекурсивно изменить владельца или группу у всех объектов в данной директории и ниже. Пример:
Знакомство с chmod
chown и chgrp используются для изменения владельца и группы объекта файловой системы, но кроме них существует и другая программа, называемая chmod, которая используется для изменения прав доступа на чтение, запись и исполнение, которые мы видим в выводе команды ls -l. chmod использует два и более аргументов: метод, описывающий как именно необходимо изменить права доступа с последующим именем файла или списком файлов, к которым необходимо применить эти изменения:
$ chmod +x scriptfile.sh
В примере выше в качестве метода указано +x. Как можно догадаться, метод +x указывает chmod, что файл необходимо сделать исполняемым для пользователя, группы и для всех остальных. Если мы решим отнять все права на исполнение файла, то сделаем вот так:
$ chmod -x scriptfile.sh
Разделение между пользователем, группой и всеми остальными
До сих пор, наши примеры команды chmod влияли на права доступа всех трех наборов прав доступа — пользователя, группы и всех остальных пользователей. Часто бывает удобно изменить только один или два набора за раз. Чтобы сделать это, просто используйте специальный символ для обозначения набора прав доступа, который вам необходимо изменить, со знаком + или — перед ним. Используйте u для пользователя, g для группы и o для остальных пользователей.
$ chmod go-w scriptfile.sh
Мы только что удалили право на запись для группы и всех остальных пользователей, но оставили права владельца нетронутыми.
Сброс разрешений
Помимо переключения бит, отвечающих за права доступа, в состояние вкл/выкл, мы можем задать конкретные значения для всех сразу. Используя оператор равенства мы можем указать chmod, что хотим задать только указанные права доступа:
$ chmod =rx scriptfile.sh
Этой командой мы установили все биты чтения и исполнения и сбросили все биты записи. Если вы хотите задать значения конкретной тройки бит, то можете сделать это, указав ее символьное наименование перед оператором равенства:
$ chmod u=rx scriptfile.sh
Числовые режимы
До сих пор, мы использовали то что называется символическим способом указания прав доступа для команды chmod. Однако есть еще один достаточно распространенный способ указания прав: использование четырехзначных восьмеричных чисел. Этот синтаксис, называется числовым синтаксисом прав доступа, где каждая цифра представляет тройку разрешений. Например, в 1777, 777 устанавливают флаги о которых мы говорим в этом разделе, для владельца, группы, и остальных пользователей. 1 используется для указания специального бита прав доступа, который мы рассмотрим позже (смотрите «Неуловимая первая цифра» в конце раздела). Эта таблица показывает как транслируются права доступа на числовые значения.
Числовой синтаксис прав доступа
Числовой синтаксис прав доступа особенно полезен когда требуется указать все разрешения для файла, как показано в следующем примере:
$ 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 в командной строке:
$ umask
0022
В Linux-системах значением по умолчанию для umask является 0022, что позволяет другим читать ваши новые файлы (если они могут до них добраться), но не изменять их. Чтобы автоматически обеспечивать больший уровень защищенности для создаваемых файлов, можно изменить настройки umask:
$ umask 0077
Такое значение umask приведет к тому, что группа и прочие не будут иметь совершенно никаких прав доступа для всех, вновь созданных файлов. Итак, как работает umask? В отличие от «обычного» назначения прав доступа к файлу, umask задает какие права доступа должны быть отключены. Снова посмотрим на таблицу соответствия значений чисел и методов:
Воспользовавшись этой таблицей мы видим, что последние три знака в 0077 обозначают ---rwxrwx. Теперь вспомните, что umask показывает системе, какие права доступа отключить. Совместив первое и второе становится видно, что все права для группы и остальных пользователей будут отключены, в то время как права владельца останутся нетронутыми.
Знакомство с suid и sgid
В момент вашего входа в систему запускается новый процесс оболочки. Вы уже знаете об этом, но можете не знать о том, что этот новый процесс оболочки (обычно это bash) работает от имени вашего пользователя. И таким образом программа bash может обращаться ко всем файлам и директориям, владельцем которых вы являетесь. В действительности мы, как пользователи, полностью зависим от программ, выполняющих операции от нашего имени. И поскольку программы, которые вы запускаете, наследуют ваш пользовательский идентификатор, они не могут обращаться объектам файловой системы, к которым вам не предоставлен доступ. К примеру, обычные пользователи не могут напрямую изменять содержимое файла passwd потому что флаг записи отключен для всех пользователей кроме root:
$ ls -l /etc/passwd
-rw-r--r-- 1 root wheel 1355 Nov 1 21:16 /etc/passwd
Однако, обычным пользователям тоже нужно иметь возможность хотя бы опосредованно менять содержимое /etc/passwd когда им понадобится сменить пароль. Но если пользователь не может изменить этот файл, как это сделать?
К счастью, в модели прав доступа Linux имеются два специальных бита, называемых suid и sgid. Когда для запускаемой программы установлен бит suid, она будет работать от имени владельца исполняемого файла, а не от имени того, кто запустил программу. Теперь можем вернуться к вопросу с /etc/passwd. Если посмотрим на исполняемый файл passwd, увидим, что его владельцем является пользователь root:
$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root wheel 17588 Sep 24 00:53 /usr/bin/passwd
Обратите внимание, что вместо x в триплете прав доступа владельца стоит s. Это означает что для этой конкретной программы установлены биты suid и права на запуск. По этой причине при запуске программы passwd она будет работать от имени пользователя root (со всеми правами доступа суперпользователя), а не пользователя, запустившего её. И поскольку passwd работает с правами суперпользователя, она способна редактировать /etc/passwd без каких либо сложностей.
Предупреждения о suid/sgid
Мы увидели как работает suid, sgid работает похожим образом. Она позволяет программе наследовать права доступа группы, а не текущего пользователя.
Изменение suid и sgid
Способ установки и удаления битов suid и sgid чрезвычайно прост. Вот так мы задаем бит suid:
А в следующем примере мы снимаем флаг sgid с директории. Вы увидите, как бит sgid работает с директориями немного ниже:
Права и директории
До текущего момента мы рассматривали права доступа с точки зрения обычных файлов. Когда речь заходит о директориях, появляются некоторые отличия. Директории используют те же флаги прав доступа, но их интерпретация имеет немного другой смысл.
Если для директории задан флаг чтения, то вы можете просматривать список содержимого директории; флаг записи означает, что вы можете создавать файлы в директории; и флаг исполнения означает, что вы можете войти в директорию и обращаться ко всем поддиректориям внутри. Без флага исполнения у вас не будет доступа к объектам файловой системы внутри директории. Без флага чтения объекты файловой системы внутри директории нельзя просмотреть, но к объектам внутри директории все еще можно обратиться, если вы знаете полный путь к объекту на диске.
Директории и флаг sgid
В случае же, если для директории установлен бит sgid, все объекты файловой системы, создаваемые внутри, наследуют группу директории. Эта возможность бывает кстати, когда вам необходимо создать дерево директорий и все они должны принадлежать одной группе. Это можно сделать вот так:
Теперь любые пользователи группы mygroup могут создавать файлы и директории внутри /home/groupspace и им также будет автоматически задана принадлежность группе mygroup. В зависимости от настроек umask для данного пользователя новые объекты файловой системы могут быть или не быть читаемыми, изменяемыми или исполняемыми другими пользователями группы mygroup.
Директории и удаление
По умолчанию директории в Linux ведут себя не самым удобным во многих ситуациях образом. Обычно кто угодно может переименовать или удалить файл внутри директории если у них есть права на запись в этой директории. Для директорий, которыми владеют отдельные пользователи, такое поведение обычно не вызывает проблем.
Однако для директорий, которыми пользуется большое количество пользователей, в особенности /tmp и /var/tmp, это может вызвать целую кучу проблем. Все потому, что кто угодно может писать в эти директории, кто угодно может удалять и переименовывать чьи угодно файлы — даже если они им не принадлежат! Очевидно, довольно сложно использовать /tmp даже для временного хранения чего угодно, когда любой пользователь в любой момент может напечатать rm -rf /tmp/* и уничтожить файлы всех остальных.
Хорошая новость в том, что в Linux существует так называемый sticky бит. Когда для /tmp установлен sticky бит (командой chmod +t), единственные, кто могут удалить или переименовать файлы в /tmp — это либо владельцы этих файлов либо суперпользователь.
Неуловимый первый знак
В завершение этого раздела мы наконец обратим внимание на первый знак, используемый в численном синтаксисе. Он используется для задания битов sticky, suid и sgid:
Ниже приведен пример того, как использовать 4-значный режим для установки прав доступа на директорию, которая будет использоваться рабочей группой:
В качестве домашней работы выясните что значит 1755 в настройках прав доступа. :)
Продолжение следует.
Об авторах
Daniel Robbins
Дэниэль Роббинс — основатель сообщества Gentoo и создатель операционной системы Gentoo Linux. Дэниэль проживает в Нью-Мехико со свой женой Мэри и двумя энергичными дочерьми. Он также основатель и глава Funtoo, написал множество технических статей для IBM developerWorks, Intel Developer Services и C/C++ Users Journal.
Chris Houser
Крис Хаусер был сторонником UNIX c 1994 года, когда присоединился к команде администраторов университета Тэйлора (Индиана, США), где получил степень бакалавра в компьютерных науках и математике. После он работал во множестве областей, включая веб-приложения, редактирование видео, драйвера для UNIX и криптографическую защиту. В настоящий момент работает в Sentry Data Systems. Крис также сделал вклад во множество свободных проектов, таких как Gentoo Linux и Clojure, стал соавтором книги The Joy of Clojure.
Читайте также: