Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Бесплатный конструктор сайтов и Landing Page

Хостинг с DDoS защитой от 2.5$ + Бесплатный SSL и Домен

SSD VPS в Нидерландах под различные задачи от 2.6$

✅ Дешевый VPS-хостинг на AMD EPYC: 1vCore, 3GB DDR4, 15GB NVMe всего за €3,50!

🔥 Anti-DDoS защита 12 Тбит/с!

VPS в 21 локации

От 104 рублей в месяц

Безлимитный трафик. Защита от ДДоС.

🔥 VPS до 5.7 ГГц под любые задачи с AntiDDoS в 7 локациях

💸 Гифткод CITFORUM (250р на баланс) и попробуйте уже сейчас!

🛒 Скидка 15% на первый платеж (в течение 24ч)

Пользовательские бюджеты и группы часть 2

Kак удалить пользователя?
Что может поменять пользователь в своем бюджете?
Как временно убрать пользователя (не удалить, но запретить вход)?
Что такое группа?
Где хранится информация о группах?
Как создать или удалить группу?
Как поменять принадлежность юзера к группе (группам)?
Привилегированный пользователь
Вопросы и ответы
Упражнения

Как удалить пользователя?

С одной стороны, очень просто - удалите его бюджет из базы. Это можно сделать программой vipw - найдите соответствующую строчку и удалите ее.

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

Что надо удалить?

Во-первых, домашнюю директорию юзера. Кстати, если администратор не предпринимал никаких действий, чтобы дать юзеру возможность писать в другие директории, то все файлы, которые мог "наплодить" юзер должны лежать в его Home dir. Если же вы дали юзеру права создавать файлы в других директориях (в публичном ftp архиве или в директории www сервера, например), то, возможно, надо "почистить" и там.

Во-вторых, "почтовый ящик" юзера в директории /var/mail (или /var/spool/mail). Сделайте это обязательно, даже если юзер просил пока не удалять почту. Дело в том, что название этого файла совпадает с Name юзера, а права на чтение/запись определяются его user ID, и, естественно, должны соответствовать друг другу.

Не вдаваясь в подробности, могу сказать, что если вы вскоре зарегистрируете нового пользователя с тем же user ID (он же освобождается), но с другим именем, или наоборот - с таким же именем, как у старого юзера, но с другим user ID, то у этого нового юзера возникнут серьезные проблемы с получением почты.

В-третьих. Могут быть еще где-то раскиданы файлы, владельцем которых был этот юзер. Например, в директории /tmp, /usr/tmp, /var/tmp.

Найти все эти файлы можно с помощью программы find. Например, так

find / -user <юзер>

(Обратите внимание, первый аргумент - директория, начиная с которой искать. В данном примере это корневая, то есть будут просмотрены все файлы в системе. С одной стороны это хорошо - ничего не пропустите, но, с другой стороны, если у вас стоит ньюс-сервер или огоромный ftp-архив, то ждать придется долго).

С помощью этой же команды можно и удалить все найденные файлы

find / -user <юзер> -delete

однако, поскольку она не спрашивает подтверждения, этот метод очень опасный. Лучше уж заставить ее выполнять команду rm ( с подтверждением) для каждого найденного файла

find / -user <юзер> -exec rm -i {} \;

И, наконец, привожу небольшой список (скорее всего, неполный) - где еще могут остаться упоминания об этом юзере.

  • в файлах /etc/group, /etc/login.access, /etc/ftpusers
  • в таблицах программы sendmail: /etc/aliases и т.п. (virtusertable, genericstable и др.)
  • если у вас отдельным юзерам разрешается запускать задачи с помощью cron, то юзер может упоминаться в /etc/crontab или в /var/cron/allow, /var/cron/deny, а, также, может быть его индивидуальная crontab в /var/cron/tabs/
  • если юзерам разрешается пользоваться пакетным выполнением программ, то юзер может упоминаться в /var/at/at.allow, /var/at/at.deny
  • если у вас ведется квотирование дискового пространства, то должна быть quote для этого юзера
  • если юзер пользуется IP связью через модем, то он может упоминаться в файлах, лежащих в /etc/sliphome или /etc/ppp
  • от имени юзера могут запускаться какие-нибудь демоны (особенно это касается псевдо-юзеров), тогда имя юзера может быть в /etc/inetd.conf или /etc/rc.local.

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

Однако, в большинстве случаев все гораздо проще.

Самый простой способ удалить юзера

Большую часть работы по удалению юзера (и всяческих упоминаний о нем) выполняет программа

rmuser <имя юзера>

