Как из просто хорошей разработки сделать безопасную?

RunAs из коробки

В системе есть родная утилита runas, позволяющая выполнять задачу запуска от другого имени, однако пользоваться ей нужно осторожно и в целях безопасности её нельзя применять для запуска программ с повышенными привилегиями, но можно наоборот — администратору запускать программы с правами обычного пользователя, хотя технически возможны оба варианта. Почему так? Параметр /savecred позволяет сохранить пароль для пользователя, от имени которого запускается программа, в профиле пользователя, который запускает программу

Однако этот же сохранённый пароль RunAs использует и для запуска любых других программ, запуск которых может инициировать пользователь, у которого сохранён пароль.

Рассмотрим это на примере: у нас есть Admin с правами администратора, User1 с необходимостью запуска программы от имени администратора, и все остальные пользователи, которые эту программу запускать не должны, назовём их условно User2, а тестовая программа — калькулятор (calc). Когда администратор хочет запустить программу от имени пользователя для проверки или из планировщика, он может сохранить пароль User1 в своём профиле, выполнив команду «runas /savecred /user:User1 calc», ввести пароль User1 и в дальнейшем для этой команды пароль запрашиваться не будет, но также он не будет запрашиваться и для других программ, помимо калькулятора. При этом User2, который выполнит у себя эту же команду, столкнётся с необходимостью ввода пароля для User1, поскольку в его профиле этот пароль заранее не сохранён. Такой сценарий допустим и безопасен, ведь администратор и так имеет полные права. Однако если мы выполним команду «runas /savecred /user:Admin calc» от имени User1 и введём пароль администратора, User1 сможет запускать любые программы от имени администратора, что полностью разрушает модель безопасности.

Вывод — использовать родной runas в составе системы для повышения прав на постоянной основе (с сохранением пароля) категорически нельзя, эта уязвимость должна быть очевидна каждому сисадмину

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

Перезапуск через панель управления

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

Остановка и повторный запуск служб Windows:

  1. Открыть любым способом окно Службы, найти нужную.
  2. Нажать по нужной службе правой кнопкой мыши и выбрать Перезапустить.
  3. Если кнопка Перезапустить неактивна — нажать Свойства.
  4. Нажать Остановить, дождаться остановки службы.
  5. Нажать на кнопку Запустить.

Если служба зависла или не остановилась — открыть диспетчер задач (Ctrl Alt Del) и завершить все процессы, связанные с проблемной службой.

Проксирование

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

Чаще всего такие проблемы люди решают с помощью утилит вроде cpau.exe. Они создают файл с зашифрованным паролем административной учетной записи, позволяющий запускать определённую программу. Проблема, однако, в том, что хоть пароль и зашифрован, перед запуском программы утилите придётся его расшифровать. А соответственно пользователь может использовать утилиту повторяющую алгоритм расшифровки пароля, и узнать его, чтобы затем использовать для запуска других программ или получения дополнительных привилегий. Практически это конечно достаточно сложно для обычных пользователей, не обладающих специальными знаниями, но, тем не менее, вполне возможно. Еще раз уточню, это не беда конкретной утилиты, а проблема такого подхода вообще.

Еще может показаться, что для решения задачи подойдет параметр /savecred утилиты runas. Но тут есть даже две проблемы. Во-первых, как и вышеописанном случае, пароль сохраняется на компьютере пользователя, а, следовательно, может быть расшифрован, хотя в случае с runas для этого и понадобятся права локального администратора. Во-вторых, runas сохраняет учетные данные, не связывая их с конкретной командой, а, следовательно, пользователь сможет запустить с завышенными правами не только ту команду, доступ к которой вы хотели ему предоставить, но и любую другую.

Чтобы избежать этих проблем, но, тем не менее, разрешить выполнение конкретной команды, можно использовать методику, которая называется «проксированием».

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

Для организации этой системы мы поместим на сервере, например в папке c:\scripts\ командные файлы Server.cmd и Action.cmd .

