Разрешение за директория, споделено между услугата на Windows и конзолното приложение

Не съм сигурен дали това е подходящото място за такъв въпрос (може би трябва да се постави на SuperUser?), но ще опитам.

Имам едно C# конзолно приложение и една Windows услуга. И двете правят същото, но конзолното приложение е създадено преди и се пази за обратна съвместимост. Всеки от тях изпълнява WCF услуга, чиито методи работят с файлове в C:\ProgramData\MyApp. Конзолното приложение се изпълнява като ограничен потребител (без администратор), услугата на Windows работи като NT AUTHORITY\NETWORK SERVICE. Когато приложението създаде някои директории/файлове, услугата не може да ги изтрие и обратно.

Бих искал да го обезопася. Въпросът ми е: трябва ли да дам пълни разрешения за C:\ProgramData\MyApp на NETWORK SERVICE и текущия потребител? Или трябва да създам специален потребител за стартиране на услуга/приложение?


person myszor    schedule 03.08.2012    source източник


Отговори (1)


Ако приемем, че вашето приложение не задава изрично разрешение за защита на новосъздадени файлове, предоставянето на разрешения за изтриване на акаунт за мрежова услуга за папката ще реши незабавния ви проблем.

Тази команда ще свърши работата:

icacls c:\ProgramData\MyApp /t /grant "NETWORK SERVICE":(OI)(CI)(IO)D

Повторете същото за вашия акаунт за други потребителски услуги.

person seva titov    schedule 03.08.2012
comment
Това по-безопасен подход ли е от създаването на потребител на Windows MyAppUser, даването му на пълни права върху директория c:\ProgramData\MyApp и стартиране на услуга/приложение с акаунта на този потребител (вместо NETWORK SERVICE)? - person myszor; 04.08.2012
comment
Най-сигурната конфигурация за услуга винаги е да създадете специален потребителски акаунт и да предоставите на този акаунт само достатъчно разрешения за работа и не повече от това. Трябва обаче да внимавате и да не давате повече разрешения, от които се нуждаят. напр. ако направите своя акаунт за услуга член на група администратори, това обезсмисля целта на специалния акаунт. В много случаи вградените акаунти като LocalService или NetworkService са достатъчно добри. - person seva titov; 05.08.2012