Во всяком случае, кроме удаления бюджета, она удаляет

  • его домашнюю директорию;
  • его почтовый ящик в /var/mail;
  • упоминания о юзере в /etc/group;
  • персональную crontab юзера;
  • пакетные задания юзера в /var/at/jobs.

В большинстве случаев этого вполне достаточно.

Что может поменять сам пользователь в своем бюджете?

Естественно, любой юзер может поменять свой пароль (и даже желательно, чтобы он это делал время от времени).

Делается это командой passwd, той же, которой пользуется администратор. Разница в том, что администратор может поменять пароль любому юзеру, вызвав эту команду с именем юзера в качестве аргумента. А обычный юзер может поменять только свой пароль.

Кроме того, юзер, как и администратор, может воспользоваться программой chpass. Естественно, он может редактировать только свою учетную карточку. При этом, он сможет поменять в ней только поля Shell и General information (свое реальное имя, адрес, телефон).

Как временно убрать пользователя (не удалить, но запретить вход)?

Бывают такие ситуации, когда надо запретить юзеру пользоваться вашей машиной временно. Конечно, самый простой способ - удалить его учетную карточку, но не трогать остальные файлы. Однако, этот способ имеет кучу недостатков:

  • почта на несуществующего юзера будет возвращаться отправителю,
  • user ID этого юзера может достаться другому (новому юзеру),
  • при возвращении юзера в систему надо будет воспроизвести в точности ту же учетную карточку,
  • и т.п.

Поэтому, этот способ - самый неудачный и его даже не стоит рассматривать. Лучше рассмотрим другие возможности:

Первый способ

Этот способ заключается в том, что в бюджет надо вписать <Account expiration time> (с помощью программы chpass), естественно, поставив там уже прошедшую дату. В этом случае, юзер как бы существует в системе - письма к нему идут, файлы сохраняются, во всех диагностиках, где может встретиться его имя, оно отображается правильно. Но, в то же время, если юзер попытается войти в систему, ему просто выдастся сообщение, что "ваш account истек".

Однако, это способ тоже не лишен недостатков. Чтобы понять - почему, надо рассмотреть подробнее, что значит "доступ в систему" юзера.

Обычный юзер может войти в систему (и пользоваться ее ресурсами) через терминал или по сети, с помощью telnet. При этом должна проработать программа login (которая проверит имя и пароль юзера и, если все правильно, запустит для него Shell). Эта же программа обычно вызывается для тех, кто заходит через модем и устанавливает IP соединение по модемной линии (PPP или SLIP). (Кстати, программе login можно запретить пропускать юзера, если прописать правильную строчку (запрещающую вход конкретному юзеру) в файле /etc/login.access. Как это правильно сделать, можно посмотреть в man login.access). Но, кроме того, юзер может (если, конечно, ваша система предоставляет такой сервис):

  • иметь доступ к своим файлам через FTP, тогда проверкой имени/пароля занимается ftpd (программа-сервер FTP);
  • читать свою почту через POP-сервер, тогда проверкой имени/пароля занимается программа popper (или другой РОР-сервер);
  • иметь доступ к своей домашней директории через сервер samba, тогда проверкой имени/пароля занимается программа smbd;
  • пользоваться удаленным запуском программ (rlogin, rsh и т.п.), тогда проверкой имени/пароля занимаются соответствующие демоны (rlogind, rshd и т.д.);

Так вот. Проблема в том, что не все перечисленные демоны (программы-серверы), ответственные за допуск юзера к ресурсам, могут обращать внимание на "Account expiration time". И, следовательно, все равно дадут юзеру возможность воспользоваться своими услугами.

Второй способ

Другой способ "отсечь" юзера заключается в том, чтобы "испортить" ему пароль. Для этого достаточно добавить к зашифрованному паролю, хранящемуся в учетной карточке, один знак. Обычно, ставят знак <*> в начале пароля, поскольку этот знак не может встретиться в нормальном зашифрованном пароле и, во-первых, пароль в этом случае невозможно подобрать, а во-вторых, такое "искажение" пароля легче потом искать, когда вы будете возвращать юзера обратно. Сделать такую манипуляцию можно программой vipw или chpass.

Этот способ надежно срабатывает во всех случаях, когда юзер пытается получить доступ в систему, независимо от того, через какую программу он это делает (он просто не знает теперь своего пароля).

Недостаток этого способа в том, что он менее "цивилизованный". То есть, юзер просто получит сообщение о том, что он неправильно ввел свое имя или пароль, а не о том, что ему запрещен вход.

