sobota, 9 stycznia 2010

Solaris jako domowy serwer

Robiąc kopie laptopa za pomocą 'rsync' na domowy komputer, zaciekawił mnie w pewnym momencie postęp kopiowania plików jaki pokazuje rsync, a w zasadzie, to jego brak..

Komputer pełniący rolę serwera pracuje pod kontrolą systemu OpenSolaris.
Logując się na serwer zauważyłem, że bardzo mało danych jest wysyłanych przez sieć, natomiast dysk jest używany w 100%:

Widać, że dysk 'cmdk1' ma sporo operacji odczytu.
Za pomocą skryptu DTrace 'rwbytype', znajdującego się w pakiecie DTrace Toolkit (DTT) sprawdziłem jakie procesy używają I/O:Widać, że najwięcej danych odczytuje rsync z PIDem 5981.

Kolejny skrypt z DTT 'pfilestat' pokaże statystyki otwartych plików danego procesu:
# /opt/DTT/Proc/pfilestat 5981

Widać, że proces odczytuje sporo z deskryptora pliku nr 0.
Aby dowiedzieć się więcej o tym pliku wystarczy użyć komendy 'pfiles' z numerem PID:
# pfiles 5981


Teraz już wiadomo dlaczego rsync 'zatrzymał' się na chwilę z kopiowaniem danych.
W tym przypadku porównuje sumy kontrolne źródłowego i docelowego pliku, ponieważ plik został zmodyfikowany od ostatniego kopiowania.
Porównywany plik jest obrazem dysku wirtualnej maszyny VirtualBox'a i zajmuje 13GB, dlatego też ta operacja zatrzymała 'progress' jaki pokazuje rsync.

Aby przyśpieszyć kopiowanie plików usunąłem ten plik z docelowego miejsca, jednocześnie mając jego kopię w snapshotach ZFS.

piątek, 8 stycznia 2010

Własny profil RBAC - mini howto

Czasami pojawia się problem, gdzie użycie profilu RBAC wydaje się idealnym rozwiązaniem.
W Solarisie mamy kilkaset gotowych profili. Bardzo łatwo jednak utworzyć nowy profil, pod specyficzne rozwiązanie.

Podam bardzo prosty przykład jak to uczynić:

Dodajemy linijkę definiującą nazwę profilu w pliku /etc/security/prof_attr:

echo "My Profile::::" >> /etc/security/prof_attr


Dodajemy linijkę definiującą jaką aplikację z jakim UIDem możemy uruchamiać w pliku /etc/security/exec_attr:

echo "My Profile:solaris:cmd:::/usr/local/sbin/my_app:uid=345" >> /etc/security/exec_attr

W tym przykładzie użytkownik posiadający profil 'My Profile' będzie mógł uruchomić aplikację '/usr/local/sbin/my_app' jako UID=345.

Nadajemy profil 'My Profile' użytkownikowi 'user123':

usermod -P "My Profile" user123

UWAGA, 'usermod -P' zmienia uprawnienia profili, warto zauważyć jakie profile ma dany user, aby nie odebrać sobie przypadkowo uprawnień.


Oto przykład, jak działa nowy profil: