А также игры с BAT-файлами.
В Windows 7 (кроме домашней версии), а также и в более ранних (Vista, XP, 2000) версиях присутствуют т.н. стандартные (или скрытые) общие (расшаренные, сетевые) ресурсы, «админские шары». Туда входят локальные диски (имена, например C$, D$, E$
), обнаруженные во время установки, «удаленный Admin» (ADMIN$
) — каталог операционной системы (например C:\Windows
), и специальный ресурс «удаленный IPC» (IPC$
). Все эти ресурсы доступны из локальной сети. При обычном просмотре компьютера в локальной сети, например, через «Сетевое окружение» или в проводнике их не видно, но пользователь, обладающий правами администратора, вполне может получить к ним доступ. В Windows XP или 2000 с этим была большая беда и неприятность, особенно в XP, и особенно, если она была установлена с настройками по умолчанию, а безопасности не было уделено должного внимания. Доступ к этим скрытым ресурсам мог получить любой пользователь в локальной сети, знающий логин администратора, если пароль администратора не был установлен. Часто пароль на основную админскую запись — «Администратор
» банально забывали установить, даже если создавали отдельного пользователя с админскими правами и паролем.
В Windows 7 с этим вроде бы стало получше: Если на ПК, к которому мы пытаемся подключиться, установлена Windows 7 со включенным контролем учетных записей, подключиться к общим ресурсам можно только используя встроенную учетную запись «администратор». Данная учетка должна быть разблокирована и иметь пароль. Подключение под любым другим пользователем, даже обладающем правами локального админа, не пройдет. [1]
Просмотр расшаренных ресурсов.
Первый вариант. Идем в Пуск —> Все программы —> Администрирование —>Управление компьютером (или нажимаем Win+R и вводим команду compmgmt.msc /s
) и выбираем в появившемся окне в левой колонке Общие папки, а потом Общие ресурсы. Должно отобразиться что-то типа этого:
Другой вариант, ввести в консоли команду net share
.
Должно получиться что-то типа такого (понятно, что у вас буквы дисков будут другие):
Общее имя Ресурс Заметки
-------------------------------------------------------------------------------
ADMIN$ C:\Windows Удаленный Admin
C$ C:\ Стандартный общий ресурс
D$ D:\ Стандартный общий ресурс
F$ F:\ Стандартный общий ресурс
IPC$ Удаленный IPC
L$ L:\ Стандартный общий ресурс
N$ N:\ Стандартный общий ресурс
Команда выполнена успешно.
Специальный ресурс IPC$
Вот что об этом ресурсе говорит официальная справка:
Общий ресурс IPC$ также известен, как подключение пустых сеансов. С помощью этих сеансов Windows позволяет анонимным пользователям выполнять определенные операции, например получать имена учетных записей домена и список общих сетевых ресурсов.
Общий ресурс IPC$ создается службой Windows Server. Этот особый общий ресурс существует для обеспечения последующих именованных каналов подключения к серверу. Именованные каналы сервера создаются для компонентов, встроенных в операционную систему и приложений или служб, которые установлены в системе. При создании именованного канала процессу задается уровень безопасности, связанный с каналом и затем это гарантирует, что доступ предоставлен только для указанных пользователей или групп. [2] [3]
Проще говоря, если IPC$
удалить, то другой компьютер не сможет посмотреть, есть ли на вашем компьютере расшаренные ресурсы. Так же могут отвалиться некоторые системные сервисы. На практике, у меня отвалился доступ только к 1С «Склад» (7.7), который и был мне не особо нужен, давно хотел откосить от забивания и проверки накладных и от материальной ответственности :). Но не стоит так делать на «сервере» 7.7, где в самом простом случае никакого сервера нет, а просто базы лежат в расшаренной папке — скорее всего, отвалится все к penis canis. 🙂
Внимание! Если просто удалить эти ресурсы через Управление компьютером, то при следующей перезагрузке ресурсы восстанут, и придется опять выливать воду из чайника.
Отключение доступа к стандартным ресурсам через Реестр
На мой взгляд, в XP и ниже это делать надо обязательно, в семерке можно обойтись, но если вы параноик, или, как меня, вас достала какая-нибудь комиссия (да, ФСТЭК и РКН, вдругорядь, не penis canis), то это опять же надо делать.
Необходимо в ключе Реестра
HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
добавить следующие значения:
AutoShareServer
и AutoShareWks
типа REG_DWORD
со значением 0
(Windows XP/2000 Proffessional/2000 Server). Вообще где-то надо один, где-то второй, но если добавить оба — ничего страшного случиться не должно. Для семерки тоже должно работать. [4] [5] [6]
После добавления делаем перезагрузку.
Минусы:
— не отключить доступ к IPC$
— вырубается доступ ко всем скрытым шарам, а иногда такую корову полезно иметь самому, для некоторых дисков, и без установки стороннего ПО.
Плюсы:
+ Вырубается быстро и самое основное.
Отключение доступа через BAT/CMD файл
С одной стороны все довольно просто — можно насовать в файл однотипных команд типа
net share c$ /delete
, но так, согласитесь, некрасиво, особенно, если этих самых админских шар десяток, компов сотня, а еще что-то надо кое-где оставить себе любимому. Но на то нам и командные файлы, чтоб сделать «все как ты захочешь».
Покажу на примере самого простого случая — надо удалить все шары, вместе с не удаляемой через Реестр
IPC$
. Пример простой, но развивая можно улучшить и углУбить под вашу задачу.
Конечно, язык командных файлов Windows жутко беден, по сравнению с огромными возможностями shell Linux, ИМХО, даже с помощью простенькой sh и BisyBox можно сделать то же самое, и даже гораздо больше, намного удобнее. Но это была секунда ворчания — оседлали корову, придется ехать на ней.
Получение и перебор всех значений
Для перебора всех значений (строк) из определенного списка, в BAT/CMD существует оператор (по правилам MS правильнее говорить «внутренняя команда») FOR
, которая на самом деле ведет себя как foreach
в «больших» языках программирования, т.е. перебирает список/массив данных, пока тот не лопнет кончится.
Общий синтаксис:
FOR %переменная IN (набор) DO команда [параметры]
[7]
Чтобы вся магия у нас получилась, перед использованием FOR выполним такую команду:
Setlocal EnableDelayedExpansion
Обычно, в командных файлах команда FOR используется не только для разбора данных, но и их обработки, что требует использования переменных внутри цикла FOR. И здесь возникает проблема — изменения значений переменных не происходит, т.е. их применение внутри скобок невозможно. Подобное явление вызвано не логическими предпосылками, а всего лишь определенными особенностями реализации командного процессора CMD.EXE [7]
Использование Setlocal EnableDelayedExpansion
позволяет использование переменных внутри цикла FOR
, правда, не совсем. Но об этом далее.
Теперь разберемся откуда брать список. FOR
может обрабатывать вывод заданной команды, если использовать его таким образом:
FOR /F %переменная IN (набор) DO (
command1 [parameters]
command2
. . .
)
и вместо набор
вставить 'команда'
, где:
'команда'
— любая команда Windows, выводящая на консоль некую информацию (не забудьте одинарные кавычки).
/F
— указание команде FOR
обрабатывать список значений, файлов или вывод команды.
В параметрах команды FOR
можно задать разделитель полей. Для этого нужно указать в качестве параметра следующую конструкцию:
delims=xxx
— набор разделителей между обрабатываемыми элементами строк. По умолчанию, в качестве разделителей используются пробелы и знаки табуляции. [7]
Если разделитель не задать, то FOR
дойдет до первого пробела или табуляции, все остальное выкинет, и перейдет к следующей строке. Т.е. в нашем случае получим:
for /F %%i In ('net share') do (
echo !ITEM!
)
и вывод:
Общее
-------------------------------------------------------------------------------
ADMIN$
C$
D$
F$
IPC$
L$
N$
Команда
Внезапно, почти то, что нам надо!
А надо нам отключить админские шары, а они выделяются на общем фоне — у них внутри неонка в конце имени $
. Надо теперь отделить зерна от плевел.
Ищем подстроку в строке
Итак:
1. создадим переменную при помощи SET
, и присвоим ей исходный текст set V1=mother
(имена переменных учитывают регистр, имена команд нет).
2. Сделаем следующее:
set V2=%V1:her=%
где her
— подстрока, которую надо найти. Если в переменной V1
будет подстрока her
, то в переменной V2
окажется подстрока moth
(т.е. содержимое переменной V2
без указанной подстроки).
Чтобы проверить, содержит ли строка из переменной V1
подстроку, заданную в пункте 2, надо сравнить результирующие строки. Если они НЕ равны — строка V1
содержит подстроку her
.
if NOT %V1%==%V2%
Внезапное НО. Или то, о чем упоминал ранее.
Оказывается, IF
внутри FOR
не работает, точнее не принимает переменных, не в виде % ITEM%
, не в виде %%ITEM%%
, не в виде !ITEM!
. Как только я не перепробовал (может дурак все-таки я, кто знает — поправьте). Но пока не поправили, пришлось ухищряться.
Подпрограммы
В BAT-файле можно создавать подпрограммы, кривые, косые, но подпрограммы.
Вызываются они так call :метка параметр1 параметр2 ...
После окончания основного файла делается так. Ставится метка подпрограммы, далее идут команды, в конце ставим еще одну метку, например :eof
.
В конце основной программы ставим goto :eof
Параметры, переданные этой недоподпрограмме, внутри видятся точно также, как и внешние параметры BAT-файла, т.е. %1
, %2
. Только в подпрограмме.
После выполнения подпрограммы начинает выполняться следующая команда после call
, у нас это новая итерация цикла.
А в подпрограмме мы как раз и производим сравнение, и если нашли символ $ — запускаем команду удаления ресурса:
:check
set V1=%1
set V2=%V1:$=%
if NOT %V1%==%V2% (
echo %V1%
net share %V1% /delete
)
:eof
BAT-файл полностью
@echo off
Setlocal EnableDelayedExpansion
for /F %%i In ('net share') do (
set ITEM=%%i
call :check !ITEM!
)
goto :eof
:check
set V1=%1
set V2=%V1:$=%
if NOT %V1%==%V2% (
echo %V1%
net share %V1% /delete
)
:eof
Можно скопировать код с PasteBin [10] или Mega.nz [11]
Автозагрузка BAT-скрипта
С автозагрузкой получается странная штука, на форумах подобный батник советуют просто кинуть в автозапуск и забыть. Может на XP/2000 так и сработает, но на Windows 7 тут кардинальное отличие.
1. Такой батник надо запускать от администратора (пользователя из группы «Администраторы
«)
2. Будет заебно заставлять главбуха каждую загрузку подтверждать UAC
3. Сразу дерево почему-то не жужжит, скорее всего, потому что сетевой подсистеме требуется время на запуск, который происходит после входа пользователя в систему. А до этого команда net
не работает.
Но тут на помощь пришел опять «Планировщик заданий».
Как в статье про запуск программы без сообщений UAC от имени администратора [12] [13], мы также добавляем наш батник в «Планировщик заданий», но на этот раз, создавая задание, переходим еще и на вкладку «Триггеры«. Добавляем триггер, и откладываем запуск задачи (батника) на 30 секунд. Значение 30 секунд установлено исключительно экспериментально и не на совсем говенной машине, возможно, вам потребуется больше. Ставьте минуту/две.
Источники, литература, дополнительные ссылки и код.
1. Общие ресурсы Windows 7 Копия
2. Общий ресурс IPC$ и поведение пустых сеансов в Windows
3. IPC$ share and null session behavior in Windows
4. Скрытые административные и общие сетевые ресурсы в Windows XP/2000 C$, ADMIN$, FAX$, IPC$, PRINT$
5. https://www.securitylab.ru/forum/forum18/topic15107/
6. Удаление стандартных общих ресурсов C$, ADMIN$, IPC$ Копия
7. Команда FOR КОПИЯ
Обсуждения на форумах:
8. Доступ к сетевым шарам в Windows 7
9. IPC$
Код:
10. Код на PasteBin
11. Код на Mega.NZ
12. Отключение запроса UAC для отдельных приложений
13. Отключение запроса UAC для отдельных приложений