Кроме того, есть случаи, когда этот способ не работает. Дело в том, что удаленные сервисы могут не проверять пароль, если у юзера в домашней директории в соответствующем файле (.rhosts) записаны адреса машин "пользующихся доверием" и он осуществляет доступ именно с этих машин. В этом случае, проверяется только адрес машины (и имя юзера под которым он зарегистрирован там), а пароль не запрашивается, следовательно, описанный метод не сработает. (Кстати, предыдущий метод account expiration в этом случае должен работать.)

Так как же все таки надо поступить?

Способ с "испорченным" паролем более универсальный, но все-таки неправильный.

Самый правильный путь - подбирать всех демонов таких, которые правильно отрабатывают запрет входа (например, через <account expiration>). Кстати, те демоны, которые у Вас из "родного" дистрибутива, должны правильно обрабатывать такой запрет. Проблемы могут возникнуть только с программами от других разработчиков.

Кроме того, для юзеров, запускающих "IP по модему", обычно, другой способ входа недоступен. Поэтому можно смело пользоваться <account expiration> или запретом в /etc/login.access.

Ну и хочу напомнить, что "не стесняйтесь" читать man- страницы, там все очень хорошо описано.

man 5 passwd - описывает структуру учетной карточки (user account)

man adding_user - общие слова о добавлении юзера. Кстати, там есть рекомендации - каким должно быть Login name

man pwd_mkdb

man vipw

man adduser

man passwd - изменение пароля

man chpass - другие изменения в учетной карточке

man rmuser

man login.access

man login.conf

А, также, в каждом из них есть раздел See Also (смотри также...). Их тоже можно почитать, хотя, в основном, они все ссылаются друг на друга.

Что такое группа?

Группа - это группа (из юзеров). J. Тавтология конечно, но это самое точное определение.

В системах Unix все юзеры объединяются в группы. Причем,

каждый юзер входит по крайней мере в одну группу, но может быть "членом" нескольких различных групп.

Как и индивидуальные юзеры, каждая группа имеет свое имя (group name) и числовой номер (groupID). Естественно, они однозначно соответствуют друг другу. Так же, как и для индивидуальных юзеров, groupID используется внутри системы, а имя (group name) при вводе и выводе сообщений для пользователей (хотя, в большинстве команд, можно указывать вместо имени и groupID).

В основном, группы (юзеров) используются при определении прав доступа к различным файлам и директориям. Не вдаваясь в подробности, можно сказать, что для каждого файла (директории) в Unix'е существует его владелец (это один из юзеров) и группа "особо допущенных" к этому файлу (директории). При этом владелец файла может задать права доступа к нему (чтение, запись и т.п.) разные для себя, группы "допущенных" и для всех остальных (не входящих в эту группу).

Естественно, сам состав групп (список индивидуальных юзеров, входящих в группу) хранится в соответствующей базе данных, а к файлам "привязывается" только номер группы (groupID).

Где хранится информация о группах?

Здесь есть маленькая тонкость. На самом деле надо рассмотреть два вопроса:

Где хранится имя и номер группы?

Как определяется список "членов" группы?

Где хранится имя и номер группы?

В файле /etc/group. Это просто текстовый файл, в котором каждая строчка описывает одну группу. Отдельные поля разделяются двоеточием. Назначение полей:

  • имя группы (group name)
  • пароль группы (group passwd)
  • номер группы (group ID)
  • список (через запятую) юзеров, входящих в группу (group members).

Поле <пароль группы> в системе FreeBSD пока никакими программами не используется, и там обычно ставится звездочка <*>.

Таким образом, файл /etc/group определяет - какие группы существуют в данной системе и устанавливает соответствие между именем и номером группы.

А, что касается принадлежности юзеров определенной группе, то этот вопрос немного сложнее.

Как определяется список членов группы?

Каждый юзер должен входить, по крайней мере, в одну группу. Эта группа (точнее ее groupID) прописывается в бюджете юзера (user account), в поле groupID (см. Какие данные хранятся в бюджете пользователя?).

А, чтобы тот же юзер стал членом еще какой-нибудь группы, его можно записать (его login name) непосредственно в файл /etc/group, в поле "group members" (см. выше), соответствующей группы. Таким образом, членами какой-либо группы являются

  • юзеры, которые перечисленные в файле /etc/group в списке юзеров этой группы
  • юзеры, в учетной карточке которых, стоит groupID этой группы.

Как создать или удалить группу?

Это достаточно просто сделать "вручную". Файл /etc/group, хранящий информацию о группах имеет простой формат и его можно менять любым текстовым редактором.

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

