> > 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 > >
---
> > Во! В принципе, то что надо! Вот только что есть в > SecurityDescriptor, какова его структура? Я в MSDN глянул - > и нифига не понял... Не уверен, что он содержит такие > сведения, как, к примеру, запрет на создание или удаление > подпапок внутри какой-то папки и т.п... Можно поточнее. Я > бы и рад сам проверить - но с VB я не дружу, да и сетка - > на работе, т.е. далековато...
Такой вопрос:
Домен 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
> потом, все пустышки сжать раром Особенно это прикольно, если учитывать, что пустые файлы не занимают фактически места на диске, а только запись в MFT :)
в данном случае на рар перекладывется забота о хранении security объектов в отдельном файле, а глагол "сжать" я использовал по-привычке ;)
кроме того, не на любом нтфс файл 0-й длины будет занимать только одну запись в $MFT, иногда в ран-листе все же будет прописано смещение на единственный кластер, что и видно в allocated size 80-го аттрибута, при этом в real size будет 0
> кроме того, не на любом нтфс файл 0-й длины будет занимать > только одну запись в $MFT, иногда в ран-листе все же будет > прописано смещение на единственный кластер, что и видно в > allocated size 80-го аттрибута, при этом в real size будет > 0 ... и файло в итоге свои 4 кила сожрет! Ессно, если кластер - 4 кила. Для моих 15 тысяч файлов это будет примерно ... э-э-э... 60 литров. Не так уж и много...
А вот действительно интересно, почему же так? Ведь в том-то и прикол НТФС, что мелкие файлы наваливаются в MFT! Неужели бывает такой глюк?
> кроме того, не на любом нтфс файл 0-й длины будет занимать > только одну запись в $MFT, иногда в ран-листе все же будет > прописано смещение на единственный кластер, что и видно в > allocated size 80-го аттрибута, при этом в real size будет > 0 Эээ.. а иногда, это когда?
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
> 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 >
> > 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 > >
Суть - понять, как это делать программно. Для последующей автоматизации различных процессов...
> 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 >
Во! В принципе, то что надо! Вот только что есть в 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 > >
---
> > Во! В принципе, то что надо! Вот только что есть в > SecurityDescriptor, какова его структура? Я в MSDN глянул - > и нифига не понял... Не уверен, что он содержит такие > сведения, как, к примеру, запрет на создание или удаление > подпапок внутри какой-то папки и т.п... Можно поточнее. Я > бы и рад сам проверить - но с VB я не дружу, да и сетка - > на работе, т.е. далековато...
Во-во, об этом-то я и говорю! Пошло-поехало: 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
Да уж, действительно просто... Локальную задачу таким способом решить можно. Спасибо.
А вот если мне какие-то данные поменять надо? права доступа в пакетном режиме для тысячи файлов? Может, тут какой-нибудь cacls поможет? :-)
Ну а нет ли тогда линка на какой-нибудь толковый источник (кроме MSDN) на данную тему? Языки: английский или русский (можно украинский :-)) - неважно.