Był sobie taki problem:
Przy instalacji dowolnego programu korzystającego z MSI, przy etapie kopiowania plików, podczas kopiowania dll wyskakiwał błąd. W zaleznosci od interpretacji mówił on albo o braku miejsca na dysku, albo o braku uprawnień, albo po prostu o niemozliwosci zapisania pliku na dysk.
Problem był sam w sobie dziwny, poniewaz miejsce na dysku było, oraz uprawnienia były odpowiednie. Instalator otwierał plik, czyścił go, zapisywał, i koniec - plik miał 0 bajtów i wyświetlał się błąd.Po cofnięciu instalacji pliki były przywracane.
Oczywiście zabrałem się do problemu wyposazony w combo Regwatch,filewatch z sysinternals. Skanowanie rejestru nic nie dało, natomiast podczas skanowania plików okazało się ze zawodzi operacja SET SECURITY.
Zastanawiałem się więc czemu jako administrator systemu, a nawet jako uzytkownik Local System nie mogę zainstalować najprostszych programów. W ruch poszedł google, Platform SDK, kbAlertz!, msfn i wiele innych. I nic. Robocza hipoteza nr.1 -> system mi nie daję tokenu który umozliwia zmianę uprawnień dla danego pliku.
Szybko zobaczyłem Security, oraz ownera pliku. Zgodnie z moimi przypuszczeniami, właścicielem okazał się uzytkownik risasi.
Kto to jest risasi? Mój uzytkownik domenowy do instalacji unattended z RIS-a (RIS Automated System Installer). Na początku jest on przyłączany do grupy Adminisratorów lokalnych, następnie są zdejmowane dla niego quoty. Po skończonej instalacji jest usuwany z Administratorów lokalnych, i quota jest przywrócona.
Jako ze właścicilem pliku jest risasi, to moze trzeba go dodać do administratorów zeby działało? Niestety nie.
To moźe po zmianie właściciela pliku będzie działało? Działało:)
Robocza hipoteza nr.2 -> Wyrzucenie uzytkownika z grupy Administratorów lokalnych bez zmiany właściciela dll które zainstalował nie jest dobrym pomysłem.
Po miesiącu powróciłem do tematu. Przeszłem jeszcze raz przez Filemona, regmona, logi z instalacji. Moją uwagę zwróciła wiadomosć rozszerzona przy polu SET SECCURITY -> disk full.
Okazało sie, ze uzytkownik risasi ma grubo przekroczoną quotę na dysku. Co ma quota do właściciela pliku?
Okazało sie ze msiexec tylko dla dll po nadpisaniu pliku zmienia ownera na ownera który był przed instalacją.
Niby mały błąd, a jednak moze duzo zepsuć. Ja nie mogłem np. instalować nowszych wersji programów, zarówno ręcznie jak i poprzez GPO.
Błąd ten moze być tez wykorzystany przez uzytkowników do ataku na miejsce na dysku komputera, gdyz quoty dla tych dll są naliczane dla ownera.