Для удаления группы, просто удалите соответствующую строчку.

Проблемы могут возникнуть только, если у вас слишком много разных групп и вам будет трудно ориентироваться в тексте. Тогда вам, возможно, помогут специальные программы.

Программы addgroup и rmgroup.

Назначение этих программ понятно из названия.

addgroup добавляет группу в список групп. Достоинство этого способа (в отличии от добавления группы вручную) заключается только в том, что эта программа может сама подобрать для вновь создаваемой группы groupID, который пока не используется другими группами. Ну и, естественно, не сделает никаких ошибок в /etc/group. Хотя формат /etc/group настолько простой, что там трудно ошибиться.

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

rmgroup - удаляет заданную группу из /etc/group. Достоинство этого способа в том, что вам не придется искать нужную строчку в файле /etc/group. Кроме того, она не даст вам удалить те группы, которые имеют "жизненно важное значение" для системы.

Естественно, более подробно об этих программах можно почитать:

man addgroup

man rmgroup

Программа pw.

Программа pw - универсальная утилита для администрирования (создания, удаления, изменения, просмотра) и юзеров и групп. Мы не будем рассматривать ее в данном курсе, а оставим Вам для самостоятельного изучения !!!

О безопасности.

Файл /etc/group по умолчанию может читаться всеми юзерами, а изменять его может только root (администратор системы). Не надо менять эти условия.

Поскольку группы (юзеров) определяют дополнительные права доступа к файлам и директориям других юзеров, у некоторых из них (юзеров) могут возникнуть желания (и реальная необходимость) образовывать новые группы, в которые входили бы только близкие друзья какого-либо юзера, но не входили все остальные. Естественно, при обычных условиях, рядовой юзер не сможет создать новую группу для себя и своих друзей. Для этого ему придется обращаться к root.

Так вот, даже если есть реальная необходимость некоторым юзерам (не имеющим прав администратора) время от времени создавать новые группы или менять "список членов" какой-либо группы, не надо давать им право менять содержимое /etc/group. Это сильно ослабит безопасность системы!!! (Если такая необходимость действительно существует, лучше решать эту проблему, написав специальную программу, которая позволит отдельным юзерам изменять некоторые группы.)

Как поменять принадлежность юзера к группе (группам)?

Это зависит от того, о какой группе идет речь.

Если вы хотите поменять ему основную группу (первичную), то надо исправить соответствующее поле (group ID) в его бюджете (user account).

Кстати, если вы проделаете такую операцию с реальным юзером, не забудьте, что его домашняя директория и файлы, находящиеся в ней принадлежат группе, в которой раньше находился юзер. Так что, очень желательно поменять соответствующий атрибут у всех файлов и директорий этого юзера. Если же вы хотите добавить юзера еще в какую-нибудь группу или, наоборот, исключить его из членов группы (не первичной для этого юзера), то исправления надо делать в файле /etc/group в поле <group members> соответствующей группы.

Как и в случае создания группы это можно сделать либо просто отредактировав файл /etc/group вашим любимым редактором, либо воспользоваться специальными утилитами, теми же, что и для создания групп.

addgroup

Комманда addgroup может использоваться не только для создания новой группы, но и для добавления юзера в существующую группу. Например, команда

addgroup games doom

добавит юзера doom в группу games.

Пожалуй, это тот редкий случай, когда проще воспользоваться специальной командой, чем редактировать файл /etc/group. Но будьте осторожны - если вы случайно ошибетесь в названии группы, эта команда молча создаст новую группу и впишет юзера в нее.

pw groupmod

Изучите работу этой команды самостоятельно !!!

Надо заметить, что описанные команды хорошо добавляют юзеров в группы, но не приспособлены для удаления определенного юзера из определенной группы. Правда, у команды pw groupmod есть ключ -M, который означает полностью заменить список членов группы на тех юзеров, которых вы и укажете (через запятую) после ключа -M. Однако, понятно, что удалять одного конкретного юзера из длинного списка членов таким способом - не очень удачное решение. В общем, для удаления юзера из списка членов какой-либо группы, удобнее всего пользоваться обычным текстовым редактором.

Привилегированный пользователь

Системным администраторам приходится отменять действие защитных механизмов UNIX в самых разных ситуациях. Для обеспечения такой возможности система выделяет среди всех идентификаторов пользователей один особый, нулевой, который принадлежит привилегированному пользователю. По соглашению UNIX-системы определяют для этого UID пользовательский бюджет под именем <root>.

Вот примеры операций, которые может выполнить только привилегированный пользователь:

  • монтирование и демонтирование файловых систем;
  • изменение командой chroot корневого каталога процесса;
  • создание файлов устройств;
  • установка системных часов;
  • изменение принадлежности файлов;
  • увеличение лимитов использования ресурсов и назначение приоритетов процессов;
  • задание host-имени системы;
  • конфигурирование сетевых интерфейсов;
  • остановка системы.

Примером возможностей привилегированного пользователя может служить способность принадлежащего ему процессора изменять по своему усмотрению параметры принадлежности. Один из таких случаев - программа login; процесс, который приглашает Вас при входе в систему ввести свой пароль. Он изначально выполняется как корневой. Если веденные имя и пароль пользователя правильны, то login заменяет свои UID и GID соответствующими идентификаторами указанного пользователя и запускает интерпретатор команд shell. После того как корневой процесс, изменив свою принадлежность, станет обычным пользовательским процессором, восстановить свое предыдущее привилегированное состояние он не сможет.

Существует несколько способов доступа к бюджету привилегированного пользователя. Самый простой из них - зарегистрироваться под именем root. К сожалению, выход из собственного бюджета и регистрация в качестве привилегированного пользователя часто очень неудобны. Лучше использовать команду su. Будучи вызванной без аргументов, эта команда пригласит Вас ввести пароль привилегированного пользователя, а затем запустит shell с правами привилегированного пользователя. Привилегии этого интерпретатора команд остаются в силе до завершения его работы.

Команда su также может подставлять вместо root имена других пользователей. Зная чей-либо пароль, можно непосредственно войти в его бюджет, выполнив команду

su <имя пользователя>. Как и при входе в бюджет root, система запросит пароль пользователя <имя пользователя>.

Рекомендуется взять за правило при вводе команды использовать полное путевое имя /bin/su, а не просто su. Это в какой-то мере защитит Вас от тех программ с именем su, которые проскользнули в ваш путь поиска, намереваясь собрать хороший урожай паролей.

Важное замечание: Использовать команду su могут только члены группы wheel.

Вопросы и ответы.

Вопрос: Как проще всего добавить пользователя?

Ответ: Используйте команду adduser. Для выполнения более сложных операций обратитесь к команде pw.

Чтобы удалить пользователя, используйте команду rmuser.

Вопрос: Я забыл пароль администратора! Что мне делать?

Ответ: Просто перезапустите систему, наберите -s в приглашении Boot: (Boot: -s) для входа в однопользовательский режим. На вопрос об используемой оболочке нажмите ENTER. На приглашение # введите mount -u /, чтобы перемонтировать корневую файловую систему в режиме чтения/записи, после чего выполните команду mount -a для монтирования всех файловых систем. Запустите команду passwd root, чтобы сменить пароль администратора и затем exit для продолжения процесса загрузки

Вопрос: Почему на ввод команды su выдаётся сообщение о том, что я не могу ею пользоваться?

Ответ: Вы не являетесь членом группы wheel. Отредактируйте файл /etc/group (для этого надо войти в систему как root), добавив в строку wheel:*:0:root через запятую свой login (wheel:*:0:root, mylogin)

Упражнения.

  1. Добавьте юзера theUser с помощью команды adduser, установив ему в качестве shell - /bin/csh.
  2. С помощью команды vipw установите ему в качестве shell - /usr/local/bin/bash.
  3. Войдите в систему под именем theUser. Какое приглашение от системы Вы видите? (bash-2.02$).
  4. Удалите юзера theUser (сначала командой rmuser, потом создайте снова и удалите с помощью vipw).
  5. Изучите работу команды pw (man pw).

    Сopyright © 2000. Андрей Фёдоров
    http://www.anriintern.com/computer/freebsd/

    Назад | Содержание | Вперед

     

Скидка до 20% на услуги дата-центра. Аренда серверной стойки. Colocation от 1U!

Миграция в облако #SotelCloud. Виртуальный сервер в облаке. Выбрать конфигурацию на сайте!

Виртуальная АТС для вашего бизнеса. Приветственные бонусы для новых клиентов!

Виртуальные VPS серверы в РФ и ЕС

Dedicated серверы в РФ и ЕС

По промокоду CITFORUM скидка 30% на заказ VPS\VDS

VPS/VDS серверы. 30 локаций на выбор

Серверы VPS/VDS с большим диском

Хорошие условия для реселлеров

4VPS.SU - VPS в 17-ти странах

2Gbit/s безлимит

Современное железо!

Новости мира IT:

Архив новостей

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 7861149
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...