Freebsd сменить владельца файла
Подробнее о том, в чем заключаются ограничения и как меняются "уровни безопасности", можно прочитать в man init (отмечу только, что "по умолчанию" система стартует с уровнем -1, то есть "безопасность" выключена).
Для нас в данный момент важно только, что на уровне 1 и 2, даже суперюзеру (root'у) запрещено снимать флаги sappend и simmutable.
Естественно, это делается не для того, чтобы "защитить" систему от собственного администратора. Он все равно, при желании, сможет убрать эти флаги (и удалить/изменить соответствующие файлы). Правда, для этого ему придется перезагрузить систему, причем с консоли.
А вот "взломщик", проникший в систему, даже если каким-то образом и получит root'овские права, не сможет изменить "жизненно важные файлы" (если, конечно, они защищены флагом simmutable) или "почистить логи" (если они защищены флагом sappend), чтобы "замести следы" своего пребывания в системе.
С какими правами файл "рождается"
На самом деле вопрос поставлен не совсем корректно.
Дело в том, что новый файл появляется в результате работы какой-либо программы. В то же время, в Unix существуют системные функции, которые позволяют менять владельца файла, группу и права доступа. Естественно, программа, порождающая файл может вызывать эти функции и таким образом создать файл с любыми атрибутами.
Поэтому, правильный ответ - "это зависит от программы, которая этот файл создает".
Однако, большинство программ этими функциями не пользуются, поэтому можно сказать, что "в большинстве случаев" атрибуты создаваемых файлов все таки подчиняются нескольким простым правилам.
Какие же у только что созданного файла будут владелец, группа и права доступа?
Владелец
Владелец файла определяется "эффективным userID" программы, которая его создает. Это означает, что в большинстве случаев владельцем файла будет тот юзер, который его создал (естественно, с помощью какой-нибудь программы). Если же программа "суидная", то есть во время выполнения имеет права того юзера, которой является владельцем этой программы, то, соответственно, все файлы, порожденные этой программой, будут принадлежать хозяину программы, а не юзеру, который ее запустил.
Кстати, если даже в программе используются системные функции, которые меняют владельца файла, они сработают только в том случае, если ее "эффективный userID" будет userID root. То есть, если ее запустит юзер root или она является "суидной" и ее владелец root.
Другими словами, какие бы программы не использовал рядовой юзер (если, конечно, они не "суидные") он может создать файлы владельцем которых будет только он. "Подарить" файл кому-нибудь другому обычный юзер не может.
Группа
Группа создаваемого файла в FreeBSD определяется немного необычно. Она всегда "наследуется" от директории, в которой этот файл создается. То есть файл будет иметь ту же группу, которую имеет директория.
Обратите внимание, что юзер, создающий файл, может даже не являться членом этой группы. Это, конечно, не очень хорошо с точки зрения безопасности системы. Дело в том, что если юзер создаст исполняемый файл и потом поставит на него бит sgid, то этот файл при выполнении получит права группы, в которую сам юзер не входит и, возможно, получит доступ к таким файлам, куда его в обычной ситуации "не подпускают".
Правда, в FreeBSD такая ситуация предусмотрена и система просто не даст юзеру поставить бит sgid на файл, если юзер не является членом группы, которая "приписана" к файлу.
В других разновидностях Unix группа файлу, обычно, присваивается та, которая является "первичной" группой юзера, создающего файл (то есть, та, которая записана в его бюджете). А для того, чтобы группа, как и в FreeBSD "наследовалась" от директории, на самой директории должен стоять бит sgid.
Права доступа
Права доступа, которые будут у "свежеиспеченного" файла определяются параметром umask. Он задает - какие биты прав доступа НЕ НАДО выставлять в permissions.
Если это параметр равен нулю, то у всех создаваемых файлов права доступа будут одинаковые для всех категорий и выглядеть как rw-rw-rw. Директории (созданные, например, командой mkdir) будут иметь права доступа rwxrwxrwx. Такие же права доступа получатся и у исполняемых файлов, которые создают различные трансляторы (они, естественно, ставят биты "исполняемости" на результат своей работы).
Параметр umask можно посмотреть или изменить "одноименной" командой umask. Команда umask без аргументов просто показывает текущее значение этого параметра. А для того, чтобы поменять его, надо этой команде в качестве аргумента указать число, которое система "развернет" в соответствующие биты.
Если каждую группу из трех бит (что соответствует отдельной категории в правах доступа) рассматривать как двоичное число, то "свернув" их по отдельности в десятичные цифры мы получим число из трех цифр, которое и отражает значение всех битов в permissions. Точнее, получается не десятичное, а восьмеричное представление прав доступа, но, если вы мало знакомы с восьмеричной системой счисления, то можете просто рассматривать это число как три отдельных десятичных цифры.
Еще раз напоминаю, что биты в umask отмечают - какие биты прав доступа НЕ надо ставить при создании файла. То есть, если вы хотите, чтобы у категории "все остальные" вообще не было никаких прав, а "группе допущенных" не ставился бит разрешающий запись, то umask должна выглядеть как 027.
В FreeBSD по умолчанию в командных файлах, которые выполняются при входе в систему, у всех юзеров (включая root) вставлена команда, которая задает umask равной 022. То есть отменяются только биты разрешения записи для группы и "всех остальных". Если вас это не устраивает, вы можете изменить аргумент в соответствующем файле (обычно это файлы .login или .profile в домашней директории юзера) или поменять параметр umask в любой момент "вручную".
Как изменяются права доступа при копировании и перемещении файла.
- кто копирует (перемещает) файлы, root или обычный юзер
- какие программы, и с какими ключами при этом используются
- копируется файл "на пустое место" или там уже существует файл с таким именем
Тем не менее, опишем несколько общих правил, определяющих - какие права доступа могут получиться в результат.
Во-первых, при копировании (например, командой cp) создается новый файл. А при перемещении (например, командой mv) меняется только место расположения файла (и, возможно, имя).
Поэтому, если "рядовой юзер" копирует файл, то действуют все те же правила, что и при создании файла. То есть, владельцем копии становится юзер, который ее создал, группа "наследуется" от директории, а сами права доступа определяются параметром umask.
Строго говоря, если копирование делает root, то эти правила действуют и для него (то есть, владельцем полученной копии будет root, группа будет взята от директории, а права выставятся в соответствии с umask). Однако, root может изменить поведение команды cp. У этой команды есть ключ (-p - сохранять permissions) который означает, что надо сохранить все атрибуты (владельца, группу и permissions) при копировании.
Обычный же юзер, даже используя ключ -p не сможет сохранить владельца и группу, но получит permissions такие же, как у оригинального файла. К тому же биты suid и sgid при этом также "сбрасываются".
Существует еще одна ситуация, когда при копировании сохраняются все атрибуты доступа. Это происходит, когда в "месте назначения" файл с таким именем уже существует. Собственно, в этом случае файл не создается, а только замещается его содержимое. Поэтому, даже если эту операцию проделает обычный юзер (естественно, для этого надо, чтобы ему было разрешено писать в существующий файл), все атрибуты, в том числе владелец и группа сохранятся. Правда, биты suid и sgid все равно "сбросятся".
А вот при перемещении файла все атрибуты сохраняются (даже "опасные" биты suid и sgid). Однако, не забудьте, что для того, чтобы обычный юзер смог переместить чужой файл, он должен иметь право записи и в ту директорию, куда файл переносится и в ту, откуда он переносится (поскольку, там запись о файле должна быть удалена). Такие ситуации в нормальной системе, как правило, не встречаются.
Как поменять.
Владельца и группу.
Во-первых, надо отметить - кто может поменять для файла (директории) владельца и группу.
Безусловно, это может сделать root.
Поменять владельца файла не может никто, кроме root.
А вот группу для файла может, также, поменять сам владелец файла, но только в том случае, если он сам является членом этой (новой) группы.
Для изменения владельца файла служит команда chown ("change owner"). С ее помощью можно заодно заменить и группу, хотя для изменения этого атрибута есть специальная команда chgrp ("change group").
Подробно об этих командах можно прочитать в соответствующих man-страницах (man chown и man chgrp). Поэтому, рассмотрим только их краткое описание.
Команда chown
Команда chown выглядит очень просто.
если же вы хотите поменять не только владельца, но и группу, то
Кстати, никто не мешает указать в команде "старого" владельца, тогда изменится только группа.
Ну и, конечно, если вы хотите заменить владельца (группу) сразу на нескольких файлах, вместо имени файла можно указать подходящий "шаблон", например "*" (выполнить операцию для всех файлов в текущей директории).
Если же вы хотите, чтобы аналогичная операция была проделана не только в текущей директории, но и во всех "нижележащих" поддиректориях, вам поможет ключ -R (recursively).
chown -R bob:users *
заменит владельца на bob, а группу на users для всех файлов и поддиректорий, находящихся в текущей директории и "ниже", то есть в самих поддиректориях.
Команда chgrp
Команда chgrp очень похожа на предыдущую, только в качестве первого аргумента ей нужно указать название новой группы для файла (или файлов).
Естественно, все, что было сказано о команде chown относительно выполнения ее над несколькими файлами и о ключе -R, также относится и к команде chgrp.
Права доступа (permissions)
Итак, для изменения прав доступа (permissions) служит команда chmod ("change mode"). В целом эта команда выглядит, как и предыдущие (которые меняют владельца игруппу).
Но, в отличии от предыдущих команд, второй аргумент ("что сделать") имеет несколько более сложный вид.
В нем можно выделить три части
Как понятно из таблицы, первой задается категория юзеров (владелец, группа или "все остальные"). Причем, можно поставить сразу несколько букв, обозначив тем самым сразу несколько категорий. Например, go будет означать, что права меняются сразу и для группы и для "всех остальных". Если надо изменить права сразу для трех категорий, можно написать три буквы - ugo или одну букву a (все три категории).
Следом указывается "операция" (добавить права или наоборот - убрать). И, наконец, после "операции" один или несколько битов доступа, которые требуется изменить. Значение этих битов подробно рассматривалось выше, поэтому здесь не будем на них останавливаться.
Некоторых пояснений, наверное, требует "операция". Как можно догадаться, знаки "-" и "+" означают "убрать" или "поставить" соответствующие права.
А знак "=" означает сразу и то и другое. Дело в том, что если вы укажете, например o+x это будет означать - добавить бит x для категории "остальные", но никак не повлияет на биты r и w для этой же категории. А указав действие как o=rx, вы тем самым скажете системе - "установить биты r и x, и убрать бит w, если он там был".
Бит s имеет разный смысл (suid или sgid) в зависимости от того, в какой части permissions он находится. Поэтому, если вы хотите поставить именно suid бит, то "что сделать" должно выглядеть как u+s, а если вам нужен sgid, то - g+s. Sticky бит ставится командой chmod a+t . .
Как видите, синтаксис этой команды достаточно гибкий (хотя и несколько усложненный). Кроме того, второй аргумент ("что сделать") может состоять из нескольких "действий" перечисленных через запятую.
Например, можно задать команду
это будет означать - "для всех категорий права r-x, а для владельца еще и w (право записи)".
Кроме того, команда chmod (точнее - ее первый аргумент) имеет еще одну форму.
Поскольку, все биты доступа это действительно двоичные биты из одной ячейки, "продвинутый" пользователь может указать сразу число (в восьмеричном виде) которое должно получится после изменения прав.
Восьмеричное представление выбрано потому, что при переводе в него двоичного числа, каждая группа из трех бит "сворачивается" в одну цифру. Таким образом, вам надо просто указать три цифры, каждая из которых описывает отдельную категорию юзеров (точнее - права для этой категории). Например, permissions rwxr-xr-x можно представить в восьмеричном виде как 755. И, следовательно, такие права могут быть выставлены командой
Что касается выполнения этой операций над несколькими файлами или "рекурсивного" обхода всех поддиректорий, здесь все так же, как для команд chown, chgrp. В качестве имени файла может быть задан "шаблон", а для обхода всех поддиректорий используйте ключ -R.
И, конечно, обязательно прочтите man chmod.
Флаги.
Команда, которая ставит/убирает флаги - chflags ("change flags"). Формат ее достаточно простой
Аргумент - это название флага или нескольких флагов через запятую. Названия флагов описаны в разделе о флагах. Кроме того, эта команда понимает и сокращенные названия.
Для того, чтобы убрать флаг, надо указать его название с префиксом no - nosappnd, nosunlnk, noschg и т.п.
Исключение составляет флаг nodump. Чтобы его убрать нужно сказать не nonodump, а просто dump.
Естественно, как и предыдущие команды chflags может применяться к нескольким файлам и "рекурсивно" обходить поддиректории (ключ тот же -R).
FreeBSD является прямым потомком BSD UNIX ® и основывается на некоторых ключевых концепциях UNIX ®. В первую очередь это, конечно, тот факт, что FreeBSD – многопользовательская операционная система. Это означает, что несколько пользователей могут работать одновременно, решая различные задачи и совершенно не мешая друг другу. На системе лежит ответственность за правильное разделение и управление такими ресурсами как память, процессорное время, периферийные устройства и прочее.
Многопользовательская среда предполагает наличие механизма регулирования прав доступа к любому ресурсу в системе. Существует три типа прав доступа: на чтение, запись и исполнение. Права сгруппированы три по три, соответственно чтение/запись/выполнение для владельца/группы/всех остальных. Численное представление:
Значение | Права доступа | Список файлов каталога |
---|---|---|
0 | Ничего не разрешено | --- |
1 | Нельзя читать и писать, разрешено исполнять | --x |
2 | Нельзя читать и исполнять, разрешено писать | -w- |
3 | Нельзя читать, разрешено писать и исполнять | -wx |
4 | Разрешено читать, нельзя писать и исполнять | r-- |
5 | Разрешено читать и исполнять, нельзя писать | r-x |
6 | Разрешено читать и писать, нельзя исполнять | rw- |
7 | Разрешено все | rwx |
Вы можете использовать опцию -l команды ls (1) для получения подробного листинга каталога, включающего колонку с информацией о правах на файл для владельца, группы и всех остальных. Например, команда ls -l в произвольном каталоге может вывести следующее:
% ls -l total 530 -rw-r--r-- 1 root wheel 512 Sep 5 12:31 myfile -rw-r--r-- 1 root wheel 512 Sep 5 12:31 otherfile -rw-r--r-- 1 root wheel 7680 Sep 5 12:31 email.txt .
Вот как выглядит первая колонка вывода ls -l :
Первый (считая слева) символ говорит обычный ли это файл, каталог, символьное устройство, сокет или любое другое псевдо-файловое устройство. В нашем случае - указывает на обычный файл. Следующие три символа (в данном случае это rw- ) задают права доступа владельца файла. Затем идут права группы, которой принадлежит файл ( r-- ). Последняя тройка ( r-- ) определяет права для всех остальных. Минус означает отсутствие каких-либо прав (т.е. нельзя ни читать, ни писать, ни выполнять). В данном случае права установлены таким образом, что владелец может читать и писать в файл, а группа и другие могут только читать. Таким образом, численное представление прав 644 , где каждая цифра представляет три части прав на файл.
Права на устройства контролируются аналогичным образом. В FreeBSD все устройства представлены в виде файлов, которые можно открывать, читать и писать в них. Эти специальные файлы содержатся в каталоге /dev .
Каталоги также являются файлами. К ним применимы те же права на чтение, запись и выполнение. Правда, в данном случае « выполнение » имеет несколько другой смысл. Когда каталог помечен как « исполнимый » , это означает, что можно « зайти » в него (с помощью команды cd , change directory). Это также означает, что в данном каталоге можно получить доступ к файлам, имена которых известны (конечно, если собственные права на файл разрешают такой доступ).
Если же требуется получить список файлов в некотором каталоге, права доступа на него должные включать доступ на чтение. Для того, чтобы удалить из каталога какой-либо файл, имя которого известно, на этот каталог должны быть даны права на запись и на исполнение.
Существуют и другие права доступа, но они как правило используются в особых случаях, например, setuid-бит на выполняемые файлы и sticky-бит на каталоги. За дополнительными сведениями по этому вопросу обращайтесь к chmod (1) .
4.3.1. Символические обозначения прав
Символические обозначения, иногда называемые символическими выражениями, используют буквы вместо восьмеричных значений для назначения прав на файлы и каталоги. Символические выражения используют синтаксис (кто) (действие) (права), где существуют следующие значения:
Опция | Буква | Значение |
---|---|---|
(кто) | u | Пользователь (User) |
(кто) | g | Группа (Group) |
(кто) | o | Другие (Other) |
(кто) | a | Все (All, « world » ) |
(действие) | + | Добавление прав |
(действие) | - | Удаление прав |
(действие) | = | Явная установка прав |
(права) | r | Чтение (Read) |
(права) | w | Запись (Write) |
(права) | x | Выполнение (Execute) |
(права) | t | Sticky бит |
(права) | s | SUID или SGID |
Эти значения используются командой chmod (1) так же как и раньше, но с буквами. Например, вы можете использовать следующую команду для запрета доступа других пользователей к FILE :
Для изменения более чем одного набора прав можно применить список, разделенный запятыми. Например, следующая команда удалит права группы и « всех остальных » на запись в FILE , а затем добавит права на выполнение для всех:
4.3.2. Флаги файлов в FreeBSD
Кроме уже описанных прав доступа к файлам, FreeBSD поддерживает использование « флагов файлов » . Эти флаги обеспечивают дополнительный уровень защиты и контроля над файлами, но не могут применяться к каталогам.
Эти флаги добавляют дополнительные возможности контроля над файлами, обеспечивая (при определенных условиях) невозможность их удаления или изменения даже пользователю root .
Файловые флаги изменяются при помощи утилиты chflags (1) посредством простого интерфейса. К примеру, чтобы установить системный признак неудаляемости на файл file1 , выполните следующую команду:
Чтобы отключить флаг неудаляемости, просто выполните предыдущую команду с ключом « no » перед параметром sunlink . Вот так:
Чтобы просмотреть флаги этого файла, воспользуйтесь командой ls (1) с параметрами -lo :
Результат выполнения команды должен выглядеть примерно так:
Некоторые флаги могут быть установлены или сняты с файлов только пользователем root . В остальных случаях эти флаги может установить владелец файла. Для получения дополнительной информации мы рекомендуем изучить содержимое справки по командам chflags (1) и chflags (2) .
4.3.3. setuid, setgid и sticky-биты в правах доступа
В дополнение к рассмотренным выше правам доступа и флагам файлов необходимо также упомянуть еще три бита прав доступа, о которых должны знать все системные администраторы. Это такие биты, как setuid , setgid и sticky .
Эти биты играют важную роль в определённых моментах работы UNIX ®, так как они предоставляют функциональность, расширяющую права обычного пользователя. Чтобы понять как они работают, необходимо определить различие между реальным идентификатором пользователя (UID ) и действующим идентификатором пользователя (effective UID, EUID ).
Реальный UID — это идентификатор пользователя, запустившего процесс на выполнение. Действующий UID (EUID ) — это идентификатор пользователя, с которым на самом деле выполняется процесс. Например, утилита passwd (1) во время смены пароля пользователем запускается с реальным ID пользователя; однако, чтобы внести изменения в базу данных пользователей, ей необходимо работать с действующим ID пользователя root . Это тот механизм, который позволяет обычным пользователям изменять свои пароли и при этом не наблюдать ошибку Permission Denied .
Примечание:
Опция nosuid , указанная при монтировании файловой системы, отменяет действие битов setuid и setgid . То есть, утилиты, использующие эти биты прав, откажутся выполняться, даже не выдав пользователю никакого предостережения. К тому же, (с точки зрения обеспечения безопасности) эта опция монтирования не является абсолютно надежной, так как, согласно странице справочника mount (8) , накладываемые ею ограничения могут быть обойдены при помощи « обертки » nosuid ( nosuid wrapper).
Бит setuid устанавливается добавлением цифры четыре (4) перед численным представлением прав доступа, например:
Теперь права доступа на файл suidexample.sh выглядят подобно следующему:
В вышеприведенной строке приметно то, что в перечне прав доступа для владельца файла присутствует символ s , который заменил собой бит выполнения.
Чтобы посмотреть setuid в действии, откройте два терминала. На одном из них запустите команду passwd с правами обычного пользователя. Пока утилита ждет ввода нового пароля, просмотрите таблицу процессов и найдите в ней запись о процессе passwd .
trhodes 5232 0.0 0.2 3420 1608 0 R+ 2:10AM 0:00.00 grep passwd root 5211 0.0 0.2 3620 1724 2 I+ 2:09AM 0:00.01 passwd
Как уже было сказано, утилита passwd запущена с правами обычного пользователя, но ее действующий UID — root .
Действие бита setgid подобно действию setuid ; отличие заключается в том, что изменяются настройки прав для группы. Когда выполняется приложение (или утилита) с установленным битом setgid , то ему (ей) будут обеспечены права в соответствии с группой владельца файла, а не с группой пользователя, запустившего процесс.
Чтобы установить на файл бит setgid , выполните команду chmod , добавив цифру два (2) перед численным представлением прав доступа, например:
Новый бит отображается подобно предыдущему случаю: обратите внимание на наличие s в перечне прав доступа для группы:
Примечание:
В этих примерах, несмотря на то, что сценарий оболочки является исполняемым файлом, он не будет выполняться с другим действующим идентификатором пользователя (EUID ). Так происходит потому, что сценариям командного интерпретатора недоступен системный вызов setuid (2) .
Позволяя расширять права пользователя, оба бита прав доступа ( setuid и setgid ) могут привести к снижению безопасности системы. Третий обсуждаемый здесь бит — sticky — способствует повышению безопасности системы.
Бит sticky , будучи установленным на каталог, позволяет производить удаление файла только владельцу файла. Этот бит применяется для предотвращения удаления файлов в публичных каталогах, таких как /tmp , пользователями, не владеющими файлом. Чтобы задействовать этот бит, добавьте единицу (1) перед численным представлением прав доступа. Например:
Проверить результат можно при помощи команды ls :
Отличительной особенностью бита sticky является наличие символа t в самом конце перечня прав.
Пред. | Наверх | След. |
4.2. Виртуальные консоли и терминалы | Начало | 4.4. Структура каталогов |
По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в .
По вопросам, связанным с этой документацией, пишите в рассылку .
Полномочия пользователей и файлов, принадлежащих им, формирует концепцию ОС UNIX. Так как FreeBSD является многопользовательской ОС и принадлежит к семейству ОС относящихся к общему названию UNIX, поэтому умение грамотно управлять пользователями позволит избежать различных неприятностей.
Учётные записи пользователей и групп хранятся в двух файлах:
•/etc/master.passwd – в данном файле хранятся учётные данные пользователей и их пароли в зашифрованном виде.
•/etc/group – файл, отвечающий за группы
В FreeBSD используется технология теневых паролей – это когда системные данные пользователей разделены на два файла:
1.файл /etc/master.passwd в котором находятся пароли в зашифрованном виде, он имеет права только на чтение и запись для пользователя root
2.файл /etc/passwd, созданный с помощью команды pwd_mkdb(8) (генерация базы с паролями) из файла /etc/master.passwd, он имеет права на чтение для группы и других пользователей, в нём пароли заменены на *. Также с помощью команды pwd_mkdb(8) из файла /etc/master.passwd создаются два файла - /etc/pwd.db и /etc/spwd.db (индексированные базы данных), они предназначены для ускорения поиска, в случае большого количества системных пользователей. Файл /etc/spwd.db является секретным как и файл /etc/master.passwd и имеет теже права доступа и владельца.
Рассмотрим синтаксис файла /etc/master.passwd:
Каждая новая строка в файле описывает пользователя, она содержит в себе столбцы разделённые (:).
Столбцы по порядку:
При создании файла /etc/passwd из файла /etc/master.passwd поля class, change, expire удаляются, а пароль заменяется на *.
Поле логина (name) не может начинаться с символа (-), так же не советуется использовать прописные буквы в имени пользователя и разделять логин символом (.), что может вызвать проблемы при работе с почтой. В файле /etc/master.passwd поле password зашифровано, если поле отсутствует, т.е вместо пароля стоит символ *, то доступ к машине вы не получите. Для быстрого редактирования файла /etc/master.passwd и без последующего применения команды pwd_mkdb(8) применяется команда vipw(8) , это тот же редактор vi(1) , поэтому перед применение команды vipw(8) ознакомьтесь с man страницей по vi(1) .
При использовании (*) в /etc/master.passwd вместо поля password запрещается авторизация в системе так как символ (*) не может быть зашифрованным паролем. Например, для временной блокировки пользователя, можно использовать вместо поля password в файле /etc/master.passwd такую комбинацию *LOCKED* или добавить такую комбинацию в начало пароля, если он существует, а при разблокировке просто её удалить, для этого Вам понадобится команда vipw(8) . Для того, чтобы посмотреть как блокировать аккуант с помощью командной строки прочтите man по команде pw(8) .
  Поле gecos дающее общую информацию о пользователи, содержит в себе следующие поля, разделённые запятой:
•name – полное имя пользователя
•office – номер офиса
•wphone – рабочий телефон
•hphone – домашний телефон
Поле home_dir, определяет путь к домашнему каталогу пользователя, владельцем которого он будет являться.
Поле shell, определяет оболочку пользователя, список доступных оболочек для пользователя можно посмотреть в файле /etc/shells. Для пользователя root изменять текущую оболочку не рекомендуется, т.к в случае аварии файловая система /usr может быть не примонтирована, в следствии чего пользователь root не получит доступ к системе.
Если Вы хотите запретить доступ пользователя к системе, замените его оболочку на /sbin/nologin. Данная программа более корректно, чем другие (пр.: /dev/null) обработает попытку входа пользователя.
 
  При добавлении нового пользователя необходимо выбрать уникальное имя (login name) которое не будет встречаться в файле /etc/passwd и /etc/mail/aliases. Так же имя не должно начинаться с символа (-) и содержать в себе символ (.), и прописные буквы, так как могут возникнуть непредвиденные ситуации при работе с почтой. Новый пользователь получает уникальный id – UID и становится членом группы, имя которой совпадает с именем пользователя, в которой он будет один. Такая стратегия именования группы позволяет улучшить безопасность и гибкость при управлении доступом. UID и имя пользователя(login name) являются уникальными в системе и будут использоваться при осуществлении контроля доступа к файловой системе. После добавления пользователя в систему, в его домашний каталог копируются файлы .profile (выполняется при заходе пользователя в систему), если используется оболочка /bin/sh или .cshrc(при старте оболочки) и .login(при заходе пользователя в систему), если используется оболочка /bin/csh. Все эти файлы копируются из каталога /usr/share/skel.
  В файле /etc/group находятся все локальные группы системы. Данный файл можно редактировать любым текстовым редактором на Ваше усмотрение, т.е чтобы добавить группу достаточно отредактировать вышеуказанный файл.
  Файл состоит из отдельных строк, столбцы в которых разделены с помощью специального символа (:). Строка состоит из следующих столбцов или полей:
•group – название или имя группы
•password – зашифрованный пароль для группы
•gid – уникальный номер группы
•member – члены данной группы
Управление ресурсами пользователя и ограничения.
Управление ресурсами пользователя осуществляется с помощью классов, которые определяются в специальном файле /etc/login.conf, а также задаются пользователю при его добавлении. Если для пользователя не определён какой-либо класс, то ему присваивается класс – default. Каждый класс имеет набор характеристик в виде имя=значение. Для ускорения доступа к данным система непосредственно не читает файл /etc/login.conf, а вместо этого читает файл /etc/login.conf.db, который создаётся специальной командой cap_mkdb(1)
Поэтому после каждого изменения файла /etc/login.conf не забывайте исполнять команду cap_mkdb(1)
  Изменить или задать класс пользователю можно в файле /etc/master.passwd, в котором для этого имеется специальное поле class. Это обсуждалось выше. Пользователь с UID = 0, т.е администратор системы (root) не имеет действующего класса, к нему применяется запись root в /etc/login.conf или класс default, если запись root отсутствует.
  Пользователь может для себя создать индивидуальный файл с настройками ресурсов в домашнем каталоге под названием ~/login.conf, этот файл использует тот же синтаксис, что и файл /etc/login.conf, но он содержит только запись id с именем «me». В этом файле пользователь может только уменьшать предоставляемые ему ресурсы, но никак не увеличивать.
  В качестве разделителя полей в файле /etc/login.conf используется символ (:). Первое поле в файле означает имя класса, который в последующем будет применяться к тому или иному пользователю.
  Каждое поле в файле /etc/login.conf может принимать следующие значения:
•bool – если параметр является булевым, то оно может принимать следующие значения – true или false; Просто запись опции в файле /etc/login.conf без указания явного значения означает – true. Для определения false необходимо явно указать.
•file – опция принимает значение в виде пути к файлу;
•program – опция принимает значение в виде пути к исполняемуму файлу или программе;
•list – опция принимает значения в виде списка разделённого запятой или пробелом;
•path – опция принимает значения путей, разделённых запятой или пробелом. Тильда (~) раскрывается в домашний каталог пользователя;
•number – числовой значение, в десятичном, шестнадцатиричном или восьмеричном виде.
•string – в виде строки;
•size – размер. По умолчанию принимается в байтах. Может принимать следующие суффиксы для обозначения единиц размеров:
b – байты
k – килобайты
m – мегабайты
g – гигабайты
t – терабайты
Возможно объединение значений с указанием соответствующих суффикосв: 1m30k
•time – период времени, по умолчанию выраженный в секундах. В качестве суффикса используются следующие обозначения:
y – год
w – неделя
d – день
h – час
m – минуты
s – секунды
Возможно объединение значений с указанием соответствующих суффиксов: 2h30m
•unlimited – отсутствие ограничений
Ограничение ресурсов:
  Ресурсы могут ограничиваться как мягкими, так и жёсткими ограничениями, разница между ними состоит в том, что жёсткие ограничения пользователь не сможет увеличивать, а мягкие сможет, но не больше чем жёсткое значение. Для обозначения мягких и жёстких ограничений используются специальные суффиксы –max и –cur. Пр: filesize-max
Окружение пользователя:
Авторизация пользователя:
В опциях host.allow и host.deny разделителем хостов является запятая.
 
  В опциях times.allow и times.deny записи разделяются запятой. Значения периодов времени записываются в 24 –х часовом формате, отделённых друг от друга дефисом.
Для примера: MoThSa0200-1300 Данная запись расшифровывается следующим образом: доступ пользователю разрешён по понедельникам, четвергам, субботам в период с 2 –ч часов ночи до часу дня. Если обе опции в пользовательском классе отсутствуют, то доступ разрешается в любое время. Если период времени разрешённый в опции times.allow запрещается периодом времени в файле times.deny, то приоритет имеет опция times.deny.
 
  В опциях ttys.allow и ttys.deny содержаться записи tty устройств, разделённые запятой (без префикса /dev/) и список ttygroups (смотрите getttyent(3) и ttys(5) ) к которым пользователь данного класса имеет или не имеет доступ. Если в опции нет ни одной записи, то пользователь имеет неограниченный доступ.
 
  Параметры пароля такие как минимальная длинна (minpasswordlen) и параметр отвечающий за предупрждение, если пользователь вводит пароль только в нижнем регистре (minpasswordcase) не поддерживаются, для этих ограничений применяется pam модуль pam_passwdqc(8) .
  Задание классов для системных пользователей является очень хорошим средством индивидуального ограничения пользователя, но используйте это средство осознанно и с осторожностью.
Для управления пользователями и группами будут полезны следующие команды:
•pw(8) – создание, удаление, изменение, отображение пользователей и групп;
•adduser(8) – интерактивное добавление нового пользователя;
•rmuser(8) – удаление пользователя из системы;
•id(1) – отображение имени пользователя, UID и групп в которых он состоит с указанием их GID;
•finger(1) – отображает информацию о системном пользователе;
•users(1) – показывает список текущих пользователей;
•who(1) – показывает тех кто находится в системе;
•whoami(1) – показывает эффективный id пользователя соответствующий имени;
•last(1) – показывает когда пользователь пользовался терминалом;
•lastlogin(8) – показывает информацию о последнем использовании терминала;
•lastcomm(1) – показывает список последних выполняем команд пользователем;
•ac(8) – показывает время, которое пользователь находился в системе;
•sa(8) – показывает статистику по пользователям;
•passwd(8) – смена пароля пользователю;
•chpass(1) – смена пароля пользователя;
•chfn(1) – изменение пользовательских данных;
•groups(1) – показывает кто в каких группах состоит;
•chgrp(1) – изменение группы;
•chkgrp(8) – проверка синтаксиса файла групп;
Для полноценного использования команд lastcomm(1) , sa(8) Вам необходимо включить учёт используемых ресурсов. Учёт используемых процессами ресурсов представляет собой метод защиты, при котором администратор может отслеживать использование системных ресурсов и их распределение между пользователями для нужд системного мониторинга и минимального отслеживания команд пользователей.
  Для того что бы включить систему учёта используемых ресурсов Вам необходимо выполнить несколько действий.
После выполнения 3 действия Вы уже можите использовать команды lastcomm(1) , sa(8) . Команда accton(8) включает систему учёта используемых ресурсов.
 
Практика:
(Для более подробной информации о командах обязательно читайте манны)
Использование системы учёта ресурсов, команда lastcomm(1) и sa(8):
Добавление нового пользователя в систему, будем использовать команду pw(8):
Давайте разберём наше действие:
  -s – указывает какой терминал будет использоваться, поле shell
  -с – комментарии к созданному пользователю, поле gecos
  -e – время жизни аккуанта, поле expire. Формат поля аналогичен опции '-p'
-p – время жизни пароля, поле change. Формат задания даты или времени таков:
dd-mm-yy[yy], где dd – день, mm – месяц, yy[yy] – год. Или используется следующий
формат: +0mhdwoy, где m – минуты, h – часы, d – дни, w – недели, o – месяц, y - год
-m – заставляет создать домашний каталог пользователя и скопировать в него стандартные файлы
и каталога /usr/share/skel
-b – базовая директория в которой будет находится домашний каталог пользователя, поле home_dir
-L – задаёт класс для пользователя из файла login.conf, поле class
Результаты работы, из файла /etc/master.passwd:
Более интерактивная команда adduser(8) , она имеет конфигурационный файл, в котором вы можите предопределить вводимые данные.
Как видим пользователь у нас не имеет пароля, поэтому не сможет войти в систему, для того что бы задать пароль используем команду passwd(8) :
Для более корректного удаления пользователя из системы используйте команду rmuser(8), данная команда не просто удаляет пользователя из файла /etc/master.passwd, но и все его данные в системе:
Используйте утилиту rmuser(8) с параметром ‘–y’ что бы она не спрашивала подтверждения на удаление.
Пример удаления без опции '-y' и с опцией 'y':
Посмотрим теперь информацию о существующих пользователях, для этого будем использовать каманды id(1), finger(1):
Как видим утилита показывает информацию, к каким группам принадлежит пользователь. У данной команды есть много полезных опций, поэтому почитайте манн.
Давайте теперь узнаем кто сейчас находится в системе, для этого будем использовать команды users(1) и who(1):
 
Создадим новую группу:
Мы создали новую группу ‘test’ и сразу же добавили в неё пользователя ‘atrium’.
С помощью прекрасной команды pw(8) мы создали группу 'list’ и добавили в неё пользователя atrium и root. Так же посмотрели созданную группу.
размещено: 2009-06-04,
последнее обновление: 2009-06-25,
автор: atrium
barsykoff, 2009-06-08 в 17:32:11
Мощно! Почерпнул для себя кое-что новое. Спасибо!
alexfk, 2009-06-26 в 0:34:12
> команда vipw(8), это тот же редактор vi(1)
а я всегда думал, что это тот же редактор, на который указывает переменная окружения EDITOR
По существу: коротко и ясно несмотря на грамматические ошибки.
Спасибо!
wf, 2009-06-26 в 11:16:55
Со свездой в master.passwd можно войти в систему по ссш с авторизацией по ключу.
А в общем статья очень познавательная!
гыгболомар), 2009-12-17 в 16:53:27
Неоригинально. И заколебали уже ;)
scompick, 2010-02-27 в 18:58:23
Все четко и в одном месте. Спасибо!
Неоригинально. И заколебали уже ;), 2013-01-22 в 21:01:08
Неоригинально. И заколебали уже ;)
ttys, 2013-11-01 в 15:55:43
поправь
cam_mkdb /etc/login.conf
на
cap_mkdb /etc/login.conf
Неоригинально. И заколебали уже ;), 2015-09-02 в 13:25:27
Неоригинально. И заколебали уже ;)
Игорь, 2022-03-24 в 6:53:20
И в 2022 году эта статья читается и её автору шлются благодарности!
Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
Если соизволите поставить автора в известность — то вообще почёт вам и уважение.
Довольно странная задача, не так ли? Но меня порадовала сама возможность этого. Опять же, это может быть полезно администраторам, желающим посмотреть: что же загрузили пользователи.
PostgreSQL - система управления базой данных общего назначения. Одна из самых распространённых баз данных, используемая на многих коммерческих и некоммерческих проектах.
Не всегда нужно удалять всё, но объяснение данного "рецепта" объяснит как в целом удалять образы и контейнеры.
Небольшая заметка о конструкциях Bash, в которых путается большинство новичков. А именно: >,
Сейчас такие языки как Perl и Ruby чувствуют себя не лучшим образом. Но ещё 10 – 15 лет назад они были на "гребне волны".
Запускаем программу в терминале в фоновом режиме и разбираемся, как и почему это работает в Linux / Unix терминале.
Команда less является одной из самых известных на ряду с cd, cp, mv и т.д. Но используется less зачастую далеко не на всю мощь.
Прибираемся в локальной версии Git – чтобы локальная версия соответствовала удалённой (серверной) версии Git проекта.
Во-первых, надо отметить - кто может поменять для файла (директории) владельца и группу.
Безусловно, это может сделать root.
Поменять владельца файла не может никто, кроме root'а.
А вот группу для файла может, также, поменять сам владелец файла, но только в том случае, если он сам является членом этой (новой) группы.
Для изменения владельца файла служит команда chown ("change owner"). С ее помощью можно заодно заменить и группу, хотя для изменения этого атрибута есть специальная команда chgrp ("change group").
Подробно об этих командах можно прочитать в соответствующих man'уалах ( man chown и man chgrp ). Поэтому, рассмотрим только их краткое описание.
Команда chown выглядит очень просто если же вы хотите поменять не только владелец, но и группу, то
Кстати, никто не мешает указать в команде "старого" владельца, тогда изменится только группа.
Ну и, конечно, если вы хотите заменить владельца (группу) сразу на нескольких файлах, вместо имени файла можно указать подходящий "шаблон", например "*" (выполнить операцию для всех файлов в текущей директории).
Если же вы хотите, чтобы аналогичная операция была проделана не только в текущей директории, но и во всех "нижележащих" поддиректориях, вам поможет ключ -R (recursively).
заменит владельца на vasia , а группу на users для всех файлов и поддиректорий, находящихся в текущей директории и "ниже", то есть в самих поддиректориях.
Команда chgrp очень похожа не предыдущую, толко в качестве первого аргумента ей нужно указать название новой группы для файла (или файлов).
Естественно, все что было сказано о команде chown относительно выполнения ее над несколькими файлами и о ключе -R , также относится и к команде chgrp .
Права доступа (permissions)
Итак, для изменения прав доступа (permissions) служит команда chmod ("change mode"). В целом эта команда выглядит как и предыдущие (которые меняют владельца и группу)
Но, в отличии от предыдущих команд, второй аргумент ("что сделать") имеет несколько более сложный вид. В нем можно выделить три части
Как понятно из таблицы, первой задается категория юзеров (владелец, группа или "все остальные"). Причем, можно поставить сразу несколько букв, обозначив тем самым сразу несколько категорий. Например, go будет означать, что права меняются сразу и для группы и для "всех остальных". Если надо изменить права сразу для трех категорий, можно написать три буквы - ugo или одну букву a (все три категории).
Следом указывается "операция" (добавить права или наоборот - убрать). И, наконец, после "операции" один или несколько битов доступа, которые требуется изменить. Значение этих битов подробно рассматривалось выше, поэтому здесь не будем на них останавливаться.
Некоторых пояснений, наверное, требует "операция". Как можно догадаться, знаки "-" и "+" означают "убрать" или "поставить" соответствующие права.
А знак " остальные", но никак не повлияет на биты r и w для этой же категории. А указав действие как o=rx , вы тем самым скажете системе - "установить биты r и x , и убрать бит w , если он там был".
Бит s имеет разный смысл ( suid или sgid ) в зависимости от того, в какой части permissions он находится. Поэтому, если вы хотите поставить именно suid бит, то "что сделать" должно выглядеть как u+s , а если вам нужен sgid , то - g+s . Sticky бит ставится командой chmod a+t . .
Как видите, синтаксис этой команды достаточно гибкий (хотя и несколько сложноватый). Кроме того, второй аргумент ("что сделать") может состоять из нескольких "действий" перечисленных через запятую.
Например, можно задать команду
это будет означать - "для всех категорий права r-x , а для владельца еще и w (право записи)".
Кроме того, команда chmod (точнее - ее первый аргумент) имеет еще одну форму.
Поскольку, все биты доступа это действительно двоичные биты из одной ячейки, "продвинутый" пользователь может указать сразу число (в восьмеричном виде) которое должно получится после изменения прав.
Восьмеричное представление выбрано потому, что при переводе в него двоичного числа, каждая группа из трех бит "сворачивается" в одну цифру. Таким образом, вам надо просто указать три цифры, каждая из которых описывает отдельную категорию юзеров (точнее - права для этой категории). Например, permissions rwxr-xr-x можно представить в восьмеричном виде как 755 . И, следовательно, такие права могут быть выставлены командой
Что касается выполнения этой операций над несколькими файлами или "рекурсивного" обхода всех поддиректорий, здесь все так же, как для команд chown, chgrp . В качестве имени файла может быть задан "шаблон", а для обхода всех поддиректорий используйте ключ -R .
И, конечно, я советую все таки прочитать man chmod .
Флаги.
Кто может менять флаги (и какие) подробно описывалось в разделе о флагах.
Команда, которая их ставит/убирает - chflags ("change flags"). Формат ее достаточно простой
- sappend - sappnd
- uappend - uappnd
- sunlink - sunlnk
- uunlink - uunlnk
- simmutable - schange или schg
- uimmutable - uchange или uchg
- arcived - arch
- (флаг nodump не сокращается :-)
Для того, чтобы убрать флаг, надо указать его название с префиксом no - nosappnd, nosunlnk, noschg и т.п.
Исключение составляет флаг nodump . Чтобы его убрать нужно сказать не nonodump , а просто dump . :-)
Естественно, как и предыдущие команды chflag s может применяться к нескольким файлам и "рекурсивно" обходить поддиректории (ключ тот же - -R ).
Читайте также: