Страницы: 1
RSS
Защита от изменения файла
 
Добрый день всем. Есть такая интересная задача.
Есть файл txt, есть система Windows линейки НТ (допустим начиная с 2000), файловая система НТФС. Задача. Сделать так чтобы все могли просматривать этот файл, а изменять мог любой пользователь системы с любыми правами, но *только* с помощью моей программы (программа изначально устанавливается с правами админа). Внимание, вопрос! Возможно ли это?
Я предполагал такой путь решения, при установке программы устанавливается еще и системный сервис, который реализует простенький АПИ работы с файлом (ну типа создать, удалить, райт, рид),он и создает первоначально файл с правами чтения и владельца СИСТЕМ, а для всех остальных файл доступен только для чтения. Как думаете возможно такое решение? Спрашивал на sysinternals - толком ничего не сказали...
Или может кто предложит альтернативные варианты?
Всем спасибо.
 
ну только сервису совсем не обязательно запускаться от имени системы. создай для этого отдельного пользователя.
 
Неужели в NTFS нет банальных прав доступа на файл? Верится с трудом. В Linux банально - создаём юзера, делаем его владельцем программы и ставим setuid бит, и файлу соотв. режим доступа. Я уверен, что там примерно так-же.
 
Цитата
Сделать так чтобы все могли просматривать этот файл, а изменять мог любой пользователь системы с любыми правами, но *только* с помощью моей программы (программа изначально устанавливается с правами админа).
Создай отдельную учётную запись для своей программы, например mysoft и запускай её в службах с правами этого пользователя. На в файл в свою очередь установи разрешение  на запись только для mysoft. Конечно если пользователь будет с правами админа то он может легко добавить себе прав. Но как я понял данная политика прежде всего направлена на непривилигированных юзеров
 
Цитата
v04bvs пишет:
Неужели в NTFS нет банальных прав доступа на файл? Верится с трудом. В Linux банально - создаём юзера, делаем его владельцем программы и ставим setuid бит, и файлу соотв. режим доступа. Я уверен, что там примерно так-же.
конечно же есть.
проблема только в том, что некоторые не умеют читать вопросы.
 
"Изюминка" задачи в том чтобы обойтись без добавления специальных пользователей. Есть какие-нибудь идеи насчет этого? Как-то ведь наверное можно блокировать файл. В групповых политиках винды можно настроить права таким образом, что даже все члены группы администраторы не смогут получить доступ к определенным ресурсам, значит потенциально механизмы запрета имеются...только вопрос какие и как их можно использовать...
 
немного тупой вариант:
запустить сервис и им сделать файлу lock, и общаться с сервисом.
 
Цитата
SomewhereSomeho пишет:
Задача. Сделать так чтобы все могли просматривать этот файл, а изменять мог любой пользователь системы с любыми правами, но *только* с помощью моей программы (программа изначально устанавливается с правами админа). Внимание, вопрос! Возможно ли это?

да, конечно.
все просто.
запускаешь свою программу, и пусть она открывает этот файл:
Код
HANDLE hFile = CreateFile (filename, GENERIC_READ | GENERIC_WRITE, [B]FILE_SHARE_READ[/B], ...);



=)
 
2TSS:
что, собственно, я я и писал...
 
Цитата
JUmPER пишет:
2TSS:
что, собственно, я я и писал...

Ну, сделать lock это вообще-то FILE_SHARE_NONE =)
 
Кто мешает пользователю этот сервис остановить?
Или вообще убить его в ProcExp или TaskMan?
В первом случае с файлом ничего не случится, если сервис реагирует на остановку и закрывает файл. А во-втором данные в файле могут быть потеряны, если сервис с ним активно работал...

К тому же, если сделать FILE_SHARE_NONE, то его не только редактировать никто другой не сможет, но и открыть для чтения
 
Цитата
X_Tra пишет:
Кто мешает пользователю этот сервис остановить

недостаток прав.
 
а кто мешает взять молот и зубило и выбить на винче гимн ссср вместо файла?

права надо для файла/сервиса соответствующие выставить, а админ должен быть админом -- "что хочу - то и ворочу", и запреты для него -- это бред...
 
Цитата
SomewhereSomeho пишет:
Сделать так чтобы все могли просматривать этот файл, а изменять мог любой пользователь системы с любыми правами, но *только* с помощью моей программы (программа изначально устанавливается с правами админа). Внимание, вопрос!
Первое, что приходит в голову - драйвер-фильтр файловой системы. Но можно и простым перехватом API обращения к файлу (NtCreateFile).
Это если конечно я правильно понял задачу.
Возникает вопрос: а как отличить обращение к файлу системы от обращения нашей программы. Можно использовать какие-нибудь извращенные аттрибуты...

Сложно...
Можно использовать метод, предложенный TSS:FILE_SHARE_READ. Но чтобы админ не убил наш процесс(службу) то все равно надо использовать API перехват чтобы скрыть процесс (службу) от пользователя.
 
Цитата
JUmPER пишет:
а кто мешает взять молот и зубило и выбить на винче гимн ссср вместо файла?
да никто не мешает! можно вообще взять зубило и воткнуть админу в одно место чтобы руки выпрямились.

прятать процессы, "рисовать" руткиты и прочее... IFS драйвера... может не заморачиватся особо, а поюзать сеть? и пусть админ админит сам свою тачку до опупения... или не парицца и попользовать MSSQL или еще какое хранилище... вариантов масса на самом деле.
 
хм..
2TSS +1 :)
а кстати, какая цель сией задумки?
 
Цитата
Macr0s пишет:
а кстати, какая цель сией задумки?
сдается мне, что изобретение очередного велосипеда...
 
Всем спасибо за участие. Буду думать дальше =)
2 TSS:
Нет не велосипед, а важный журнал логов, в случае возможности внесения изменений пропадут реальные деньги и мне настучат по шапке. =)
Про "тхт" файл я немного загнул но смысл остается такой же.
Вообщем всем еще раз спасибо, продолжу размышления...
 
2SomewhereSomeho: я тута еще припомнил. вполне можно сделать еще одну категорию к стандартному EventLog (типа как делает Directory Service и File Replication Service). Делается просто, надежность -- практически 100%. Но руки админа...
Страницы: 1
Читают тему (гостей: 2)