Листинг №5 – Action.cmd (Windows Batch)

Server.cmd будет ждать знака от пользователя, и получив его, запускать файл с командами – Action.cmd. Разумеется, в эту папку пользователи не должны иметь никакого доступа. Автоматический запуск Server.cmd при запуске компьютера можно организовать, просто создав соответствующую задачу в планировщике:

После параметра /ru указывается учетная запись, под которой будет выполняться сценарий (в нашем случае она обладает правами администратора на сервере), так как после параметра /rp пароль не указан – он будет запрошен при создании задачи. Параметр /sc позволяет указать момент запуска сценария, в нашем случае – при включении компьютера. Ну а /tn и /tr позволяют указать имя задачи, и исполняемый файл.

Теперь, для того чтобы пользователь мог подать сценарию сигнал, мы создадим папку c:\commandShare и сделаем её доступной по сети. Доступ на запись в эту папку должен быть только у тех пользователей, которые будут запускать команду.

После этого достаточно будет поместить пользователю на рабочий стол файл Run.cmd.

Листинг №6 – Run.cmd (Windows Batch)

При его выполнении, от имени пользователя, будет создаваться файл \\server\commandShare\trigger.txt. Сценарий Server.cmd, заметив его, запустит на выполнение со своими привилегиями файл Action.cmd. Он добавит запись в файл c:\scripts\log.txt о текущем времени, а затем удалит trigger.txt .Чтобы не выполнять команду снова до следующего сигнала пользователя.

В сценарии Server.cmd используется утилита Sleep.exe, позволяющая сделать паузу в выполнении сценария на заданный в секундах промежуток времени. Она не входит в состав операционной системы, но её можно взять из набора Resource Kit Tools (см. ссылки) и просто скопировать на любой компьютер.

Всё пропало?

Какие меры нужно принять, если на вашем сервере использовался такой способ запуска программ для пользователей? В первую очередь нужно поменять пароли администраторов и провести аудит системы, не было ли взлома с использованием этой уязвимости. Если у вас был запрещён запуск всех посторонних программ, это слегка снижает градус проблемы, но только слегка — нужно убедиться, что пользователям не были доступны для записи те папки, из которых им был разрешён запуск программ, а добраться до них можно разными способами: кроме проводника, где доступ к ФС можно ограничить твиками, как минимум в систему встроены командная строка и PowerShell, запретить их запуск ограниченным пользователям тоже нужно было заранее. Имея же учётные данные администратора на руках, пользователь уже не ограничен ничем и все данные на таком сервере следует считать скомпрометированными. Помните, что безопасность сервера это комплексная мера, и она достигается суммой правильно настроенных параметров, многие из которых здесь не упомянуты.

Распространенные сообщения об ошибках в Cpau.dll

Частичный список ошибок cpau.dll Third-Party Application:

  • «Cpau.dll не найден.»
  • «Отсутствует файл Cpau.dll.»
  • «Cpau.dll нарушение прав доступа.»
  • «Не удается зарегистрировать cpau.dll. «
  • «Файл %PROGRAMFILES%\Hotspot Shield\bin\cpau.dll не найден.»
  • «Не удается загрузить Third-Party Application — отсутствует требуемый файл cpau.dll. Установите Third-Party Application еще раз. «
  • «Ошибка Third-Party Application: cpau.dll не найден. Переустановите Third-Party Application. «

Ошибки DLL cpau.dll возникают во время установки Third-Party Application, при запуске программ, связанных с cpau.dll (Third-Party Application), во время запуска или завершения работы или во время установки ОС Windows. Документирование случаев проблем cpau.dll в Third-Party Application является ключевым для определения причины проблем с электронной и сообщения о них Windows Software Developer.

Включение или отключение службы установщика Windows

Ниже приведены способы решения этой задачи.

  1. Через сервисную консоль
  2. Через командную строку
  3. Через редактор реестра

Посмотрим описание каждого из методов.

1]Включение или отключение службы установщика Windows через консоль служб.

Сделайте следующее:

  • Нажмите Клавиша Windows + R для вызова диалогового окна «Выполнить».
  • В диалоговом окне «Выполнить» введите и нажмите Enter, чтобы открыть Сервисы.
  • В окне «Службы» прокрутите и найдите Установщик Windows служба.
  • Дважды щелкните запись, чтобы открыть окно ее свойств.
  • В окне свойств на Общий вкладку, щелкните раскрывающийся список на Тип запуска и выберите Автоматический.
  • Затем перейдите к Статус услуги раздел.
  • Щелкните значок Начинать кнопку, чтобы включить услугу.
  • Чтобы отключить эту конкретную службу, щелкните значок Останавливаться кнопка.
  • Нажмите Подать заявление > Ok сохранить изменения.

Теперь вы можете выйти из консоли служб.

2]Включение или отключение службы установщика Windows через командную строку.

  • Вызов диалогового окна «Выполнить».
  • В диалоговом окне «Выполнить» введите а затем нажмите CTRL + SHIFT + ВВОД , чтобы открыть командную строку в режиме администратора / с повышенными правами.
  • В окне командной строки введите команду ниже и нажмите Enter, чтобы включить службу установщика Windows.

Примечание: Вы не можете запустить службу, если Тип запуска на Неполноценный.

Чтобы изменить тип запуска той же службы, вы можете выполнить следующую команду:

За Автоматический:

За Руководство:

За Неполноценный:

За Автоматический (отложенный старт):

Чтобы отключить службу, введите команду ниже и нажмите Enter.

net stop MSIServer

Теперь вы можете выйти из командной строки CMD.

3]Включение или отключение службы установщика Windows через редактор реестра.

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

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesMSIServer
  • В том месте на правой панели дважды щелкните значок Начинать запись для редактирования ее свойств.
  • В диалоговом окне свойств установите следующие значения параметра Value в соответствии с вашими требованиями:
    • Автоматический: 2
    • Руководство: 3
    • Неполноценный: 4
    • Автоматический (отложенный старт): 2
  • Щелкните ОК, чтобы сохранить изменения.

Теперь вы можете выйти из редактора реестра.

Вот и все!

WSH Remote Scripting

Да, как ни странно у Windows Script Host тоже есть возможность запуска сценариев на других компьютерах. Правда эта функция не получила большой популярности, и скорее всего из-за того что требует слишком много подготовительных мероприятий, а взамен предоставляет совсем немного возможностей. Но я все равно расскажу об этом методе, так как и он может пригодиться.

Итак, для запуска сценария на другом компьютере с помощью WSH нам понадобится сделать следующее:

  1. Права администратора на удалённом компьютере. Это само собой разумеется, и требуется почти для всех остальных методов запуска перечисленных в этой статье.
  2. Разрешить WSH Remote Scripting создав в системном реестре строковой параметр Remote равный «1» в ключе реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Script Host\Settings
  3. Из за ошибки описанной в статье базы знаний Microsoft с номером 311269, на системах с Windows XP может понадобиться выполнить команду wscript –regserver
  4. Если на компьютерах используется брандмауэр, то в нём необходимо разрешить обращения к DCOM. Причем сделать это надо не только на управляемом компьютере, но и на том с которого вы хотите запускать сценарий.
  5. В системах Windows XP с пакетом обновлений 2 и выше, необходимо изменить параметры безопасности DCOM. Это можно сделать с помощью групповой политики. В узле Computer Configuration \ Windows Settings \ Security Settings \ Local Policies \ Security Options следует установить разрешения следующим образом:
    1. DCOM: Machine Access Restrictions in Security Descriptor Definition Language (SDDL) syntax Выдать группам Anonymous Logon и Everyone разрешения Allow Local и Allow Remote Access
    2. DCOM: Machine Launch Restrictions in Security Descriptor Definition Language (SDDL) syntax Выдать группе Administrators разрешения Allow Local Launch, Allow Remote Launch, Allow Local Activation, Allow Remote Activation Группе Everyone – Allow Local Launch, Allow Local Activation

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

Пример сценария, который использует эту технологию:

Windows PowerShell 2.0 Remoting

Хотя вторая версия Windows PowerShell на момент написания статьи находится еще в состоянии бета тестирования, о её возможностях в области удалённого выполнения команд определённо стоит рассказать уже сейчас. Попробовать его своими руками вы можете либо загрузив предварительную версию (см. ссылки) либо в составе бета-версии Windows 7 или Windows Server 2008 R2.

Инфраструктура PowerShell Remoting основана на WinRM версии 2.0. И поэтому наследует все преимущества этой технологии, такие как шифрование передаваемых данных, и возможность работать по стандартным портам HTTP/HTTPS. Но благодаря богатым возможностям языка Windows PowerShell. И его способностям работы с объектами, мы получаем еще большие возможности. На данный момент пакет WinRM2.0 тоже находится в состоянии бета-тестирования, и доступен для загрузки только для систем Windows Vista и Windows 2008. В системы Windows 7 и Windows Server 2008R2 он будет встроен изначально, как и PowerShell 2.0.

Примечание:

Перед тем как воспользоваться всеми этими преимуществами, PowerShell Remoting необходимо активизировать, на управляющем, и управляемых компьютерах. Сделать это просто, запустив командлет (команду Windows PowerShell) Enable-PSRemoting. Причем если добавить ключ -Force то никаких подтверждений запрошено не будет. Этот командлет при необходимости вызовет winrs quickconfig, и создаст исключения в брандмауэре Windows, так что никаких дополнительных действий выполнять не нужно.

После этого вы сможете легко выполнять команды на других компьютерах используя командлет Invoke-Command (или его псевдоним icm):

Разумеется команду можно заранее поместить в переменную, а для параметра -ComputerName указать имена не одного, а сразу нескольких компьютеров. Следующая последовательность позволяет вывести версию файла Explorer.exe сразу с трех компьютеров.


Выполнить команду на удалённом компьютере

Как видно на, можно передавать сразу несколько команд в одном блоке, помещать их результаты выполнения на нескольких компьютерах в переменную, а затем обрабатывать на рабочей станции используя возможности Windows PowerShell по работе с объектами.

Впрочем возможности PowerShell Remoting на этом только начинаются. С помощью командлета Enter-PSSession вы можете войти в интерактивную сессию Windows PowerShell на удалённом компьютере. Выйти из такого сеанса можно использовав командлет Exit-PSSession, или просто exit.

Командлет New-PSSession создает сессии на удалённых компьютерах, указатели на которые можно поместить в переменную, а затем передавая её как аргумент для Invoke-Command выполнять команды сразу на нескольких компьютерах, в постоянном окружении. Пример вы можете увидеть на скриншоте, где я выполняю последовательность команд сразу на нескольких компьютерах из списка c:\computers.txt.


Выполнить команду на удалённом компьютере

Системные функции Windows и администрирование

Встроенные утилиты позволяют настраивать систему, а также работать с параметрами и средствами ОС Windows. Программы имеют расширение EXE, но в диалоговом окне их прописывать необязательно. Рассмотрим самые распространенные команды, и для чего они нужны.

  • explorer – запуск Проводника. В системе, которая работает исправно, открыть Проводник можно с помощью меню «Пуск». Но если возник черный экран, и курсор пропал, то команда сможет снова открыть панель задач, отображения рабочего стола и другие штатные элементы системы.
  • msconfig – конфигурации системы. Утилита полезна в тех случаях, когда необходимо активировать безопасный режим загрузки системы, изменить настройки загрузки, открыть встроенные утилиты для диагностики, убрать неиспользуемые ОС из меню загрузки.
  • regedit – редактор реестра, позволяющего настроить поведение системы путем изменения сведения в системном реестре.
  • msinfo32 – просмотр сведений о системе: объем оперативной памяти, число ядер центрального процессора, версию операционной системы и информацию о других компонентах материнской платы.

cleanmgr – еще одна полезная команда, которая позволит очистить диск от временных файлов, неиспользуемых ярлык и прочего «мусора» с ПК. Утилита «Очистка диска» анализирует жесткие диски на наличие ненужных компонентов и отображает список лишнего. Удалить все можно с помощью одной кнопки.

  • sdclt – команда запускает параметры, через которые создаются резервные копии и точки восстановления Windows 10.
  • mmc – открытие утилиты «Консоль управления», через которую осуществляется работа с программами для анализа состояния ПК, а также различных компонентов системы. Предназначена преимущественно для системных администраторов и функционирует не только с оснастками от компании Microsoft, но и от сторонних разработчиков.
  • mrt – системное средство, предназначенное для базовой защиты операционной системы Windows от вредоносного программного обеспечения, которое может быть на ПК.

Следует кратко перечислить другие полезные команды, которые пригодятся для настройки системы в различных ситуациях:

  • control admintools – администрирование;
  • services.msc – службы Windows 10;
  • diskmgmt.msc – управление жесткими дисками;
  • netplwiz – управление учетными записями пользователей;
  • taskmgr – диспетчер задач;
  • devmgmt.msc – диспетчер устройств;
  • taskschd.msc – планировщик заданий;
  • firewall.cpl – брандмауэр Защитника Windows;
  • logoff – выход из системы;
  • dfrgui – дефрагментация диска;
  • fonts – папка со шрифтами;
  • wusa – обновления системы.

Даже для перезагрузки и завершения работы системы предусмотрены специальные команды, позволяющие закрыть все работающие процессы корректно и не потерять данные при возникновении сбоя в работе. Для перезагрузки Windows 10 необходимо ввести команду shutdown/r, а для завершения работы – shutdown/s.

Как работает ЦПБ?

Для всего каталога услуг предусмотрен стандартный набор шагов:

1. Определяем нормативные требования регуляторов, актуальные для конкретного бизнеса;

2. Проводим аудит информационной безопасности;

3. Проектируем защищенный контур сети организации с учетом всех требований ИБ;

4. Помогаем с поставкой и внедрением необходимого оборудования;

5. Разрабатываем ОРД в области информационной безопасности;

6. Проводим аттестацию по требованиям безопасности информации.

Отдельным «длинным» шагом являются услуги поддержки, которые предоставляются по набирающей популярности модели MSSP (или «безопасность как сервис»). Суть поддержки заключается в переаттестации объектов в случае их изменения/модернизации и/или изменения требований регуляторов, что также включает в себя актуализацию всей нормативной документации по ИБ предприятия.

WinRM (WS-Management)

WinRM – это реализация открытого стандарта DMTF (Distributed Management Task Force) от Microsoft, которая позволяет управлять системами с помощью веб-служб. Углубляться в устройство технологии я не буду, а лишь кратко опишу, что необходимо для её использования.

Версия WinRM 1 и выше входит в состав операционных систем, начиная с Windows Vista и Windows Server 2008. Для Windows XP и Windows Server 2003 можно установить WinRM в виде отдельного пакета (см. ссылки).

Для того чтобы быстро настроить компьютер для подключений к нему используя стандартные порты и разрешив подключения административным учетным записям, достаточно выполнить команду:

Чтобы winrm не спрашивал подтверждения, можно добавить к вызову ключ -quiet. Узнать информацию о более тонкой настройке можно посмотреть встроенную справку winrm:

Если на управляемом компьютере работает веб-сервер, WinRM никак ему не помешает, хоть и использует по умолчанию стандартные порты HTTP. Он будет перехватывать лишь подключения предназначенные специально для него.

Все способы открыть командную строку — зачем так много?

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

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

Открываем окно командной строки из меню Win + X

Наверное, это самый простой способ открыть командную строку на Windows 10 — нажмите на клавиатуре сочетание «Win + X» и в появившемся меню выберите нужный пункт.

