А также игры с 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$ также известен, как подключение пустых сеансов. С помощью этих сеансов Windows позволяет анонимным пользователям выполнять определенные операции, например получать имена учетных записей домена и список общих сетевых ресурсов.
Общий ресурс IPC$ создается службой Windows Server. Этот особый общий ресурс существует для обеспечения последующих именованных каналов подключения к серверу. Именованные каналы сервера создаются для компонентов, встроенных в операционную систему и приложений или служб, которые установлены в системе. При создании именованного канала процессу задается уровень безопасности, связанный с каналом и затем это гарантирует, что доступ предоставлен только для указанных пользователей или групп. [2] [3]
Проще говоря, если
IPC$
удалить, то другой компьютер не сможет посмотреть, есть ли на вашем компьютере расшаренные ресурсы. Так же могут отвалиться некоторые системные сервисы. На практике, у меня отвалился доступ только к 1С "Склад" (7.7), который и был мне не особо нужен, давно хотел откосить от забивания и проверки накладных и от материальной ответственности :). Но не стоит так делать на "сервере" 7.7, где в самом простом случае никакого сервера нет, а просто базы лежат в расшаренной папке - скорее всего, отвалится все к penis canis. :)Внимание! Если просто удалить эти ресурсы через Управление компьютером, то при следующей перезагрузке ресурсы восстанут, и придется опять выливать воду из чайника.
На мой взгляд, в XP и ниже это делать надо обязательно, в семерке можно обойтись, но если вы параноик, или, как меня, вас достала какая-нибудь комиссия (да, ФСТЭК и РКН, вдругорядь, не penis canis), то это опять же надо делать.
Необходимо в ключе Реестра
HKLM\SYSTEM\CurrentControlSet\Services\L anmanServer\Parameters
добавить следующие значения:
AutoShareServer
и AutoShareWks
типа REG_DWORD
со значением 0
(Windows XP/2000 Proffessional/2000 Server). Вообще где-то надо один, где-то второй, но если добавить оба - ничего страшного случиться не должно. Для семерки тоже должно работать. [4] [5] [6]После добавления делаем перезагрузку.
Минусы:
- не отключить доступ к
IPC$
- вырубается доступ ко всем скрытым шарам, а иногда такую корову полезно иметь самому, для некоторых дисков, и без установки стороннего ПО.
Плюсы:
+ Вырубается быстро и самое основное.
С одной стороны все довольно просто - можно насовать в файл однотипных команд типа
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
@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]
С автозагрузкой получается странная штука, на форумах подобный батник советуют просто кинуть в автозапуск и забыть. Может на 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/t
6. Удаление стандартных общих ресурсов C$, ADMIN$, IPC$ Копия
7. Команда FOR КОПИЯ
Обсуждения на форумах:
8. Доступ к сетевым шарам в Windows 7
9. IPC$
Код:
10. Код на PasteBin
11. Код на Mega.NZ
12. Отключение запроса UAC для отдельных приложений
13. Отключение запроса UAC для отдельных приложений
Это репост с сайта http://tolik-punkoff.com
Оригинал: http://tolik-punkoff.com/2018/09/27/otkl