Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
| | |
Гениально! :) 11.09.02 17:13 Число просмотров: 1893
Автор: duplex Статус: Незарегистрированный пользователь
|
в данном случае на рар перекладывется забота о хранении security объектов в отдельном файле, а глагол "сжать" я использовал по-привычке ;)
кроме того, не на любом нтфс файл 0-й длины будет занимать только одну запись в $MFT, иногда в ран-листе все же будет прописано смещение на единственный кластер, что и видно в allocated size 80-го аттрибута, при этом в real size будет 0
|
<programming>
|
[Win32] Win Security API - работа с томом NTFS. 10.09.02 02:55
Автор: J'JF <Dmytro Volhushyn> Статус: Elderman Отредактировано 10.09.02 02:58 Количество правок: 1
|
Такой вопрос:
Домен Win2K. На файл-сервере есть том NTFS, который расшарен для всех юзверей, но для каждого - с разными правами... Файлов очень много (порядка 15 тыс. - в основном, таблицы FoxPro). Права назначены как папкам, так и отдельным файлам (и даже очень часто!).
Задача:
Подстраховаться на случай краха винта и налабать утилитку, которая бы считывала у каждого файла Security-атрибуты (права доступа для каждго из пользователей, владельца) и заносила их куда-то (непринципиально - хоть даже в текстовый файл - я уж с этим сам разберусь). Сами файлы архивируются, их восстановление - не проблема. Проблема восстановить все права на них!
Что непонятно:
Как вообще получить эту информацию? Какие функции использовать? Ну и, ессно, как программно назначить права? Перелопатил MSDN, нашел пару функций, по смыслу подходящих, но как с ними работать - так и не понял. А, может, тут надо как-то к ActiveDirectory пристраиваться? Может, кто-то сталкивался? Пишу на Делфи, но дайте работающий код хоть на Си - разберусь!
А, может, тут есть и какой-то более простой выход? Может, можно какой-то VB-script замутить?
Заранее благодарен.
|
|
[Win32] Win Security API - работа с томом NTFS. 11.09.02 00:39
Автор: duplex Статус: Незарегистрированный пользователь Отредактировано 11.09.02 00:41 Количество правок: 1
|
рассмотри в качестве бреда такой алгоритм:
получаешь SecurityDescriptor объекта (файл/директория), GetSecurityInfo
создаешь новый объект-stub 0-й длины с таким же security, но в другой директории
продолжаешь рекурсивно по всем объектам
потом, все пустышки сжать раром
когда надо восстановить, то из рара вынимашь нужные объекты-стабы и приминяешь их security на реальные - SetSecurityInfo
|
| |
[Win32] Win Security API - работа с томом NTFS. 11.09.02 10:58
Автор: J'JF <Dmytro Volhushyn> Статус: Elderman
|
Для данной задачи - это, конечно, достаточно простой выход. Только вот моя бабушка называет такое "Сраным наверх"!
Конечная цель для меня - понять, как эта часть АПИ у мелкомягких вобще устроена! Т.е. конкретно и детально во всем разобраться. В том числе и в структуре SecuritySescriptor-а.
Но все равно спасибо.
|
| | |
[Win32] Win Security API - работа с томом NTFS. 11.09.02 17:02
Автор: duplex Статус: Незарегистрированный пользователь Отредактировано 11.09.02 17:13 Количество правок: 1
|
если конечная цель - разобраться с nt-security, то этот метод не пойдет
|
| |
Гениально! :) 11.09.02 01:58
Автор: ZloyShaman <ZloyShaman> Статус: Elderman
|
> потом, все пустышки сжать раром Особенно это прикольно, если учитывать, что пустые файлы не занимают фактически места на диске, а только запись в MFT :)
|
| | |
Гениально! :) 11.09.02 17:13
Автор: duplex Статус: Незарегистрированный пользователь
|
в данном случае на рар перекладывется забота о хранении security объектов в отдельном файле, а глагол "сжать" я использовал по-привычке ;)
кроме того, не на любом нтфс файл 0-й длины будет занимать только одну запись в $MFT, иногда в ран-листе все же будет прописано смещение на единственный кластер, что и видно в allocated size 80-го аттрибута, при этом в real size будет 0
|
| | | |
Гениально! :) 11.09.02 20:24
Автор: J'JF <Dmytro Volhushyn> Статус: Elderman
|
> кроме того, не на любом нтфс файл 0-й длины будет занимать > только одну запись в $MFT, иногда в ран-листе все же будет > прописано смещение на единственный кластер, что и видно в > allocated size 80-го аттрибута, при этом в real size будет > 0 ... и файло в итоге свои 4 кила сожрет! Ессно, если кластер - 4 кила. Для моих 15 тысяч файлов это будет примерно ... э-э-э... 60 литров. Не так уж и много...
А вот действительно интересно, почему же так? Ведь в том-то и прикол НТФС, что мелкие файлы наваливаются в MFT! Неужели бывает такой глюк?
|
| | | |
ОК 11.09.02 17:22
Автор: ZloyShaman <ZloyShaman> Статус: Elderman
|
> кроме того, не на любом нтфс файл 0-й длины будет занимать > только одну запись в $MFT, иногда в ран-листе все же будет > прописано смещение на единственный кластер, что и видно в > allocated size 80-го аттрибута, при этом в real size будет > 0 Эээ.. а иногда, это когда?
|
| | | | |
ОК 11.09.02 20:34
Автор: duplex Статус: Незарегистрированный пользователь
|
воссоздать ситуацию я не прбовал, но видел (по долгу службы) именно такую ситуацию на нт4+сп3
кажется, это уже оффтопик ;)
|
| | | | | |
Думаю, что в НТ5 эта ситуация исправлена. 11.09.02 20:51
Автор: ZloyShaman <ZloyShaman> Статус: Elderman
|
|
|
[Win32] Win Security API - работа с томом NTFS. 10.09.02 03:28
Автор: + <Mikhail> Статус: Elderman
|
neuzheli MS backup ne delaet etogo???
esli net (v chem I silno somnevaus~)
mozhno tak (VB dlia nagliadnosti):
Dim sd as IADsSecurityDescriptor
Dim sdUtil as New ADsSecurityUtility
Set sd = sdUtil.GetSecurityDescriptor("c:\specs\adsixml.doc", ADS_PATH_FILE, ADS_SD_FORMAT_IID )
---
teper~ cherez sd mozhesh poluchit vse ostalnoe.
i sohranit` etu info kak hochesh.
Dla vostanovlenia vce obratnom poridke:
otkryvaesh vostanovlenye files
Set sd = sdUtil.GetSecurityDescriptor("c:\specs\adsixml.doc", ADS_PATH_FILE, ADS_SD_FORMAT_IID )
'set properies of sd (kotorye ranshe sohranil)
'set SD
sdUtil.SetSecurityDescriptor "c:\specs\adsixml.doc", ADS_PATH_FILE, sd, ADS_SD_FORMAT_IID
---
|
| |
[Win32] Win Security API - работа с томом NTFS. 25.09.02 14:53
Автор: ZEP Статус: Незарегистрированный пользователь
|
> neuzheli MS backup ne delaet etogo??? > > esli net (v chem I silno somnevaus~) > mozhno tak (VB dlia nagliadnosti): > > Dim sd as IADsSecurityDescriptor
> Dim sdUtil as New ADsSecurityUtility
>
> Set sd =
> sdUtil.GetSecurityDescriptor("c:\specs\adsixml.doc",
> ADS_PATH_FILE, ADS_SD_FORMAT_IID )
> ---
> teper~ cherez sd mozhesh poluchit vse ostalnoe. > i sohranit` etu info kak hochesh. > > Dla vostanovlenia vce obratnom poridke: > otkryvaesh vostanovlenye files > > Set sd =
> sdUtil.GetSecurityDescriptor("c:\specs\adsixml.doc",
> ADS_PATH_FILE, ADS_SD_FORMAT_IID )
> 'set properies of sd (kotorye ranshe sohranil)
> 'set SD
> sdUtil.SetSecurityDescriptor "c:\specs\adsixml.doc",
> ADS_PATH_FILE, sd, ADS_SD_FORMAT_IID
> ---
У меня в нет объектов IADsSecurityDescriptor и ADsSecurityUtility, а также ничего похожего.
Что вы используете?
|
| | |
[Win32] Win Security API - работа с томом NTFS. 26.09.02 00:08
Автор: + <Mikhail> Статус: Elderman
|
> > neuzheli MS backup ne delaet etogo??? > > > > esli net (v chem I silno somnevaus~) > > mozhno tak (VB dlia nagliadnosti): > > > > Dim sd as IADsSecurityDescriptor
> > Dim sdUtil as New ADsSecurityUtility
> >
> > Set sd =
> > sdUtil.GetSecurityDescriptor("c:\specs\adsixml.doc",
> > ADS_PATH_FILE, ADS_SD_FORMAT_IID )
> > ---
> > teper~ cherez sd mozhesh poluchit vse ostalnoe. > > i sohranit` etu info kak hochesh. > > > > Dla vostanovlenia vce obratnom poridke: > > otkryvaesh vostanovlenye files > > > > Set sd =
> > sdUtil.GetSecurityDescriptor("c:\specs\adsixml.doc",
> > ADS_PATH_FILE, ADS_SD_FORMAT_IID )
> > 'set properies of sd (kotorye ranshe sohranil)
> > 'set SD
> > sdUtil.SetSecurityDescriptor "c:\specs\adsixml.doc",
> > ADS_PATH_FILE, sd, ADS_SD_FORMAT_IID
> > ---
> > У меня в нет объектов IADsSecurityDescriptor и > ADsSecurityUtility, а также ничего похожего. > Что вы используете? WIn32 API
|
| | | |
[Win32] Win Security API - работа с томом NTFS. 26.09.02 08:51
Автор: ZEP Статус: Незарегистрированный пользователь
|
> > > neuzheli MS backup ne delaet etogo??? > > > > > > esli net (v chem I silno somnevaus~) > > > mozhno tak (VB dlia nagliadnosti): > > > > > > Dim sd as IADsSecurityDescriptor
> > > Dim sdUtil as New ADsSecurityUtility
> > >
> > > Set sd =
> > >
> sdUtil.GetSecurityDescriptor("c:\specs\adsixml.doc",
> > > ADS_PATH_FILE, ADS_SD_FORMAT_IID )
> > > ---
> > > teper~ cherez sd mozhesh poluchit vse ostalnoe. > > > i sohranit` etu info kak hochesh. > > > > > > Dla vostanovlenia vce obratnom poridke: > > > otkryvaesh vostanovlenye files > > > > > > Set sd =
> > >
> sdUtil.GetSecurityDescriptor("c:\specs\adsixml.doc",
> > > ADS_PATH_FILE, ADS_SD_FORMAT_IID )
> > > 'set properies of sd (kotorye ranshe sohranil)
> > > 'set SD
> > > sdUtil.SetSecurityDescriptor
> "c:\specs\adsixml.doc",
> > > ADS_PATH_FILE, sd, ADS_SD_FORMAT_IID
> > > ---
> > > > У меня в нет объектов IADsSecurityDescriptor и > > ADsSecurityUtility, а также ничего похожего. > > Что вы используете? > WIn32 API
Можно подробнее ?
|
| | | | |
[Win32] подробнее в MSDN 26.09.02 22:51
Автор: + <Mikhail> Статус: Elderman
|
|
| |
[Win32] Так, уже неплохо! 10.09.02 03:43
Автор: J'JF <Dmytro Volhushyn> Статус: Elderman
|
> neuzheli MS backup ne delaet etogo???
Суть - понять, как это делать программно. Для последующей автоматизации различных процессов...
> esli net (v chem I silno somnevaus~) > mozhno tak (VB dlia nagliadnosti): > > Dim sd as IADsSecurityDescriptor
> Dim sdUtil as New ADsSecurityUtility
>
> Set sd =
> sdUtil.GetSecurityDescriptor("c:\specs\adsixml.doc",
> ADS_PATH_FILE, ADS_SD_FORMAT_IID )
> ---
> teper~ cherez sd mozhesh poluchit vse ostalnoe. > i sohranit` etu info kak hochesh. > > Dla vostanovlenia vce obratnom poridke: > otkryvaesh vostanovlenye files > > Set sd =
> sdUtil.GetSecurityDescriptor("c:\specs\adsixml.doc",
> ADS_PATH_FILE, ADS_SD_FORMAT_IID )
> 'set properies of sd (kotorye ranshe sohranil)
> 'set SD
> sdUtil.SetSecurityDescriptor "c:\specs\adsixml.doc",
> ADS_PATH_FILE, sd, ADS_SD_FORMAT_IID
> ---
Во! В принципе, то что надо! Вот только что есть в SecurityDescriptor, какова его структура? Я в MSDN глянул - и нифига не понял... Не уверен, что он содержит такие сведения, как, к примеру, запрет на создание или удаление подпапок внутри какой-то папки и т.п... Можно поточнее. Я бы и рад сам проверить - но с VB я не дружу, да и сетка - на работе, т.е. далековато...
|
| | |
[Win32] Так, уже неплохо! 10.09.02 05:28
Автор: + <Mikhail> Статус: Elderman Отредактировано 10.09.02 05:33 Количество правок: 2
|
> > neuzheli MS backup ne delaet etogo??? > > Суть - понять, как это делать программно. Для последующей > автоматизации различных процессов... > > > esli net (v chem I silno somnevaus~) > > mozhno tak (VB dlia nagliadnosti): > > > > Dim sd as IADsSecurityDescriptor
> > Dim sdUtil as New ADsSecurityUtility
> >
> > Set sd =
> > sdUtil.GetSecurityDescriptor("c:\specs\adsixml.doc",
> > ADS_PATH_FILE, ADS_SD_FORMAT_IID )
> > ---
> > teper~ cherez sd mozhesh poluchit vse ostalnoe. > > i sohranit` etu info kak hochesh. > > > > Dla vostanovlenia vce obratnom poridke: > > otkryvaesh vostanovlenye files > > > > Set sd =
> > sdUtil.GetSecurityDescriptor("c:\specs\adsixml.doc",
> > ADS_PATH_FILE, ADS_SD_FORMAT_IID )
> > 'set properies of sd (kotorye ranshe sohranil)
> > 'set SD
> > sdUtil.SetSecurityDescriptor "c:\specs\adsixml.doc",
> > ADS_PATH_FILE, sd, ADS_SD_FORMAT_IID
> > ---
> > Во! В принципе, то что надо! Вот только что есть в > SecurityDescriptor, какова его структура? Я в MSDN глянул - > и нифига не понял... Не уверен, что он содержит такие > сведения, как, к примеру, запрет на создание или удаление > подпапок внутри какой-то папки и т.п... Можно поточнее. Я > бы и рад сам проверить - но с VB я не дружу, да и сетка - > на работе, т.е. далековато...
Zachem tebe nuzhna structura. Polzuisia interfacami:
Directory Services: Security Interfaces Directory Services: Access Control
|
| | | |
[Win32] Так, уже неплохо! 10.09.02 08:35
Автор: J'JF <Dmytro Volhushyn> Статус: Elderman
|
> Zachem tebe nuzhna structura. Polzuisia interfacami:
Во-во, об этом-то я и говорю! Пошло-поехало: DACL, ACL, SACL - как это все перевести в удобоваримую форму?
Пример:
SystemAcl - Gets and puts the system ACL (SACL) associated with the security descriptor.
Ну это уже явно property, являющееся ссылкой на структу (элементами которой тоже являются структуры)... Там опять все эти DACL, ACL... Как получить нормальные данные (разложенные по полочкам)???
|
| | | | |
[Win32] Так, уже неплохо! 10.09.02 21:53
Автор: + <Mikhail> Статус: Elderman Отредактировано 10.09.02 22:57 Количество правок: 1
|
> > Zachem tebe nuzhna structura. Polzuisia interfacami: > > Во-во, об этом-то я и говорю! Пошло-поехало: DACL, ACL, > SACL - как это все перевести в удобоваримую форму? > Пример: > SystemAcl - Gets and puts the system ACL (SACL) associated > with the security descriptor. > Ну это уже явно property, являющееся ссылкой на структу > (элементами которой тоже являются структуры)... Там опять > все эти DACL, ACL... Как получить нормальные данные > (разложенные по полочкам)???
Kuda uzh bolee normalnye?
P.S. voobheto vse proche esli ty ne hochesh chitat` SD togda:
_variant_t varPath, var;
varPath = "c:\specs\adsixml.doc";
hr = p->GetSecurityDescriptor(varPath, ADS_PATH_FILE, ADS_SD_FORMAT_HEXSTRING, &var );
//var soderzhit security descriptor v HEX formate as BSTR
//sohrania etu string gde hochesh, a kogda nado vostanovit~
hr = p->SetSecurityDescriptor(varPath, ADS_PATH_FILE, var, ADS_SD_FORMAT_HEXSTRING);
---
I vse chto proche to??
|
| | | | | |
[Win32] Так, уже неплохо! 11.09.02 11:05
Автор: J'JF <Dmytro Volhushyn> Статус: Elderman
|
> Kuda uzh bolee normalnye? Ну они нормальные для тебя. А мне не совсем понятно, что тут к чему...
> P.S. voobheto vse proche esli ty ne hochesh chitat` SD > togda: > > _variant_t varPath, var;
> varPath = "c:\specs\adsixml.doc";
> hr = p->GetSecurityDescriptor(varPath, ADS_PATH_FILE,
> ADS_SD_FORMAT_HEXSTRING, &var );
> hr = p->SetSecurityDescriptor(varPath, ADS_PATH_FILE,
> var, ADS_SD_FORMAT_HEXSTRING);
>
> ---
> I vse chto proche to??
Да уж, действительно просто... Локальную задачу таким способом решить можно. Спасибо.
А вот если мне какие-то данные поменять надо? права доступа в пакетном режиме для тысячи файлов? Может, тут какой-нибудь cacls поможет? :-)
Ну а нет ли тогда линка на какой-нибудь толковый источник (кроме MSDN) на данную тему? Языки: английский или русский (можно украинский :-)) - неважно.
|
|
|