Удобство данного способа в том, что вы можете выбрать сразу несколько режимов работы командной строки — это:

  1. Командная строка — обычная, с ограниченными правами;
  2. Командная строка (администратор) — с неограниченными правами (будьте осторожны)

В этой менюшке вообще много интересного и я рекомендую с ней подробно ознакомиться, иной раз очень выручает и экономит время.

Открываем окно командной строки из Диспетчера задач

Откройте «Диспетчер задач» и перейдите в подробный режим (Кликнув подробнее). Нажмите «Файл» в левом верхнем углу, а затем перейдите в «Запустить новую задачу». Введите CMD или cmd.exe и нажмите кнопку OK — тем самым вы откроете командную строку. Кроме того, можно отметить галочкой пункт, который запустит командную строку с правами Администратора.

Командная строка в режиме администратора с помощью Диспетчера Задач — секретный способ

Тут почти все как и в предыдущем пункте, чтобы запустить командную строку от имени администратора — просто удерживайте клавишу CTRL зажатой на клавиатуре при щелчке Файл > Создать новую задачу, тем самым вы откроете командную строку с правами админа (никаких команд вводить не нужно)

Открытие командной строки из результатов поиска

Вы можете запросто открыть окно командной строки просто введя «CMD» в поле поиска (Клавиши Win + S на клавиатуре). Возможно когда в Россию завезут Кортану, мы сможем компьютеру скомандовать голосом, но пока обойдемся и без этого…

Чтобы запустить терминал этим способом с правами администратора, то введите CMD в поле поиска и кликните правой кнопкой мыши и выберите пункт «Запустить от имени администратора». Как вариант чтобы вообще не трогать мышь, с помощью стрелок выберите командную строку и нажмите CTRL + SHIFT + ENTER, чтобы открыть окно командной строки в режиме администратора.

Запуск командной строки из всех приложений в меню Пуск

Откройте меню Пуск, кликнув по изображению Windows в левом нижнем углу. Перейдите во все приложения и найдите там «Служебные — Windows», а затем кликните по «Командная строка»

Открываем командную строку из Проводника

Командную строку можно открыть и через проводник Windows — просто перейдите по адресу C:WindowsSystem32 и найдите там файл cmd.exe. Вы можете либо кликнуть два раза, либо же нажав правую кнопку мыши выбрать «Запуск от имени администратора» — тут все зависит от вас и то, с какими правами требуется запустить терминал.

Командная строка из меню «Выполнить»

Нажмите кнопки «Win + R» на клавиатуре чтобы открыть диалоговое окно «Выполнить». Наберите команду CMD и нажмите кнопку OK (или Enter на клавиатуре).

Откройте командную строку из адресной строки Проводника

Откройте Проводник Windows и ткните в адресную строку (или нажмите сочетание клавиш ALT + D на клавиатуре). Просто введите CMD в адресной строке и тем самым вы запустите командную строчку с указанием пути текущей папки (где вы были на момент вызова терминала)

Командная строка из меню «Файл» в Проводнике

Откройте стандартный Проводник Windows, перейдите в папку или диск, который будет выбран в качестве стартового в командной строке. Кликните «Файл» на ленте и выберите «Открыть командную строку». Тут у вас два варианта запуска:

  1. Открыть командную строку — открывает командную строку в выбранной нами папке со стандартными разрешениями;
  2. Открыть командную строку как администратор — открывает окно командной строки в выбранной нами папке с правами администратора.

Открыть окно команд в Проводнике Windows

Чтобы открыть окно командной строки в любой нужной вам папке или диске, то просто перейдите туда через стандартный проводник. Щелкните правой кнопкой мыши на папке или в любом пустом месте в правой части проводника Windows удерживая зажатой клавишу SHIFT на клавиатуре, и из контекстного меню выберите «Открыть окно команд». Терминал запустится с указанием пути до папки, в которой мы находились.

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
Работатека
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: