пїЅпїЅпїЅпїЅпїЅпїЅ пїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ
Слишком длинный поисковый запрос.
По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
Даже если вы новичок в разработке, вы, возможно, слышали о TypeScript. Это относительно новый язык программирования, который был разработан компанией Microsoft и который завоевал сердца многих с самого момента своего выпуска в 2012 году.
Что интересно, TypeScript по сути не является самостоятельным языком программирования. На самом деле TypeScript считается расширенной версией языка программирования JavaScript.
TypeScript – это расширенная версия JavaScript
Расширенная версия языка программирования – это некое расширение, которое добавляет новые функции и расширяет возможности языка. Иными словами, любая написанная на JavaScript программа будет работать и на TypeScript.
В этой статье мы вкратце расскажем, что такое TypeScript, зачем он нужен, а также приведем некоторые ключевые отличия, за счет которых он выделяется на фоне JavaScript.
Что такое JavaScript?
JavaScript ES6 (который также известен как ECMAScript 6) – это клиентский кроссплатформенный прототип-ориентированный язык описания сценариев; создан Бренданом Эйхом.
JavaScript широко применяется в разработке клиентской части динамических интерактивных веб-приложений. JavaScript – это язык
с динамической типизацией
, то есть проверка соответствия типов происходит в процессе компиляции. Языки с динамической типизацией делают акцент на эффективности работы разработчиков, то есть для того, чтобы довести проект до ума разработчиком потребуется
меньший объем кода
.
Языки с динамической типизацией также склонны быть более гибкими, но предлагают код, который, как правило, менее оптимизирован, поскольку для того, чтобы определить, есть ли в коде какие-то ошибки, его
нужно
сначала запустить.
JavaScript запускается непосредственно в веб-браузере, поэтому для выполнения кода JavaScript не нужны никакие дополнительные ресурсы. Однако отладка череды ошибок за один раз, а не по ходу дела, все равно может стать непомерной задачей.
Примечания
: к языкам с динамической типизацией также относятся Python, PHP, Perl и Ruby.
После своего появления в 1995 году JavaScript прошел несколько стадий улучшения своей функциональности, что привело к упрощению разработки программного обеспечения. И теперь его можно использовать даже для разработки интерактивных игр!
Изначально JavaScript подразумевался как очень простой язык для встраивания в веб-страницу в виде небольших фрагментов кода. А все потому, что в то время веб-браузеры могли обрабатывать всего несколько десятков строк кода без вреда для скорости работы.
Современные же браузеры могут запускать приложения на JavaScript с
сотнями тысяч
строк кода.
JavaScript также имеет преимущество благодаря наличию большого исполненного энтузиазма сообщества, подробной документации и большого количества библиотек и фреймворков. Кроме того,
JavaScript поддерживает множество клиентских API
, которые могут позволить сократить объем кода, который должен писать разработчик программного обеспечения. Именно поэтому большая часть команд разработки выбирает именно JavaScript.
И все же изначально JavaScript не предназначался для использования в больших проектах. Поэтому, несмотря на то, что небольшие проекты можно отладить без проблем, попытка отладить большой проект на JavaScript может оказаться неудачной, а сам процесс трудоемким и длительным.
Примечание
: возможно, вы не думали о JavaScript как об объектно-ориентированном языке программирования, но на самом деле он отлично поддерживает ООП!
Что такое TypeScript?
TypeScript – это язык программирования с открытым исходным кодом, но изначально в 2010 году он выпускался как внутренний продукт Microsoft. TypeScript стал доступен для всех на GitHub в конце 2012 года.
Так как TypeScript считается строгой расширенной версией ECMAScript 2015, то любая программа на JavaScript также может быть рассмотрена как программа на TypeScript.
В отличие от JavaScript, TypeScript – это язык программирования
со статической типизацией
. Так как это
статический модуль контроля типов,
он проверяет поведение определенных переменных перед запуском вашей программы. Это будет так, даже если вы объявляете переменные без указания типа. В таких случаях TypeScript может автоматически назначить типы объявленным переменным. Такой маневр известен как
«выведение типов»
и является встроенной функцией и для других языков, например, Kotlin и Scala.
Как только TypeScript назначит тип переменной, он будет использовать его на протяжении всего кода. Такой подход может поспособствовать улучшению согласованности и может помочь устранить потенциальные ошибки еще
до
начала компиляции. Однако у всего есть своя цена. Здесь это потеря гибкости, к которой привыкли разработчики JavaScript.
Примечание
: к языкам со статической типизацией относятся Java, C и C++. Если программист использует язык со статической типизацией, он должен указать тип данных для каждой переменной, которую он объявляет.
В основе TypeScript было 11 целей разработки:
Компания Microsoft определила 11 ключевых моментов, которые поспособствовали развитию TypeScript.
Статическое определение потенциальных ошибок.
Возможность структурирования больших частей кода.
Возможность избежать увеличения времени выполнения программы.
Компиляция в чистый и распознаваемый код на JavaScript.
Создание языка, который был бы пригодным для компоновки и на котором было бы легко размышлять.
Сохранение полной совместимости с текущими и будущими версиями JavaScript.
Сохранение поведения всего кода на JavaScript во время выполнения.
Возможность избежать добавления синтаксических структур на уровне выражений.
Сделать TypeScript согласованным, и чтобы он допускал возможность стирания.
Сделать кроссплатформенный инструмент разработки.
Сделать так, чтобы изменение языка не нарушали прошлые версии TypeScript.
Преимущества TypeScript
TypeScript превосходит JavaScript в двух вещах:
TypeScript компилируется в JavaScript
: TypeScript преобразует и заменяет свой собственный код действующим кодом на JavaScript в процессе компиляции, позволяя тем самым использовать дополнительные возможности ECMAScript в более старых версиях браузеров, которые обычно их не поддерживают.
TypeScript может применять статическую типизацию
: статическая типизация выявляет потенциальные проблемы на более ранних этапах жизненного цикла разработки, за счет того, что всем объявленным переменным назначаются типы данных.
Примечание
:
полифил
– это фрагмент кода (как правило, написанный на JavaScript), который стремиться воспроизвести методы новой функции. Полифиллинг позволяет более старым версиям браузеров поддерживать новые функции, которые обычно ими не поддерживаются.
Транспайлер
конвертирует исходный код на одном языке в исходный код на другом языке. В таком случае методы, которые были написаны на TypeScript, компилируются в JavaScript для того, чтобы их можно было запустить в среде JavaScript.
Компилятор TypeScript имеет гибкую изменяемую конфигурацию. Есть большое количество способов регулирования различных аспектов, связанных с проверкой типов и компиляцией. Чем строже проверка, тем больше ошибок может найти компилятор TypeScript.
Самая распространенная ошибка в TypeScript – это ошибка, связанная с присваиванием типов. Основная цель модуля контроля типов – убедиться, что для всех значений определены корректные типы.
Дополнительные возможности
Совместимость
: TypeScript поддерживает практически все фреймворки и библиотеки JavaScript; в их числе:
React
: одностраничное приложение (SPA - single-page application), которое использует виртуальную модель DOM для того, чтобы увеличить объем памяти и улучшить производительности.
Vue
: написан на TypeScript и легко интегрируется в приложения.
Angular
: отлично подходит для быстрого прототипирования, простого тестирования и оптимизации производительности сервера.
Синтаксический сахар
: использование строго определенных типов упрощает чтение кода, так как вам не нужно гадать, к какому типу относится та или иная переменная.
Всесторонняя поддержка IDE
:
Visual Studio Code
Eclipse
Atom
WebStorm
… и другие!
Недостатки TypeScript
У TypeScript есть и недостатки. Вы можете оценить их, сопоставив с преимуществами, и решить самостоятельно, подходит он вам или нет.
Вот несколько недостатков, которые следует учесть при принятии решения:
Время компиляции
: программы, написанные на TypeScript, выполняются быстрее, чем программы, написанные на JavaScript.
Кривая обучения:
TypeScript немного сложнее, чем JavaScript; для того, чтобы научиться им пользоваться, потребуется время.
Несоответствие типов
: так как код, написанный на TypeScript, компилируется в код JavaScript, то вы можете столкнуться с нестандартными ошибками и несоответствием типов.
Меньшая гибкость
: в TypeScript переменные и параметры менее гибкие.
Сравнительная таблица: TypeScript VS JavaScript
TypeScript
JavaScript
Выпущен в 2012 году
Выпущен в 1995 году
Компилируется в JavaScript
Самостоятельный язык
Статическая типизация, со строгим контролем типов
Динамическая типизация, со слабым контролем типов
Компилируемый язык, не может быть выполнен прямо в веб-браузере
Интерпретируемый язык, может быть выполнен прямо в веб-браузере
Кривая обучения довольно крутая
Легкий для изучения
Доступно прототипирование
Доступно прототипирование
Мало документации
Подробная документация
Растущее сообщество с меньшим количеством ресурсов
Большое сообщество разработчиков и ресурсов JavaScript
Лучше всего подходит для сложных или крупных проектов
Лучше всего подходит для небольших проектов
Поддерживает все библиотеки JS
Библиотеки JS работают по умолчанию
Поддерживает модули, универсальные шаблоны и интерфейсы.
Не поддерживает модули, универсальные шаблоны и интерфейсы
Настройка сборки с пакетом npm
Не требуется настройка сборки
Числа и строки – это интерфейсы
Числа и строки – это объекты
Нужно ли мне изучить TypeScript?
Если
вы новичок в веб-разработке
и планируете работать над
небольшими проектами
, то для начала вам идеально подойдет JavaScript.
Если
вы уже знакомы с JavaScript
, то ответ на этот вопрос будет зависеть от того, импонируют ли вам определенные функции TypeScript как разработчику программного обеспечения. В зависимости от ситуации (и ваших приоритетов) иногда может оказаться так, что целесообразнее будет использовать JavaScript, а не TypeScript.
Например, один из самых существенных недостатков компилируемого языка, такого как TypeScript, заключается в
дополнительном времени, которое необходимо для выполнения кода
. Если вашим приоритетом является сокращение времени компиляции, то лучше выбрать JavaScript.
Если вы больше заботитесь о том, чтобы ваш
код был читабельным
, а не о времени его компиляции, то здесь явным преимуществом будет обладать TypeScript.
Примечание
: возьмите себе на заметку, что разработчики TypeScript обычно получают в среднем более высокую оплату, поскольку их меньше, чем разработчиков JavaScript. И тем не менее, еще одно достижение (в виде нового изученного языка) лишним не будет!
Установка
Через пакет npm
Для начала убедитесь, что у вас есть IDE, диспетчер пакетов Node.js (npm) и компилятор TypeScript. Node.js предоставляет среду, в которой ваш пакет TypeScript сможет работать.
Затем откройте командную строку или терминал, и введите следующую команду:
npm install -g typescript
Если TypeScript был установлен правильно, то вы сможете проверить номер версии с помощью команды tsc –v.
Теперь вы можете воспользоваться следующей командой и установить TypeScript в свой локальный проект в качестве зависимости.
npm install typescript --save-dev
Через Microsoft Visual Studio Code
Для начала убедитесь, что у вас установлена Visual Studio, а также приложение для веб-разработки ASP.NET.
Далее
:
Откройте новый проект в Visual Studio.
Щелкните правой кнопкой мыши на папку проекта в обозревателе решений (Solution Explorer).
Щелкните «
Manage NuGet Packages
» (Управление пакетами NuGet).
Во вкладке «
Browse
» (Обзор) найдите
Microsoft.TypeScript.MSBuild
.
Нажмите «
Install
» (Установить).
В том случае, если ваш проект не поддерживает NuGet, то вы можете установить расширение TypeScript в Visual Studio, перейдя сюда: Extensions -> Manage Extensions (Расширения -> Управление расширениями).
Подведем итоги
Отлично! Мы рассмотрели некоторые основные возможности TypeScript, а также некоторые вопросы, связанные с выбором между TypeScript и JavaScript. Надеюсь, что это краткое введение в TypeScript было для вас информативным и заставило вас задуматься о новом проекте. Кто знает, возможно вы заходите написать его именно на TypeScript.
На просторах Интернет можно найти много инструкций по настройке Asterisk с использованием графического интерфейса FreePBX. И они помогают настраивать и управлять АТС в большинстве случаев. Но гораздо больше возможностей дает настройка «чистого» Asterisk.
В статье мы сделаем базовую настройку Asterisk через конфигурационные файлы.
Предполагается, что у нас уже установлена и первоначально настроена ОС, скачены и установлены модули dahdi, libpri, iax2, необходимые голосовые файлы и кодеки и проинсталлирован Asterisk.
Если вы еще не ничего не установили, то посмотрите в нашей статье как установить Asterisk на CentOS 7
А еще вам понадобится установить sngrep для трассировки и отладки SIP-сообщений. Погнали?
Теория
Итак, приступаем к внедрению Asterisk. Структура используемых Астериском директорий следующая:
/usr/lib64/asterisk/modules – тут находятся загружаемые модули;
/var/log/asterisk – тут находятся лог-файлы, в том числе и лог звонков (если не настроено другое);
/var/spool/asterisk – тут находятся подпапки, в которых находятся бэкапы, записи разговоров, голосовая почта, факсы и так далее;
/var/lib/asterisk – тут находятся подпапки, в которых находятся звуковые файлы для музыки на удержании, звуковые файлы для выбранных языков (например для проигрывания голосовых сообщений в IVR), записанные голосовые сообщения для приветствия и так далее.
Конфигурационные файлы находятся в папке /etc/asterisk. Для работы каждого модуля Asterisk необходим конфигурационный файл. Эти файлы (с расширением .conf), содержат определения каналов, описывают различные внутренние сервисы, определяют местоположения других модулей, устанавливают связь с диалпланом. Необязательно настраивать все файлы. Требуют настройки только те, которые необходимы для вашей конфигурации.
Основные конфигурационные файлы:
asterisk.conf – определяет глобальные параметры, директории и опции для запуска Asterisk;
cdr.conf – определяет настройки для записи параметров вызовов в файл или базу данных;
sip.conf – определяет настройки для использования SIP-протокола (как общие, так и параметры для регистрации провайдеров, внутренних пользователей и так далее);
rtp.conf – определяет порты для голоса (RTP);
iax.conf – определяет настройки для использования IAX-протокола (как общие, так и параметры для регистрации провайдеров, внутренних пользователей и так далее);
extensions.conf – основной файл, в котором описывается весь диалплан, то есть правила обработки всех вызовов;
features.conf – описывает дополнительные функции (переадресации, парковка вызова, включение записи по запросу и так далее);
logger.conf – определяет тип и детальность сообщений, записываемых в файлы журналов;
modules.conf – определяет какие модули будут или наоборот не будут загружаться при запуске Asterisk;
musiconhold.conf – используется для конфигурации разных классов музыки, используемых в приложениях музыки во время ожидания, и их местоположений;
Напомним, что это только часть конфигурационных файлов. Необходимые файлы можно добавлять в любой момент по мере необходимости. Примеры и содержание таких файлов можно найти в архиве по кнопке ниже:
Скачать архив
Сразу после установки asterisk, если не была выбрана установка базовой конфигурации, в ней нет ни одного файла.
Для подключения к asterisk в режиме командной строки необходимо ввести
asterisk –rvvvvv
r – подключение к уже запущенному процессу;
vvvvv – уровень логирования, то есть вывода информации (от слова verbose - v). Чем больше v выставляем, тем более детальная информация будет выдаваться в командную строку;
Создаем и редактируем необходимые файлы
Начнем с файла asterisk.conf:
[directories](!) – указываем расположение необходимых директорий. Знаком (!) указывается признак шаблона. В шаблоне указываются общие настройки, на которые можно ссылаться дальше.
[options] – указываем необходимые опции, одна из необходимых maxcalls указывает на количество одновременных вызовов, разрешенных на Asterisk;
transmit_silence_during_record = yes - передавать тишину SLINEAR во время записи канала;
languageprefix = yes | no - Должен ли код языка быть последним или первым компонентом имени звукового файла? Если выключен, поиск звуковых файлов ведется в формате // Если включен, поиск ведется в формате //;
execincludes = yes | no - Разрешить записи #exec в конфигурационных файлах;
hideconnect = yes | no - Показывать сообщение о подключении удаленных консолей;
dontwarn = yes | no - Отключить предупреждения (warning messages);
debug = no - Отладка: No или значение (1-4);
maxcalls = 10 - Максимальное число одновременных вызовов;
Приступаем к файлу cdr.conf. Комментарии к опциям в конфиге:
[general]
enable=yes ; включаем саму возможность логирования звонков
unanswered=no ; неотвеченные звонки не логируем
safeshutdown=yes ; при выключении сервера будем ждать, пока не допишутся ВСЕ логи
[csv]
usegmtime=yes ;лог date/time в формате GMT. По умолчанию NO
loguniqueid=yes
loguserfield=yes
Закончили. Теперь файл features.conf:
[general]
[featuremap] ; тут описываем используемые функции и их параметры
blindxfer => ## ; безусловный перевод
atxfer => *2 ; условный перевод
automon => *1
disconnect => **
parkext => 700 ; парковка
parkpos => 710-780 ; диапазон портов для парковки
context => parkedcalls ; контекст для обработки запаркованных звонков
parkingtime => 180 ; время парковки
comebacktoorigin => no ; возвращать звонок на инициатора, когда закончилось время парковки вызова
parkedplay => both ; кому играть courtesytone когда вызов снимается с парковки. Опции: callee, caller, both или no(по умолчанию)
parkedcalltransfers => caller ; Кто может сделать трансфер припаркованного вызова с помощью DTMF. Опции: callee, caller, both или no(по умолчанию)
parkedcallrepark => caller ; Кто может перепарковать, припаркованный вызов с помощью DTMF. Опции: callee, caller, both или no(по умолчанию)
parkedcallhangup => no ; Кто может закончить, припаркованный вызов с помощью DTMF Опции: callee, caller, both или no(по умолчанию)
parkedcallrecording => no ; Кто может инициировать запись, с помощью DTMF. Опции: callee, caller, both или no(по умолчанию)..
parkedmusicclass => default ; Класс музыки ожидания для припаркованного,
adsipark => no ; Передавать или нет ADSI инфо о припаркованном вызове тому кто припарковал
findslot => first
pickupexten => *8 ; перехват звонка
[applicationmap] ; тут описываем используемые приложения
sendsms => *99,peer/both,Macro,sendsms
pitch => *00,self/both,Macro,pitch
Теперь конфигурируем RTP в файле rtp.conf
[general]
rtpstart=36600
rtpend=39999
Музыка на ожидании в здании. Открываем файл musiconhold.conf
[default]
mode=files
directory=/var/lib/asterisk/moh/
Следом открываем файл logger.conf:
[general]
[logfiles]
console => notice,warning,error,dtmf,verbose(5) ; уровень детализации сообщений, выводимых в консоль
full => debug,notice,warning,error,verbose(9),dtmf,fax,security ; уровень детализации сообщений, выводимых в лог-файл
Для удобства работы рекомендуется ограничивать уровень детализации сообщений, выводимых в консоль, но для вывода в файл выставить максимальный уровень детализации.
И напоследок - файл modules.conf. Есть 2 варианта: либо читаем все модули и указываем те, которые не надо читать:
[modules]
autoload=yes
noload => codec_g723-ast110-gcc4-glibc-x86_64-core2-sse4.so
Либо указываем конкретные модули, которые необходимо прочитать и запрещаем чтение всех. В этом случае для удобства лучше поделить модули на секции. Ниже приведена часть такого варианта:
[modules]
autoload = no
; Applications
load = app_bridgewait.so
load = app_dial.so
load = app_playback.so
; Bridging
load = bridge_builtin_features.so
load = bridge_builtin_interval_features.so
load = bridge_holding.so
; Call Detail Records
load = cdr_custom.so
; Channel Drivers
load = chan_bridge_media.so
load = chan_sip.so
; Codecs
load = codec_gsm.so
load = codec_ulaw.so
load = codec_alaw.so
load = codec_g722.so
; Formats
load = format_gsm.so
load = format_pcm.so
load = format_wav_gsm.so
load = format_wav.so
; Functions
load = func_callerid.so
load = func_cdr.so
load = func_pjsip_endpoint.so
; Core/PBX
load = pbx_config.so
; Resources
load = res_musiconhold.so
load = res_pjproject.so
load = res_pjsip_acl.so
В данной статье мы используем первый вариант. На этом с настройкой основных файлов закончим. В дальнейшем по мере необходимости в них можно вносить изменения. Все последующие настройки мы будем вносить в файлы sip.conf и extensions.conf. Погнали к созданию и регистрации внутренних абонентов.
Создание и регистрация внутренних абонентов
В sip.conf указываем сначала общие параметры SIP для Asterisk:
[general]
bindaddr=0.0.0.0 ; указываем IP-адрес и порт, на котором будет приниматься bindport=5060 ; SIP-трафик
language=ru ; используемый язык для голосовых сообщений
alwaysauthreject=yes
allowguest=no ; запрещаем принимать «гостевые» звонки, то есть вызовы от незарегистрированных пользователей
Так же в этой секции можно указать поддерживается ли видео, время регистрации, перечислить локальные сети, указываем внешний IP-адрес в случае использования NAT и так далее.
В случае, когда у нас есть разные группы абонентов (например, есть несколько отделов, подразделений либо другие какие-то признаки группировки абонентов или абонентов большое количество), рекомендуется использовать шаблоны, в которые можно выносить обобщенные настройки.
Имя шаблона берется в скобки [ ] и следом указывается (!). В шаблоне можно указать контекст для этих абонентов, используемые кодеки, разрешенные/запрещенные сети для регистрации этих абонентов, использование NAT и так далее. Пример шаблона приведен ниже:
[office](!)
type=friend
deny=0.0.0.0/0.0.0.0
permit=192.168.10.0/255.255.255.0
host=dynamic
context=from-internal
nat=no
qualify=yes
directmedia=no
disallow=all
allow=alaw
allow=ulaw
dtmfmode=info
И таких шаблонов можно может быть несколько. Теперь для создания записи для регистрации абонентов нам достаточно указать только отличительные параметры, такие как внутренний номер, имя абонента, пароль для регистрации и так далее.
[НОМЕР](ШАБЛОН)
callerid=ИМЯ
secret=ПАРОЛЬ
callgroup=5 ; номер группы вызова
pickupgroup=1,2,3,4,5 ; номера групп перехвата вызовов
Пример настройки:
В результате, по команде sip show peers мы видим зарегистрированных пользователей
Абоненты зарегистрировались, но позвонить даже между собой они пока не могут. Для того, чтобы они могли совершать и принимать звонки необходимо настроить маршрутизацию (или диалплан). Делать это мы будем в файле extensions.conf, там тоже есть своя структура. И тут мы снова немного погружаемся в теорию:
Диалплан состоит из следующих основных элементов:
контексты;
добавочные номера;
приоритеты;
приложения;
Контекст – часть (раздел) диалплана, описывающая алгоритм обработки вызова и изолированная от остального диалплана. Содержит дополнительные номера (extension). Дополнительные номера, определенные в одном контексте, полностью изолированы от добавочных номеров в другом контексте, если это не разрешено специально. Так же с помощью контекстов можно ограничивать доступ к различным функциям (например к междугородним или международным звонкам). Имя контекста заключается в квадратные скобки []. Рекомендуется создавать разные контексты для внутренних абонентов и для транков.
В начале диалплана находятся два специальных контекста, [general] и [globals]
[general] – содержит список общих настроек диалплана;
[globals] – содержит глобальные переменные;
Эти два контекста являются специальными. Контекст является одним из обязательных параметров как для абонента, так и для транка.
Asterisk определяет контекст для обработки по тому принципу откуда пришел вызов, а не куда он пришел, то есть если пришел вызов на мобильный номер от абонента, то применяться будет тот контекст, который прописан у конкретного абонента, а не указанный в транке.
Добавочные номера – это широкое понятие, которое определяет уникальные последовательности шагов (каждый шаг включает приложение), которые Asterisk будет применять к вызову по этой линии. В каждом контексте может быть задано столько добавочных номеров, сколько требуется. При вызове конкретного добавочного номера (входящим или внутренним звонком) Asterisk будет выполнять шаги, определенные для этого добавочного номера. Поэтому именно добавочные номера определяют, что происходит со звонками при их обработке соответственно диалплану.
Полный добавочный номер состоит из трех компонентов:
Имени (или номера). В качестве имени может быть использованы любые комбинации цифр и букв;
Приоритета (каждый добавочный номер может включать множество шагов; порядковый номер шага называется его приоритетом);
Приложения (или команды), которое выполняет некоторое действие над вызовом;
Эти три компонента разделяются запятыми:
exten => имя,приоритет,приложение()
Есть ещё зарезервированные добавочные номера:
s - когда в контекст поступают вызовы, для которых не указан конкретный добавочный номер, они передаются на добавочный номер s. (s - сокращение от start (начало), поскольку именно здесь начнется обработка вызова, если не передана информация о добавочном номере.;
i - когда абонент нажимает не ту кнопку (не существующий добавочный номер), вызов направляется на добавочный номер i;
t - если абонент слишком долго не нажимает кнопку после запуска приложения WaitExten(), вызовы направляются на добавочный номер t (время ожидания по умолчанию - 10 с);
h - экстеншен обрабатываемый при завершении вызова. После того как медиаканал закрылся;
Иногда можно встретить использование same вместо exten. Это применяют в основном с автоматическим выставлением приоритета, то есть same => n и означает «тоже самое, продолжение предыдущего»
Приоритеты – последовательность выполнения приложений. Каждый приоритет пронумерован последовательно, начиная с 1, и выполняет одно определенное приложение. В Asterisk есть еще приоритет n, что означает «следующий». Каждый раз, когда Asterisk встречает приоритет n, она берет номер предыдущего приоритета и добавляет 1. Это упрощает внесение изменений в диалплан, поскольку теперь не надо изменять номера всех шагов.
Приложения – выполняет определенное действие в конкретном дополнительном номере (например воспроизведение звука, прием тонального ввода, вызов канала, разрыв соединения и так далее).
Для выполнения некоторых приложений, таких как Answer() и Hangup(), не требуется никаких дополнительных инструкций. Некоторым приложениям необходима дополнительная информация. Эти данные, называемые аргументами, могут передаваться в приложения, чтобы оказывать влияние на то, как они выполняют свои действия. Чтобы передать аргументы в приложение их указывают через запятую в круглых скобках, следующих за именем приложения.
Для внесения комментариев в файл extensions.conf используют ; - вы уже могли об этом догадаться, судя по нашим комментариям прямо в конфигах :)
Таким образом можно как делать пометки для себя, так и делать невыполнимыми строки конфигурации (например, во время отладки)
Теперь давайте вернемся к нашим созданным абонентам. Создадим контекст, который указан у абонентов (context=from-internal)
В нем мы прописали что при наборе номера (ИМЯ), с приоритетом 1 выполнить приложение Dial c параметрами ПРОТОКОЛ/НОМЕР. Когда номеров немного, то можно конечно и так описывать. Но более правильно и красиво сделать тоже самое, но с использованием «маски»:
То есть при наборе любого номера из диапазона 10хх (шаблон показан нижним подчеркиванием) выполнить вызов с приоритетом 1 через приложение Dial с параметрами ПРОТОКОЛ/НАБРАННЫЙ_НОМЕР, время вызова 60 секунд и можно использовать перевод звонка (transfer).
Шаблон номера - это уникальный набор цифр, который определяет использование этого номера. Если набранный номер соответствует этому шаблону, то последующие номера не рассматриваются. Формат заполнения шаблона:
X - совпадение любой цифры от 0 - 9;
Z - любая цифра от 1 до 9;
N - совпадение любой цифры от 2 - 9;
[1237-9] - соответствует любым цифрам или буквам и скобках (в этом примере,1,2,3,7,8,9);
Перечитываем диалплан в консоли Asterisk командой dialplan reload и видим выполнение вызова.
Таким образом мы можем придумать и реализовать практически любой диалплан.
Например для запрета вызовов на международную связь достаточно прописать 3 строчки:
То есть при наборе 810 будет проиграно сообщение destination-closed (если оно было загружено в Asterisk) и будет отправлен сигнал отбоя.
Создание и регистрация транков
Ну, начнем с того, что IP-транки, используемые в Asterisk, бывают 2-х видов – SIP и IAX.
SIP-транки в основном используются для подключения провайдеров, а IAX-транки для подключения других Asterisk. Транки могут быть с регистрацией (то есть когда провайдер выдает логин, пароль и адрес или домен для регистрации у него) и без регистрации (то есть когда подключение идет по IP-адресу без логина и пароля).
В случае с регистрацией в файле sip.conf необходимо сразу после секции [general] указать строку регистрации в формате:
register => ЛОГИН:ПАРОЛЬ@SIP-ПРОВАЙДЕР/НОМЕР
Тут:
SIP-ПРОВАЙДЕР - указывается или IP-адрес провайдера или его домен;
ЛОГИН:ПАРОЛЬ - выдаются провайдером для подключения;
НОМЕР - указывается городской номер, выданный провайдером для совершения звонков;
Рассмотрим создание SIP-транка с регистрацией. Опять же если у нас несколько (до 3-5) таких транков, то можно их описать каждый отдельно. А если из больше или в дальнейшем планируется увеличить их количество, то можно использовать шаблон для подключения к оператору.
[voip-provider](!) ; имя шаблона
type=peer ; тип подключения
context=from-trunk ; используемый контекст для обработки вызовов
disallow=all ; выключаем все кодеки
allow=alaw ; указываем используемые кодеки
allow=ulaw
insecure=invite,port ; не запрашивать авторизацию на входящие звонки
qualify=yes ; проверка доступности
directmedia=no ; запрещаем установление прямых соединений для передач голоса
dtmfmode=rfc2833 ; указываем используемый тип DTMF
дальше достаточно описать конкретные настройки для конкретного оператора и указать какой шаблон использовать
[ОПЕРАТОР-1](voip-provider)
defaultuser=ЛОГИН-1
fromuser=ЛОГИН-1
secret=ПАРОЛЬ-1
host=ДОМЕН1- ИЛИ IP-АДРЕС ДЛЯ ПОДКЛЮЧЕНИЯ
fromdomain= ДОМЕН-1 ИЛИ IP-АДРЕС ДЛЯ ПОДКЛЮЧЕНИЯ
[ОПЕРАТОР-2](voip-provider)
defaultuser=ЛОГИН-2
fromuser=ЛОГИН-2
secret=ПАРОЛЬ-2
host=ДОМЕН-2 ИЛИ IP-АДРЕС ДЛЯ ПОДКЛЮЧЕНИЯ
fromdomain= ДОМЕН ИЛИ IP-АДРЕС ДЛЯ ПОДКЛЮЧЕНИЯ
Дальше указываем строки для регистрации у данных операторов:
register => ЛОГИН-1:ПАРОЛЬ-1@ДОМЕН-1/НОМЕР-1
register => ЛОГИН-2:ПАРОЛЬ-2@ДОМЕН-2/НОМЕР-2
Перечитываем файл sip.conf и проверяем регистрации:
В случае подключения транка без регистрации можно использовать тот же шаблон, а в настройках транка указать изменяемые параметры
[AST10SIP](voip-provider)
type=friend ; для транка без регистрации указываем friend (то есть мы доверяем этому подключению)
port=5060 ; указываем порт для подключения
insecure=port,invite
host=IP-АДРЕС_ПРОВАЙДЕРА
context=from-trunk-sip-AST10SIP ; если обработки вызовов через этот транк используется другой контекст, то указываем его тут.
Перечитываем файл sip.conf и проверяем регистрации:
Теперь рассмотрим создание IAX-транка. Для настройки IAX-транков используется файл iax.conf, который содержит всю информацию, необходимую Asterisk для создания и управления каналами, работающими по протоколу IAX. Структура его примерно такая же, как и у sip.conf:
[general] ; указываем глобальные параметры для протокола IAX
bindaddr=0.0.0.0
bindport=4569 ; по-умолчанию IAX-протокол использует порт 4569 можно оставить его, а можно и переопределить
language=ru
; указываем строки для регистрации транков
register => msk-spb:SuperPASS@10.10.10.10
[msk-spb]
username = msk-spb ; логин для регистрации на удаленной стороне
type = friend
trunk = yes
secret = SuperPASS ; пароль для регистрации
qualify = yes
host = 10.10.10.10 ; IP-адрес удаленной стороны
disallow= all
context = from-iax ; контекст для обработки вызовов, поступающих через этот транк
allow = alaw
allow = ulaw
Сохраняем файл iax.conf, перечитываем и проверяем регистрацию командой iax2 show peers:
Если есть абоненты, работающие по протоколу IAX, то их регистрацию описываем тоже в этом же файле аналогично SIP-регистрации.
Итак, сейчас мы имеем зарегистрированных абонентов, которые могут звонить друг другу, и зарегистрированные транки. Внутренних абонентов мы можем группировать по отделам:
exten => 500,1,Playback(it-otdel) ; проигрывается сообщение it-otdel
exten => 500,1,Dial(SIP/1001,5),Tt ; 5 секунд вызов идет на номер 1001
exten => 500,n,Dial(SIP/1002&SIP/1003) ; потом вызов идет одновременно на 1002 и 1003
Можем настраивать различные функции, запускать различные команды (в том числе и для выполнения через ОС), настраивать запись и прослушивание разговоров и так далее:
; ответить, подождать 2 секунды и положить трубку
exten => 060,1,Answer()
same => n,Wait(2)
same => n,Hangup()
; ответить, проиграть сообщение hello-world и положить трубку
exten => 061,1,Answer()
same => n,Playback(hello-world)
same => n,Hangup()
; записать сообщение в файл somefile.gsm и потом его проиграть
exten => 067,1,Record(/tmp/somefile.gsm,3,30)
same => n,Playback(/tmp/somefile)
Для совершения звонков через созданные и зарегистрированные транки SIP и IAX:
Допустим через транк IAX у нас подключен другой Asterisk с внутренней нумерацией, начинающейся с 1, 2, 3. И для вызова этих абонентов мы будем использовать префикс (код выхода на маршрут) 2. Тогда строки настройки будут следующие:
exten => _2[1-3].,1,Dial(IAX2/msk-spb/${EXTEN:1},30,r)
exten => _2.,2,Hangup()
То есть при наборе, начинающемся с 21-23, будет осуществлен вызов через транк msk-spb по протоколу IAX набранного номера, предварительно «отрезав» 1 (первую) набранную цифру. Если в течение 30 секунд не будет получен ответ, то вызов будет прекращен.
Для выхода в город мы используем транк с оператором-1 и префикс выхода будем использовать 9
exten => _9849[589]XXXXXXX,1,Dial(SIP/ОПЕРАТОР-1/${EXTEN:1}) ;то есть при наборе, начинающемся с 9, будет осуществлен вызов через транк ОПЕРАТОР-1 по протоколу SIP набранного номера, предварительно «отрезав» 1 (первую) набранную цифру
Тут важно понимать, что все, что мы реализовываем для внутренних абонентов, должно быть описано в соответствующем контексте.
Теперь перейдем к транкам и входящим звонкам. Соответственно для того, чтобы принимать входящие вызовы, необходимо прописать маршрутизацию уже в контексте транка (context=from-trunk или context = from-iax)
Для возможности через транк осуществлять вызов нашего внутреннего абонента (например через транк со встречной АТС) необходимо в контекст транка вставить
exten => _10XX,1,Dial(SIP/${EXTEN},60,tTm)
Давайте рассмотрим реализацию обработки входящего вызова от оператора (вызов на городской номер) через создание меню IVR и реализуем ещё определение рабочего и нерабочего времени. Схема обработки входящего вызова следующая:
Рабочее время у нас определено с 9:00 до 19:00 и с понедельника по пятницу.
При поступлении звонка в нерабочее время после сообщения с приветствием (01-hello) проигрывается сообщение с указанием рабочего времени (07-working-hours).
При поступлении звонка в рабочее время (проверка осуществляется в строке GoToIfTime(09:00-19:00,mon-fri)) после приветствия осуществляется переход в другой контекст ([working-time]), где предлагается выбрать необходимый пункт меню (0 – вызов секретаря, 1 – вызов на группу тех. поддержки, 2 – переход в другое меню выбора (GoTo(ivr-2,s,1)), в котором по такому же принципу осуществляется выбор.
В каждом меню реализован донабор внутренних номеров (exten => _1xхx,1,NoOp), обработка неправильного набора номера (exten => i,1,NoOp), обработка в случае, что если ничего не выбрали (exten => t,1,NoOp), вызов переводится на секретаря.
Естественно необходимо загрузить все используемые голосовые файлы в /var/lib/asterisk/sound/ru в случае использования русского языка. Тут давайте немного по-подробнее.
Как мы уже указывали выше в системе мы определили какой основной язык у нас будет использоваться для голосовых файлов (в файле sip.conf параметр language = ru). Это значит, что Asterisk будет искать имена файлов, которые мы указываем, например, в меню ivr в папке /var/lib/asterisk/sound/ru (смотрим обозначения директорий при запуске asterisk в начале статьи). Если бы мы использовали в качестве основного языка английский, то папка была бы /var/lib/asterisk/sound/en. В каждой из этих папок находятся голосовые файлы выбранных языков и в выбранных форматах, указанных при компилировании asterisk.
Если мы хотим записать свои сообщения (персональные приветствия, необходимые объявления, произносимые в создаваемых меню ivr и так далее), нам необходимо положить эти файлы в папку с соответствующим языком. Сами файлы при этом можно записать любой звукозаписывающей программой (хоть программой Звукозапись, входящей в стандартный дистрибутив любой версии Windows) и сохранить в формате wav (несжатый голос, 8кГц, 16 Бит, Моно)
Тут главное не перепутать имена файлов, находящихся в папке с голосовыми сообщениями, с именами, указанными в ivr меню. при этом в ivr меню имена указываются без расширения. Сам листинг приведен ниже.
[from-trunk]
exten => _X.,1,NoOp(Проверка времени: Если попали в диапазон - переходим в контекст working-time, если нет - продолжаем выполнение)
same => n,Answer()
same => n,Playback(01-hello)
same => n,GoToIfTime(09:00-19:00,mon-fri,*,*?working-time,s,1)
same => n,Playback(07-working-hours)
same => n,Hangup()
[working-time]
exten => s,1,Answer()
same => n,Background(01-ivr1)
same => n,StartMusicOnHold()
same => n,WaitExten(5)
;
exten => 0,1,NoOp(Если нажали "0" - звоним секретарю)
same => n,Playbacr(ostavaites-na-linii)
same => n,Dial(SIP/1005,30,mtT)
same => n,Hangup()
;
exten => 1,1,NoOp(Если нажали "1" - звоним на группу вызова: 1001+1002)
same => n,Playback(it-otdel)
same => n,Dial(SIP/1001&SIP/1002,30,mtT)
same => n,Hangup()
;
exten => 2,1,NoOp(Если нажали "2" - перенаправляем на ivr-2)
same => n,GoTo(ivr-2,s,1)
;
exten => _1xхx,1,NoOp(Прямой набор внутренних номеров)
same => n,Playback(ostavaites-na-linii)
same => n,Dial(SIP/${EXTEN}15,mtT)
same => n,Hangup()
;
exten => i,1,NoOp(Обработка ошибочного набора:i=illegal)
same => n,Playback(oshibka)
same => n,Dial(SIP/1005,30,r)
;
exten => t,1,NoOp(В случае, если не дождались нажатия)
same => n,Playback(ostavaites-na-linii)
same => n,Dial(SIP/1005,30,m)
;
[ivr-2]
exten => s,1,Background(02-ivr2)
same => n,StartMusicOnHold()
same => n,WaitExten(5)
;
exten => 1,1,NoOp(Если нажали "1" - звоним на 1001)
same => n,Dial(SIP/1001,30,mtT)
same => n,Hangup()
;
exten => 2,1,NoOp(Если нажали "2" - звоним на 1002)
same => n,Dial(SIP/1002,30,mtT)
same => n,Hangup()
;
exten => _1xхx,1,NoOp(Прямой набор внутренних номеров)
same => n,Dial(SIP/${EXTEN}15,mtT)
same => n,Hangup()
;
exten => i,1,NoOp(Обработка ошибочного набора:i=illegal)
same => n,Playback(oshibka)
same => n,Dial(SIP/1005,30,r)
;
После сохранения файла extensions.conf перечитываем диалплан в консоли (dialplan reload) и проверяем. На этом закончим с примерами.
Конфигурируя Asterisk через конфигурационные файлы, мы получаем возможность реализовать практически любую логику работы, проводить интеграции со сторонними сервисами, запускать и выполнять скрипты на уровне ОС и так далее.
Linux – это операционная система с открытым исходным кодом, которая благодаря своим гибким возможностям, стабильности и безопасности широко используется в различных приложениях. Одна из основных функций Linux – это управление пользователями. Эта функция позволяет администраторам контролировать доступ к ресурсам и обеспечивать, таким образом, безопасность системы.
Наш мир технологий довольно быстро развивается, и эффективное управление пользователями является критически важным аспектом для обеспечения безопасной и хорошо организованной среды Linux. Эта статья выполняет функцию руководства по управлению пользователями в Linux. Основное внимание здесь уделяется потребностям CTechCo – некой гипотетической технологической компании.
Понимая различные аспекты управления пользователями, в том числе создание, изменение и удаление учетных записей пользователей, реализацию процесса аутентификации пользователей, а также придерживаясь лучших методов управления пользователями, CTechCo может обеспечить безопасность и эффективность своих систем Linux.
Кто такие пользователи в Linux?
В системе Linux пользователи – это физические лица или организации, которые взаимодействуют с операционной системой путем входа в систему и выполнения каких-то задач. Управление пользователями играет главную роль в обеспечении контроля доступа, распределения ресурсов и системного администрирования.
К пользователю в Linux привязывается учетная запись, которая содержит несколько свойств, определяющих его личность и привилегии в рамках системы. Под этими свойствами подразумевается имя пользователя, UID (User ID – идентификатор пользователя), GID (Group ID – идентификатор группы), yfxfkmysq каталог, оболочка по умолчанию и пароль.
Этими свойствами, перечисленными выше, обладают все учетные записи пользователей.
Типы пользователей в Linux
Linux поддерживает два типа пользователей: системные и обычные.
Системные пользователи
создаются системой в процессе установки и используются для запуска служб системы и приложений.
Обычные пользователи
создаются администратором и могут получать доступ к системе и ее ресурсам, исходя из своих прав доступа.
Давайте познакомимся с персоналом CTechCo. Это люди, которые взаимодействуют с системой Linux через учетные записи пользователей. Познакомьтесь с Джоном – разработчиком, Лизой – системным администратором, и Сарой – маркетологом. У всех из них есть свои уникальные имена пользователей, а именно «johndoe», «lisasmith» и «sarasmith» соответственно. Эти имена пользователей выступают в роли их идентификаторов в системе Linux.
Как создать пользователя
Системный администратор CTechCo Алекс должен создать учетные записи пользователей для Джона, Лизы и Сары. Для начала Алекс должен воспользоваться командой
useradd
, то есть, например, чтобы создать учетную запись Джона, Алексу необходимо выполнить следующую команду:
useradd -u 1002 -d /home/john -s /bin/bash john
Эта команда создаст учетную запись Джона с UID (
-u
) равным 1002, начальным каталогом (
-d
)
/home/john
, и в качестве оболочки по умолчанию она установит (
-s
)
/bin/bash
.
По аналогии, используя тот же формат, Алекс создаст учетную запись для Лизы и Сары.
Для того, чтобы проверить новую учетную запись, Алекс может запустить команду
id
:
id john
В результате на экране отобразиться идентификатор пользователя и принадлежность пользователя «john» к группам.
UID, GID и информация о группах пользователя John
Свойства учетных записей пользователей
В среде Linux компании CTechCo учетные записи пользователей обладают различными свойствами, которые определяют их характеристики и права доступа. Давайте посмотрим на эти свойства на примере нашего сценария.
Имя пользователя
: каждому пользователю присваивается уникальное имя пользователя, которое выступает в роли его идентификатора в системе Linux. Например, имя пользователя для Джона – john.
UID (идентификатор пользователя) и GID (идентификатор группы)
: каждой учетной записи пользователя ставится в соответствие UID и GID. UID – это числовое значение, которое присваивается пользователю, а GID обозначает основную группу, к которой принадлежит пользователь. Например, UID Джона может быть равен 1002, и GID его основной группы также может быть равен 1002.
Начальный каталог
: у каждого пользователя есть специально предназначенный начальный каталог, в котором хранятся его личные файлы и настройки. Начальный каталог Джона -
/home/john
.
Оболочка по умолчанию
: оболочка по умолчанию определяет командный процессор, который будет использоваться, когда пользователь будет заходить в систему. Она определяет интерактивную среду пользователя. В данном случае оболочка по умолчанию для Джона – это
/bin/bash
. Эта оболочка является самой популярной в Linux.
Пароль
: для аутентификации и доступа к системе каждой учетной записи пользователя требуется пароль. Пользователи CTechCo, в том числе и Джон, обязаны создавать надежные пароли, чтобы обеспечить безопасность системы.
Группа
: принадлежность к той или иной группе определяет то, к каким системным ресурсам пользователь может получить доступ, а также то, какие пользователи могут получить доступ к файлам пользователя.
Алекс может просмотреть список пользователей Linux, запустив следующую команду:
cat /etc/passwd
. Список будет отображаться вот в таком формате:
john:x:1002:1002:,,,:/home/john:/bin/bash
Ниже приведено описание того, что обозначает каждое из полей:
john
: это имя пользователя учетной записи.
x
: это поле содержит зашифрованный пароль пользователя. Он заменяется символом «x», что говорит о том, что в целях безопасности пароль хранится в файле
/etc/shadow
.
1002
: это UID (идентификатор пользователя) учетной записи пользователя. Это уникальный числовой идентификатор, который был присвоен системой пользователю.
1002
: это GID (идентификатор группы) учетной записи пользователя. Этот идентификатор указывает на принадлежность пользователя к основной группе.
,,,
: это поле GECOS, что расшифровывается как «General Electric Comprehensive Operating System». Это поле используется для хранения дополнительной информации о пользователе, например, его полного имени или контактной информации. В данном случае поле пустое, так как при создании учетной записи не было предоставлено никакой дополнительной информации.
/home/john
: это начальный каталог учетной записи пользователя. В нем хранятся файлы и личные данные пользователя.
/bin/bash
: это оболочка по умолчанию для учетной записи пользователя. Иными словами, это командный процессор, который используется для обработки команд, вводимых пользователем через терминал. В данном случае оболочкой по умолчанию является Bash – самая популярная оболочка в Linux.
Как удалить пользователя
Давайте представим, что Лиза покинула компанию CTechCo. Для того, чтобы удалить ее учетную запись и все связанные с ней файлы, Алексу потребуется запустить команду
userdel
. То есть, чтобы удалить учетную запись Лизы, ему нужно запустить вот такую команду:
sudo userdel lisa
В результате учетная запись Лизы будет удалена, а вместе с ней и ее начальный каталог, а также все файлы и каталоги, принадлежащие ей.
Как изменить учетную запись пользователя
По мере того, как штат сотрудников компании CTechCo будет расти, IT-специалистам может потребоваться внести некоторые коррективы в учетные записи пользователей. Давайте посмотрим, как они могут изменять учетные записи пользователей с учетом меняющихся потребностей и прав доступа.
Например, компания возложила на Джона (разработчика) дополнительные обязанности. Для того, чтобы отобразить эти изменения, IT-специалисты могут изменить учетную запись Джона, воспользовавшись командой
usermod
. Давайте рассмотрим следующую ситуацию:
Как изменить группы пользователя в Linux
CTechCo создает новую группу
development
для управлением доступом к ресурсам, необходимым для разработки. Чтобы добавить в эту группу Джона, можно воспользоваться следующей командой:
sudo usermod -aG development john
Эта команда добавит Джона в команду
development
, предоставив ему все необходимые права доступа.
Как изменить оболочку по умолчанию в Linux
Если Джон хочет использовать другую оболочку (отличную от оболочки по умолчанию), IT-специалисты могут изменить его учетную запись соответствующим образом. Например, чтобы изменить оболочку по умолчанию для Джона на
/bin/zsh
, можно выполнить вот эту команду:
sudo usermod -s /bin/zsh john
Эта команда обновит информацию об учетной записи Джона. Теперь его оболочка по умолчанию – это
/bin/zsh
.
Вы можете снова запустить команду
cat /etc/passwd
, чтобы убедиться, что оболочка по умолчанию была изменена с
/bin/bash
на
/bin/zsh
.
Управление группами
Эффективное управление группами – это ключевой момент для обеспечения контроля доступа к ресурсам в среде Linux компании CTechCo. Давайте посмотрим, как IT-специалисты могут создавать группы и управлять ими, чтобы обеспечить достойный уровень контроля доступа.
Как создать новую группу в Linux
Для того, чтобы создать новую группу, например, группу
marketing
, вам потребуется следующая команда:
sudo groupadd marketing
Эта команда создаст группу
marketing
, которую дальше можно использовать для того, чтобы предоставлять пользователям определенные полномочия и права доступа к ресурсам, относящимся к маркетингу.
Чтобы просмотреть группу, которую вы только что добавили, запустите следующую команду:
cat /etc/group
В результате вы получите список всех групп, которые есть на вашем компьютере с ОС Linux. Прокрутив список вниз, вы найдете самые последние группы.
Помимо этого, вы можете использовать эту команду для того, чтобы просмотреть какую-то конкретную группу (в данном случае группу
marketing
):
cat /etc/group | grep marketing
Как определить пользователей в группы в Linux
После того, как вы создадите группу, в нее можно добавить пользователей. Например, с помощью следующей команды вы можете добавить в группу
marketing
Сару (маркетолога):
sudo usermod -aG marketing sarahsmith
Эта команда добавит Сару в группу и разрешит ей доступ к ресурсам, относящимся к этой группе.
Управление паролями
Надежные методы управления паролями – важный аспект обеспечения безопасности учетных записей пользователей в среде Linux компании CTechCo. Давайте посмотрим, как IT-специалисты могут обеспечить соблюдение политик паролей и эффективно управлять паролями пользователей.
Установка политик паролей: IT-специалисты имеют право устанавливать специальные политики для того, чтобы обеспечить наличие надежных паролей. Сюда относятся требования к сложности паролей, их срокам действия и блокировке учетных записей. Все эти политики можно установить в файле
/etc/login.defs
.
Изменение паролей пользователей: настоятельно рекомендуется сделать так, чтобы пользователи периодически меняли свои пароли. Они могут делать это с помощью команды
passwd
. Например, Джон может изменить свой пароль с помощью следующей команды:
sudo passwd john
Эта команда предлагает Джону ввести свой текущий пароль, а затем установить новый безопасный пароль.
Аутентификация пользователей
Аутентификация пользователей – важнейший аспект управления пользователями в Linux. Он гарантирует, что только авторизованные пользователи смогут получить доступ к системе. Для защиты своей среды Linux компания CTechCo может реализовывать самые разные механизмы аутентификации.
Аутентификация на основе пароля
Аутентификация на основе пароля – это самый популярный метод аутентификации пользователей в Linux. Когда пользователи входят в систему, для того, чтобы подтвердить свою личность, они предоставляют свое имя пользователя и соответствующий пароль.
Например, Джон, пытаясь войти в систему, вводит свое имя пользователя и пароль. После чего система сверяет предоставленный пароль с хранящимся в системе хэшем пароля, связанного с ученой записи Джона.
Аутентификация на основе SSH-ключа
Аутентификация на основе ключа Secure Shell (SSH) – это более безопасная альтернатива аутентификации на основе пароля. Пользователи создают открытый и закрытый ключ. Закрытый ключ надежно храниться на устройстве пользователя, а открытый – на сервере.
За счет такого способа аутентификации, такие пользователи, как Лиза (системный администратор), могут проходить аутентификацию, не предоставляя пароль. Вместо этого сервер проверяет личность пользователя по наличию закрытого ключа.
Для того, чтобы настроить аутентификацию на основе SSH-ключа для Лизы, необходимо выполнить следующее:
Сгенерировать пару SSH-ключей на компьютере Лизы с помощью команды
ssh-keygen
.
Скопировать открытый ключ в файл
/home/lisasmith/.ssh/authorized_keys
, расположенный на сервере.
Настроить сервер таким образом, чтобы он поддерживал аутентификацию на основе SSH-ключей.
Лучшие методики управления пользователями в Linux
Для того, чтобы обеспечить безопасность и эффективность управления пользователями в Linux, компания CTechCo может придерживаться нескольких методик. Они минимизируют риски для безопасности, а также оптимизируют процесс управления в целом.
Принцип минимальных привилегий
Принцип минимальных привилегий – основная концепция управления пользователями. Смысл заключается в том, что пользователям следует предоставлять только минимальные привилегии, необходимые для эффективного выполнения своих задач.
CTechCo может воспользоваться таким принципом и ограничить, таким образом, доступ пользователей и ослабить последствия потенциальных нарушений безопасности. Например, Джону предоставляются права администратора (с помощью команды
sudo
) только тогда, когда это необходимо для того, чтобы выполнить какие-то определенные задачи. То есть запустив следующую команду, Джон сможет выполнять команды, требующие полномочий более высокого уровня:
sudo command
Полномочия пользователя
IT-специалисты компании CTechCo могут назначать пользователям и группам соответствующие полномочия с целью контролировать доступ к файлам, каталогам и ресурсам. Для того, чтобы установить полномочия для файлов и каталогов, они могут воспользоваться командой
chmod
. Например, они могут установить полномочия на чтение, запись или полномочия на выполнение для владельца, группы и т.д.
В частности, чтобы предоставить полномочия на чтение и запись владельцу и разрешение только на чтение группе и другим пользователям, можно воспользоваться вот этой командой:
chmod 640 filename
Чтобы просмотреть полномочия для файла, вы можете выполнить команду
ls -l
. В результате вы увидите список привилегий для файла в следующем формате:
-rw-r--r-- 1 username username 0 Apr 5 11:24 filename.txt
Первые три символа обозначают полномочия владельца файла.
Вторые три символа обозначают полномочия для членов группы файла.
Последние три символа обозначают полномочия для всех остальных пользователей.
В данном случае владелец файла имеет право на
чтение
и
запись
, а вот члены группы и все остальные пользователи – только на чтение.
Мониторинг и аудит
CTechCo может реализовать специальные механизмы для мониторинга и аудита, чтобы отслеживать действия пользователей и выявлять, таким образом, потенциальные нарушения безопасности. Для этого можно использовать специальные инструменты, например, auditd. С его помощью можно собирать данные из системных журналов, анализировать их и обнаруживать, таким образом, подозрительную активность и предпринимать соответствующие меры.
Например, IT-специалисты могут настроить auditd для мониторинга критически важных файлов и каталогов системы, а также входов пользователей и команд администрирования в систему.
Кроме того, Алекс может использовать команду
tail
, чтобы просматривать системные журналы в Linux. Например, чтобы просмотреть последние 10 срок файла системного журнала, вы можете выполнить следующую команду:
sudo tail /var/log/syslog
Обучение пользователей
CTechCo понимает, насколько важно обучение пользователей для обеспечения безопасной среды Linux. Компания может проводить регулярные занятия, чтобы обучить пользователей поддержанию безопасности паролей, передовым методам обработки данных и ознакомить их с психологическими атаками.
Кроме того, она может мотивировать пользователей сразу же сообщать о любой подозрительной активности или нарушениях системы безопасности, способствуя, таким образом, формированию культуры осведомлённости и ответственности в области обеспечения безопасности.
Придерживаясь всех этих методик, CTechCo может обеспечить грамотно построенный процесс управления пользователями и минимизировать риски для безопасности в своей среде Linux.
Заключение
Управление пользователями в среде Linux просто необходимо для обеспечения безопасности и организованности системы. На примере CTechCo мы проанализировали различные аспекты управления пользователями и аутентификации:
Общую идея того, кто такие пользователи в Linux, их типы и роли в системе.
Свойства учетной записи пользователя (имена пользователей, UID, GID, корневые каталоги, оболочки по умолчанию и пароли).
Задачи управления пользователями, в том числе создание, удаление и изменение учетных записей пользователей с помощью таких команд, как
useradd
,
userdel
и
usermod
.
Управление группами с помощью команд
groupadd
и
usermod
.
Механизмы аутентификации пользователей, в том числе аутентификацию на основе пароля и аутентификацию на основе SSH-ключа.
Лучшие методики управления пользователями, например, соблюдение принципа минимальных полномочий.
Использование команды
sudo
для получения полномочий более высокого уровня.
Настройку полномочий пользователя и контроля доступа с помощью команды
chmod
.
Мониторинг и аудит действий пользователей с помощью специальных инструментов, например,
auditd
.
Программы обучения и повышения уровня осведомленности пользователей, которые способствуют обеспечению безопасности паролей и использованию передовых методов обработки данных.
Мы начали с объяснения того, кто такие пользователи в Linux, а также рассказали про их роли и значение для системы. Мы рассмотрели различные типы пользователей (обычные и системные), а также соответствующие свойства их учетных записей (имена пользователей, UID, GID, корневые каталоги, оболочки по умолчанию и пароли).
Перейдя к управлению пользователями, мы рассмотрели процесс создания, удаления и изменения их учетных записей. Мы увидели, как можно использовать команды
useradd
,
userdel
и
usermod
для выполнения этих операций. Плюс к этому, мы узнали, что такое управление группами, и как их можно создавать (с помощью команды
groupadd
), и как можно определять пользователей в эти группы (с помощью команды
usermod
).
Помимо этого, мы рассмотрели механизмы аутентификации пользователей. Мы изучили аутентификацию на основе пароля, то есть когда пользователи для проверки предоставляют свое имя пользователя и пароль. Вдобавок мы изучили более безопасный вариант – аутентификация на основе SHH-ключа, в которой используется пара ключей - открытый и закрытый.
Мы продемонстрировали некоторые лучшие методики, которыми могла бы пользоваться компания CTechCo. Например, принцип минимальных полномочий, при котором пользователям предоставляются только привилегии, необходимые для выполнения их задач. Однако при необходимости они могут использовать команду
sudo
, чтобы получить полномочия более высокого уровня. Настройка полномочий пользователя с помощью команды
chmod
подходит для контроля доступа к файлам и каталогам. А механизмы мониторинга и аудита, например,
auditd
, используются для отслеживания действий пользователей и выявления потенциальных нарушений безопасности. Кроме того, могут проводиться специальные ознакомительные программы обучения для того, чтобы донести до пользователей информацию о важности обеспечения безопасности паролей, использования передовых методов обработки данных и психологических атаках.
Применяя все эти рекомендации, IT-специалисты CTechCo могут обеспечить безопасность процесса управления пользователями, минимизировать риски для безопасности и поддерживать организованность среды Linux на высшем уровне.
Как и всегда, я надеюсь, что вам понравилась статья, и вы смогли узнать для себя что-то новое.
