ACL dla plików i katalogów w Ubuntu
Unixowy system uprawnień dla plików i katalogów został naprawdę dobrze przemyślany i świetnie się sprawdza. Każdy jednak prędzej czy później może trafić na sytuację, w której możliwość stosowania rozszerzonych uprawnień dałaby znacznie większą swobodę i wygodę.
Kogo temat może zainteresować?
Wydaje mi się, że użytkownicy zwykłych desktopów nie będą ACL’i potrzebować. Jeśli jednak jakiś developer umieszcza przykładowo serwer z repozytorium u siebie albo jest administratorem jakiegoś serwera – myślę, że warto się zapoznać z poniższą tematyką.
Krok po kroku
Access Control Lists (ang. ACL), czyli listy kontroli dostępu są w jądrze Ubuntu wkompilowana domyślnie już od jakiegoś czasu. Niewiele stoi zatem nam na przeszkodzie, aby aktywnie zacząć z nich korzystać. ACL należy traktować jako rozszerzenie Unixowego systemu uprawnień plików i katalogów, dlatego zestaw komend takich jak chown czy chmod nadal obowiązuje.
Czego zatem potrzebujemy? Musimy uświadomić nasz system, że będziemy wykorzystywać ACL’e dla konkretnych systemów plików. No i przede wszystkim – musimy mieć narzędzia do zarządzania ACL’ami oraz wiedzieć, jak się ich używa
Zatem po kolei.
Sprawdźmy, czy mamy narzędzia do obsługi ACL’i. Narzędzia nazywają się setfacl, getfacl oraz chacl.
desktop repos # getfacl Program getfacl nie jest obecnie zainstalowany. Można go zainstalować wpisując: apt-get install acl getfacl: command not found desktop repos #
Więc go sobie instalujemy:
sudo aptitude install acl
Spróbujmy ustawić jakąś rozszerzoną listę dostępu. Przejdźmy do katalogu domowego, załóżmy katalog test oraz nadajmy uprawnienia rwx użytkownikowi nobody.
cd mkdir test setfacl -R -m u:nobody:rwX test setfacl: test: Operation not supported
Komunikat Operation not supported oznacza nic innego jak brak obsługi ACL w systemie plików. Jeśli nasz katalog domowy znajduje się na odrębnym systemie plików home, możemy aktywować obsługę ACL komendą:
sudo mount -o remount,acl /home
Teraz ustawianie rozszerzonych uprawnień powinno już działać. Ponowne wydanie komendy setfacl nie powinno już zwrócić błędu.
Przy okazji, możemy zobaczyć jak wyglądają uprawnienia naszego katalogu:
nme@desktop ~ $ setfacl -R -m u:nobody:rwX test nme@desktop ~ $ ls -lad test/ drwxrwxr-x+ 2 nme nme 4096 2009-12-30 14:29 test/ nme@desktop ~ $ getfacl test # file: test # owner: nme # group: nme user::rwx user:nobody:rwx group::r-x mask::rwx other::r-x
Warto zwrócić uwagę na uprawnienia zwracane komendą ls -l: drwxrwxr-x+ – na końcu listy uprawnień znajduje się znak + oznaczający rozszerzone informacje. Takie uprawnienia możliwe są do odczytu za pośrednictwem getfacl co też uczyniłem powyżej. Wynik komendy jest dość czytelny.
Wracając do wydanej komendy:
setfacl -R -m u:nobody:rwX test
Co po naszemu brzmi – rekursywnie zmodyfikuj uprawnienia dla użytkownika nobody dla katalogu test ustawiając uprawnienia rwx dla katalogów i rw dla plików.
Dziecinne proste. Rozbudujmy komendę:
setfacl -Rm u:nobody:rwX,d:u:nobody:rwX test
(pierwsza część jest tak naprawde zbędna, ponieważ uprawnienia dla użytkownika już ustawiliśmy, ale chciałem przedstawić sposób w jaki możemy łączyć uprawnienia w obrębie jednej komendy)
d:u:... można zapisać również jako default:u:... co oznacza, że dla nowo zakładanych plików/katalogów, takie atrybuty mają być domyślnie dodawane.
Ważna sprawa, na koniec
Aby używać list dostępu, aktywowaliśmy opcję acl poprzez przemontowanie systemu pliku. Niestety, po restarcie, system plików nie będzie już obsługiwał list dostępu.
Co zatem zrobić?
Jeśli chcemy, aby nasz system plików pamiętał o tym, że ma obsługiwać rozszerzone listy dostępu, w pliku /etc/fstab należy to zaznaczyć, acl jako opcję dla naszego systemu plików:
/dev/mapper/desktop-home /home ext3 defaults,acl 0 2
Więcej informacji, wraz z przykładami znaleźć możecie na stronach manuala komend do obsługi acl które przedstawiłem w tym tekscie.
Ailurus: wygodny tuning Ubuntu
Niestrudzony Adrian Nowak, na blogu Ubucentrum zamieścił wpis Ailurus – ułatwi początki z Linuksem.
Czym jest Ailurus? To wygodny interfejs produkcji „Thrusted Digital Technology Lab.” z siedzibą w Chinach, do tuningu systemu i obsługi systemu
Faktycznie, narzędzie jest faktycznie bardzo ciekawe. Nie znajduje się jednak w standardowym repozytorium. Dlatego myślę, że warto wspomnieć, w jaki sposób najwygodniej je zainstalować.
Nie zalecałbym metody którą proponuje Adrian – czyli instalacji pojedynczej paczki z serwisu GetDeb.net.
Instalowanie pojedynczych paczek jest zaśmiecaniem systemu.
Instalacja
W Ubuntu 9.10 możemy w wygodny sposób dodawać repozytoria, które sprawią, że jeśli pojawi się nowa wersja pakietu, przy aktualizacji systemu, pakiet zostanie również uaktualniony.
# przechodzimy na roota sudo -i # dodajemy nowe repozytorium add-apt-repository ppa:ailurus # aktualizujemy wykaz aktualnych pakietów aptitude update # instalujemy pakiet aptitude install ailurus
Aplikacja, po instalacji jest dostępna poprzez Programy / Narzędzia systemowe / Ailurus.
Co oferuje nam pakiet?
- Tips and tricks – warto przeglądnąć – informacje jak za pomocą gconf-editora wykonać tuning naszego Gnome’a
- Wygodny frontend do konfiguracji i sprawdzenia parametrów systemu (typ procesora, ilość pamięci, czy procesor jest 64-bitowy, rodzaj karty graficznej i sieciowej)
- Skróty do instalacji różnych przydatnych aplikacji, których nazwy należałoby w innym wypadku pamiętać albo trzeba byłoby się bardziej narobić, żeby je zainstalować
- Ustawienia systemowe – innymi słowy – edycja plików konfguracyjnych, modifykacja menu kontekstowego Nautilusa itp
- i wiele innych…
Kiedy można sobie ułatwić życie, warto to robić
Infrastruktura PKI na podstawie SSH
Infrastruktura kluczy publicznych (ang. Public Key Infrastructure, w skrócie PKI) jest podstawą współczesnej kryptografii. Miałem już styczność z wieloma osobami z branży IT, które kompletnie nie czuły o co właściwie w tym chodzi.Myślę, że poniższy tekst napewno się komuś przyda oraz, że warto mu poświęcić 5 minut. Spróbuję się maksymalnie streścić
Klucze symetryczne i niesymetryczne
Większość szyfrowanych kanałów transmisji wykorzystuje jednocześnie klucze niesymetryczne jak i symetryczne.
Zaletą kluczy symetrycznych (takich jak AES, Blowfish czy DES) jest szybkość szyfrowania/deszyfrowania przy stosunkowo niskim obciążeniu procesora.
Wadą kluczy symetrycznych jest etap nawiązania transmisji. Jeśli oba komputery nie posiadają tego samego klucza do szyfrowania/deszyfrowania wiadomości – klucz taki musiałby być wysłany z jednego z nich do drugiego drogą nieszyfrowaną. Taką wymianę klucza można byłoby łatwo podsłuchać. Następnie, korzystając z tak zdobytego klucza – można podsłuchać resztę transmisji (taki atak nosi nazwę Man In The Middle).
Dlatego właśnie pojawiły się klucze niesymetryczne (np. stosowany standardowo w protokole ssh – algorytm RSA). Klucz niesymetryczny składa się z dwóch części – publicznej i prywatnej. Posiadacz części publicznej klucza jest w stanie zaszyfrować wiadomość. Posiadacz klucza prywatnego – może taką wiadomość odszyfrować. Proste. Dodatkowo – na podstawie klucza publicznego jesteśmy w stanie zweryfikować odcisk klucza (fingerprint) – jeśli się zgadza, wiemy, że rozmawiamy z właściwym serwerem.
Klucze w praktyce
Serwery Linuxowe na których pracuje usługa ssh mają również wygenerowane swoje klucze. Autentykacja może być różnoraka, jednak do najpopularniejszych należą – para użytkownik-hasło oraz łączenie się z wykorzystaniem kluczy.
Wykorzystanie haseł jest proszeniem się o kłopoty. Warto przesiąść się na klucze. Jak to zrobić?
Wygenerujmy sobie klucz. W obecnych czasach warto zaznaczyć, że chcemy mieć klucz 4096-bitowy, będzie się generował dłużej, ale będzie bezpieczniejszy. Warto też ustawić hasło dla klucza.
nme@notebook ~ $ ssh-keygen -b 4096 Generating public/private rsa key pair. Enter file in which to save the key (/home/nme/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/nme/.ssh/id_rsa. Your public key has been saved in /home/nme/.ssh/id_rsa.pub. The key fingerprint is: 12:30:87:ca:06:81:d8:5a:32:41:81:4c:3a:74:33:a9 nme@notebook The key's randomart image is: +--[ RSA 4096]----+ |XO.++.. | |X.+.++ | |oB.. . | |.E+ . | | . . S | | . | | | | | | | +-----------------+ nme@notebook ~ $
W katalogu .ssh pojawiły się dwa pliki id_rsa – będący naszym kluczem prywatnym oraz id_rsa.pub – czyli klucz publiczny.
Klucza publicznego nie trzeba specjalnie strzec. Ważne, aby nasz klucz prywatny nie dostał się w cudze ręce.
Po co ten obrazek w ASCII? Abyśmy nie musieli weryfikować znak po znaku naszych kluczy. Jeśli chcemy odczytać fingerprint klucza, wydajemy komendę:
ssh-keygen -l
Jeśli chcemy zobaczyć odcisk wraz z obrazkiem ASCII – wydajemy:
ssh-keygen -lv
Okej. Powiedzmy, że mamy klucze i serwer na który chcielibyśmy się łączyć za ich pomocą. Musimy umieścić zawartość naszego klucza publicznego w pliku .ssh/authorized_keys na serwerze docelowym. Możemy to zrobić komendą:
nme@notebook ~ $ ssh-copy-id serwer: The authenticity of host 'serwer (x.x.x.x)' can't be established. RSA key fingerprint is fe:2b:6b:71:6f:81:ef:07:74:89:72:e7:ef:ab:f8:62. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'serwer,x.x.x.x' (RSA) to the list of known hosts. Password: nme@notebook ~ $
teraz możemy już normalnie się zalogować:
nme@notebook ~ $ ssh serwer nme@serwer ~ $
W pliku .ssh/authorized_keys możemy trzymać dowolną ilość kluczy.
Dobrą praktyką jest generowanie kluczy prywatnych na każdej stacji roboczej z której łączymy się na inne maszyny. W wypadku gdy np. ktoś ukradnie nam jedną z tych maszyn – wystarczy usunąć dane klucze z plików authorized_keys serwerów, do których mamy dostęp.
Skoro już opanowaliśmy klucze – warto wyłączyć autoryzację do naszych serwerów za pośrednictwem par użytkownik-hasło. Robimy to edytując plik /etc/ssh/sshd_config – weryfikujemy ustawienia:
# Change to yes to enable challenge-response passwords (beware issues with # some PAM modules and threads) ChallengeResponseAuthentication no # Change to no to disable tunnelled clear text passwords PasswordAuthentication no
Restart sshd we współczesnych Ubuntu czy RedHatach wykonujemy komendą:
sudo service ssh restart
Kiedy wyłączymy już logowanie na pary użytkownik-hasło i pozostawimy jedynie logowanie na klucze:
nme@notebook ~ $ ssh serwer Permission denied (publickey). nme@notebook ~ $
Gdzie poza SSH stosowane są jeszcze klucze?
Infrastruktura kluczy publicznych (PKI) stosowana jest również przykładowo w HTTPS czy w sieciach bezprzewodowych – WPA2 (AES). Klucze niesymetryczne stosowane są do nawiązania transmisji między klientem i serwerem – celem wymiany klucza symetrycznego, a następnie transmisja jest już oparta o klucz symetryczny.
Znajomość ogólnych zasad działania PKI jest bardzo praktyczna również w przypadku, jeśli przymierzamy się do wykorzystania OpenPGP czy certyfikatów SSL, które możemy traktować jak wyższe stopnie zaawansowania
Python – Demonologia
Python jest świetnym językiem do całej palety zastosowań. Służy on pomocą zarówno administratorom systemów, osobom które potrzebują napisać prosty parser, a nawet twórcom aplikacji webowych – dzięki takim frameworkom jak Django. W poniższym tekscie chciałbym pokazać jak łatwo jest stworzyć usługę systemową (ang. daemon) w języku Python, która będzie wykonywała dla nas określoną czynność – jako przykład przedstawię fakedns – bardzo prostego daemona DNS, który na dowolne zapytanie o adres IP będzie zwracał zawsze ten sam.
Dlaczego Python? Co z innymi językami?
Nie lepiej mieć aplikację którą można skompilować? Absolwenci kierunków informatycznych jeszcze kilka lat temu dowiadywali się na studiach, że najbardziej zaawansowanym językiem do wszelakich zastosowań jest Java. Mieli praktyczne doświadczenie z tworzenia aplikacji w Javie… i zaczęli pisać. Kod który chciałbym tu przedstawić pisałem dwa lata temu. Zanim się za niego zabrałem, zacząłem od szukania już gotowego rozwiązania za pomocą Google. Znalazłem, nawet kilka. Jedno w Javie. O zgrozo. Ja wiem, że się da. Wiem, że Java jest naprawde zaawansowanym językiem. Gotowa aplikacja wymaga jednak dużego nadkładu. Trzeba przygotować środowisko, przygotować konkretną ilość pamięci… i czekać kiedy aplikacja się wyłoży. Takie mam przynajmniej doświadczenia z aplikacjami w Javie, które pisali programiści zaraz po studiach, pracując w profesjonalnej firmie software’owej.
A inne języki? Natualnie. Jest C. Świetny język, ale czy mamy wystarczająco dużo czasu aby w nim pisać nawet małe aplikacje? .NET ? Wolne żarty. Nie dość, że pod Linuxem jest bardzo grubymi nićmi przyszywany, to i nie mamy pewności, czy Microsoft nie powie pewnego dnia hola, jedynie na ich, komercyjnej platformie. Naddatek potrzebnej mocy obliczeniowej, pamięci, wymaganej przestrzeni dyskowej… i ta świadomość, że nie jest to dopracowane i pewnie nigdy nie będzie – niczym Samba próbująca naśladować również kalekie i dziurawe, Microsoftowe domeny.
A co ze skryptowymi? Mnie na myśl przychodzą trzy alternatywy – Lua, Ruby i skrypt w bashu.
Lua – niesamowicie przejrzysty język. Piekielnie szybki, realizowany przez wręcz mikroskopijną bibliotekę. Na jego niekorzyść trzeba jednak zaliczyć wręcz niemal konieczność liczenia się z faktem, że jeśli rozwiązanie które potrzebujemy stworzyć, będzie wymagało biblioteki – będziemy zmuszeni długo jej szukać lub przygotować samemu jej obsługę za pomocą języka C.
Ruby – chyba najbliższy Pythonowi. Dlaczego nie. Bibliotek jest coraz więcej, jest wydajny. Miałem okazję jakiś czas temu nawet coś napisać w tym języku (a dokładnie – przepisać mały framework z Pythona), ale… jakoś w Pythonie pisze mi się lepiej. Co ważne – Ruby jest głęboko zakorzeniony w Perlu. Programistom mówi się jak powinni pisać kod, jednak zawsze mogą robić w to w stylu Perlowym – pisać szybko i wydajnie, jednak przeczytanie i przeanalizowanie go po jakimś czasie staje się piekłem. Kod w Pythonie jest de facto zawsze taki sam, nie zależnie kto by go pisał – czytanie go jest proste i przyjemne.
No i jeszcze uzupełnie o język skryptowy – Bash. Można w nim naprawdę dużo zrobić. Warto jednak zastanowić się na ile aplikacja będzie zaawansowana i czy zależy nam na wydajności. Podam przykład. Stworzyłem kiedyś skrypt w bashu generujący w oparciu o kilka plików wejściowych reguły dla firewalla, reguły shapera oraz treść dhcpd.conf. Skrypt wewnątrz wywoływał po kilka tysięcy razy awk/sed’a itp. Na maszynie jednoprocesorowej (Pentium 4 1.4 GHz), która pełniła funkcję routera dla sieci 100 Mbit/s, przy mniejszym obciążeniu – skrypt wykonywał się kilka minut. Przy większym – godzinę. Za każdym razem uruchamiając awk, spawnował odrębnego basha. Cóż. Przepisałem rozwiązanie na język Lua. Skrypt niezależnie od obciążenia maszyny wykonywał się w 0.02 sekundy. Jeśli byłby to Python czy Ruby – efekt byłby zapewne zbliżony do Lua.
Tworzenie usługi systemowej dla Linux/Unix
OK, zaczynamy. Usługa systemowa powinna przede wszystkim:
- wiedzieć jak pisać do sysloga
- zrzucić uprawnienia root’a
- odkleić się od stdin i stdout i przejść w tło
Jeśli taka usługa dodatkowo potrzebuje obsługiwać jakiś systemowy port TCP/UDP (o numerze niższym niż 1024) – zanim zrzuci ona prawa roota, powinna otworzyć sobie określonego socketa.
Nie będę tłumaczył poszczególnych fragmentu kodu ponieważ uważam, że jest on wystarczająco przejżysty.
fakedns.py
#!/usr/bin/python -u
# -*- coding: utf-8 -*-
" Fake DNS server: Always answer with the same, defined as conf.destip reply, listen at conf.listen "
class conf:
listen='ADRES_IP_NA_KTÓRYM_APLIKACJA_MA_NASŁUCHIWAĆ'
destip='ADRES_IP_NA_KTÓRY_APLIKACJA_BĘDZIE_KIEROWAĆ'
import os,sys,pwd,grp
import logging,logging.handlers
import socket
log=logging.getLogger('fakedns')
logging.basicConfig()
logging.root.setLevel(level=logging.INFO)
#logging.root.setLevel(level=logging.DEBUG)
hdlr=logging.handlers.SysLogHandler('/dev/log')
log.addHandler(hdlr)
def drop_privileges(uid_name='nobody',gid_name='nogroup'):
starting_uid=os.getuid()
starting_gid=os.getgid()
starting_uid_name=pwd.getpwuid(starting_uid)[0]
log.info('fakedns: drop_privileges: started as %s/%s'%(pwd.getpwuid(starting_uid)[0],grp.getgrgid(starting_gid)[0]))
if os.getuid()!=0:
log.info("fakedns: drop_privileges: already running as '%s'"%starting_uid_name)
return
if starting_uid==0:
# Get the uid/gid from the name
running_uid = pwd.getpwnam(uid_name)[2]
running_gid = grp.getgrnam(gid_name)[2]
# Try setting the new uid/gid
try:
os.setgid(running_gid)
except OSError,e:
log.error('Could not set effective group id: %s'%e)
try:
os.setuid(running_uid)
except OSError,e:
log.error('Could not set effective user id: %s'%e)
# Ensure a very convervative umask
new_umask=077
old_umask=os.umask(new_umask)
log.info('fakedns: drop_privileges: Old umask: %s, new umask: %s'%(oct(old_umask),oct(new_umask)))
final_uid=os.getuid()
final_gid=os.getgid()
log.info('fakedns: drop_privileges: running as %s/%s'%(pwd.getpwuid(final_uid)[0],grp.getgrgid(final_gid)[0]))
def become_daemon(home='.',stdin='/dev/null', stdout='/dev/null', stderr='/dev/null'):
log.info('fakedns: deamonize')
# perform first fork
try:
if os.fork()>0:
sys.exit(0)
except OSError,e:
log.info("fakedns: 1st fork failed: %s"%e.strerror)
sys.exit(1)
os.setsid()
os.chdir(home)
os.umask(0)
# second fork
try:
if os.fork()>0:
sys.exit(0)
except OSError,e:
log.info("fakedns: 2nd fork failed: %s"%e.strerror)
sys.exit(1)
i=open(stdin,'r')
o=open(stdout,'a+')
e=open(stderr,'a+',0)
os.dup2(i.fileno(),sys.stdin.fileno())
os.dup2(o.fileno(),sys.stdout.fileno())
os.dup2(e.fileno(),sys.stderr.fileno())
class DNSQuery:
def __init__(self, data):
self.data=data
self.dominio=''
tipo = (ord(data[2]) >> 3) & 15 # Opcode bits
if tipo == 0: # Standard query
ini=12
lon=ord(data[ini])
while lon != 0:
self.dominio+=data[ini+1:ini+lon+1]+'.'
ini+=lon+1
lon=ord(data[ini])
def respuesta(self, ip):
packet=''
if self.dominio:
packet+=self.data[:2] + "\x81\x80"
# Questions and Answers Counts
packet+=self.data[4:6] + self.data[4:6] + '\x00\x00\x00\x00'
# Original Domain Name Question
packet+=self.data[12:]
# Pointer to domain name
packet+='\xc0\x0c'
# Response type, ttl and resource data length -> 4 bytes
packet+='\x00\x01\x00\x01\x00\x00\x00\x3c\x00\x04'
# 4bytes of IP
packet+=str.join('',map(lambda x: chr(int(x)), ip.split('.')))
return packet
if __name__ == '__main__':
udps = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
try:
udps.bind((conf.listen,53))
except socket.error, (val,e):
log.info("fakedns: %s"%e)
sys.exit(1)
log.info('fakedns: dom.query. 60 IN A %s' % conf.destip)
drop_privileges()
become_daemon()
try:
while 1:
data, addr = udps.recvfrom(1024)
#log.info(addr)
p=DNSQuery(data)
udps.sendto(p.respuesta(conf.destip), addr)
#log.info('%s -> %s' % (p.dominio, conf.destip))
log.info('fakedns: %s -> %s'%(p.dominio,addr[0]))
except KeyboardInterrupt:
log.info('fakedns: done.' % (p.dominio, conf.destip))
udps.close()
except:
log.info('fakedns: crashed serving %s (%s)'%(addr, data))
Klikanie we Flasha w Ubuntu 9.10
Nowe Ubuntu umożliwia nam skorzystanie z najnowszej wersji Flasha. Będziemy mieli okazje zapoznać się z takimi nowymi ficzerami jak migotanie obrazu uniemożliwiające oglądanie YouTube na pełnym ekranie czy niemożność kliknięcia w jakiś element wewnątrz Flasha (np. podczas ustawiania zakresu dat w Google Analytics). Adobe’a, firmę za Flasha odpowiedzialną oraz za to jak pracuje on pod Linuxem, pozostawiam Waszej ocenie – mnie skończył się na dzisiaj jad
Rozwiązanie drugiego z wyżej wymienionych problemów jest bardzo proste i znalazłem je tutaj. Ten wpis jest jedynie tłumaczeniem.
Gotowy?
* Naciśnij Alt+F2 i Enter
* gksudo gedit /usr/lib/nspluginwrapper/i386/linux/npviewer
* Dodaj następującą linię przed ostatnią linią tekstu
* export GDK_NATIVE_WINDOWS=1
* Zapisz.
* Zrestartuj aplikacje używające Flasha
Zawartość pliku ostatecznie powinna wyglądać tak:

Windows Vista? Zmniejszyć partycję i postawić Ubuntu
Ten tekst pisałem miesiąc temu, ale nie miałem od tamtego czasu sposobności aby go opublikować. Plan był prosty. Na świeżo wypakowanym notebooku Della była zainstalowana Vista Home Premium – na jednej partycji, zajmującej cały dysk. Zaplanowałem zmniejszenie partycji do minimum, a następnie pozostawienie jej na później (w dalszym zamyśle – na nigdy), na reszcie dysku instalując Linux Ubuntu. Po kilku pierwszych czynnościach, próbach wykonania czegokolwiek, lekko sfrustrowany, zacząłem pisać tekst, który bardzo szybko przybrał na sile i urósł do rozmiarów tego wpisu
Myślę, że produkt Microsoft Windows 7 zrecenzuję pod kątem wykonania podobnych czynności niebawem, ponieważ Microsoft dał mi prawo do darmowego upgrejdu Visty
Microsoft Windows Vista Home Premium
Świeży, preinstalowany system przez Della, zajmuje 30 GB. Windows XP z grami, pakietami Office i wieloma innymi aplikacjami zbieranymi przez lata, z tego co pamiętam, na partycji 25 GB miał jeszcze trochę miejsca. Ubuntu do swobodnej pracy, pomieści się na 10 GB i będzie miał jeszcze zapas. Ba, można go uruchomić nawet z 1 GB pendrive’a z persistent storage (tzw. trwały dysk – zapisywane dane pozostają obecne nawet po restarcie).
Pierwsze kliknięcia
Wybierając Komputer / Zarządzaj (zatwierdzając monit UAC), a tam Menadżer dysków – mamy możliwość zmniejszenia rozmiaru partycji. Tutaj zaskoczenie, minimalnym rozmiarem partycji systemowej (przy zajętości dysku 30 GB) okazuje się 150 GB. Cóż. Wybrałem ów minimalny rozmiar, zatwierdziłem zmiany, komputer przez chwilę się wytężał, aby ostatecznie pojawił się komunikat Odmowa dostępu. Ponowna próba dała ten sam rezultat.
Dalsze kliknięcia
Postanowiłem walczyć dalej. Znalazłem darmowe oprogramowanie do zmiany rozmiaru partycji – EASEUS Partition Master Home Edition – łudząco przypominający program Partition Magic czy GParted. Niestety. Tutaj również poległem. Jak się okazało, ów oprogramowanie w wersji darmowej jest dostępne jedynie na wersję 32-bitową systemu. Za 64-bitową należy już zapłacić. To że 64-bitowy system nie jest w stanie poradzić sobie z aplikacją 32-bitową uważam również za porażkę architektów tego bądź co bądź – komercyjnego systemu.
Zdalne wsparcie administracyjne w oparciu o RealVNC również nie jest możliwe o ile UAC jest włączony – kiedy tylko pojawia się monit UAC o autoryzację wykonania danej operacji, RealVNC jest rozłączane. Po ponownym połączeniu nie ma możliwości pracy na tym oknie poprzez RealVNC. Jest to oczywiście niesamowity sukces separacji, jak dla systemu, który był tworzony na bazie środowiska graficznego.
Ostatecznie zdecydowałem się na wykorzystaniu Ubuntu Live CD i GParted’a. Jaki będzie efekt dowiem się za 7 minut. Aktualizacja: Po ponownym restarcie Visty, pojawiło się Narzędzie do naprawy systemu podczas uruchamiania pokazujące komunkat „Trwa próba naprawienia…” – próba trwała godzinę – przez ten czas nie było nam dane dowiedzieć się czy proces ten coś robi, czy się zawiesił. Zadnych szczegółów. Nic. A jednak! Vista odniosła sukces i wstała! Przypominają mi się tutaj narzekania użytkowników Gnome’a pod Linuxem, że jest mało opcji itp. Z tego co pamiętam, a Gnome używam na codzień – jeśli w jakiejś aplikacji trwa dłużej wykonywana czynność – zawsze istnieje możliwość zobaczenia szczegółów. Panowie z Visty powinni spróbować zgapić to tak samo jak ten widget zegarka
Coś mnie tchnęło i spróbowałem zainstalować jeszcze VirtualBox‘a. Oczywiście pojawiło się kilka monitów UAC, tak jakby jeden nie wystarczał… Ostatecznie sam instalator zdecydował, że dalej nie zabrnie, mimo kolejnych autoryzacji i zażyczył sobie za pośrednictwem kolejnego monitu, uruchomienie instalatora na prawach administratora. W takim momencie wystarczy nacisnąć Naprawa instalacji i zrobione. Postęp jest. Kiedyś było dalej, dalej, dalej. Teraz trzeba coś przeczytać i klikać w większej ilości
miejsc.
Wrażenia okiem użytkownika Ubuntu
Opiszę jeszcze swoje wrażenia, jako człowieka pracującego na codzień na Linux Ubuntu. Szczerze współczuje użytkownikom Visty. Kilka na pozór łatwych czynności naprawdę mnie zmęczyły (fakt, były też zaawansowane, czyli takie które… właśnie ni stąd ni z owąd, pojawił się kolejny ekran autoryzacji UAC. Java się chce aktualizować… kontynuuj… czyli takie które mogą zainstalować wirusa w sterownikach urządzenia). Swoją drogą, takie wtrącenia są wkurzające, prawda?
Pod Linuxem Ubuntu wykorzystuje się sudo. Ma ono bardzo prostą właściwość włączoną domyślnie – jeśli trzeba wykonać jakąś czynność na uprawnieniach administratora – monit pojawia się raz. Jeśli w określonej ilości czasu miałaby nastąpić ponownie sytuacja z potrzebą uruchomienia danej czynności na administratorze, jest ona uruchamiana. Dopiero jeśli ten czas się skończy, użytkownik musi się ponownie zautoryzować. Na dodatek nie jakimś głupim kliknięciem, tylko podając hasło do swojego konta.
W tzw międzyczasie dowiedziałem się jeszcze, że Vista nie ma profili sprzętowych, czyli próba uruchomienia systemu za pomocą środowiska zwirtualizowanego na tym samym, fizycznym dysku twardym jest poważnym proszeniem się o kłopoty.
Jako, że moje dotychczasowe doświadczenia z Vistą opierały się o wsparcie telefoniczne dla jej użytkowników, głównie w kwestiach uruchomienia sieci (a w zasadzie ewentualnego aktywowania ustawień DHCP), miałem okazję doświadczyć już problemów ze stosem IPv6 w tym systemie. Wygląda na to, że we wczesnych, nie aktualizowanych Vistach, jeśli użytkownik ma aktywowane IPv6 na interfejsie, nie uzyska adresu IPv4 od serwera DHCP. Takich przypadków miałem już kilka, co dość mizernie świadczy o tym systemie operacyjnym. Stos IP jest jest podwaliną na której można budować bezpieczny system. Jeśli ów stos kuleje, bezpieczeństwo systemu nie jest już tak istotne.
Podsumowanie
Nie wiem jak Wy oceniacie ten system, ale dla mnie, kierunek rozwoju platformy Microsoftu jest lotem koszącym. Nie wiem czego można się spodziewać po Windows 7, ale z tego co widziałem, wiem, że czeka mnie więcej telefonów od zagubionych dusz, które nie potrafią doklikać się do ustawień połączeń sieciowych. Złożoność systemu powinna rosnąć, ale nie w ten sposób. Przejście powinno być płynne. Bez rewolucji. Skoro architekci Windowsów tyle natchnienia czerpią z graficznych środowisk Linuxowych, to powinni zainteresować się tym, czy złożoność interfejsu oraz ilość „pokręteł” jest dla użytkowników problemem czy błogosławieństwem. Historii na ten temat nie trudno znaleźć. Przykładowa – sam Linus Torvalds, który stworzył pierwszego kernela Linuxowego, nie raz miał okazję się już przesiadać między Gnome, KDE i spowrotem
Wyłączenie użytkownikowi MOTD na Ubuntu
Tematyka niniejszego wpisu jest, można powiedzieć wręcz banalna, ale myślę, że to trick warty poznania lub przypomnienia. Nie dotyczy tylko i wyłącznie dystrybucji Ubuntu, ale w zasadzie wszystkich Linuxów.
Jeśli logujesz się po ssh na inny komputer, wyświetlana jest zawartość Message Of The Day (/etc/motd). Jeśli nie chcesz tego widzieć, w swoim katalogu domowym wystarczy utworzyć plik o nazwie .hushlogin, wersja copy & paste:
cd touch .hushlogin
(polecenie cd bez parametrów to kolejny trick – sprawia, że zostajemy przeniesieni do naszego katalogu domowego)
Efekt
Zilustrowałem poniżej:
nme@desktop ~ $ ssh laptop Linux laptop 2.6.31-14-generic-pae #48-Ubuntu SMP Fri Oct 16 15:22:42 UTC 2009 i686 To access official Ubuntu documentation, please visit: http://help.ubuntu.com/ System information as of Fri Nov 6 20:56:41 CET 2009 System load: 0.16 Memory usage: 18% Processes: 155 Usage of /: 7.1% of 35.51GB Swap usage: 0% Users logged in: 1 Graph this data and manage this system at https://landscape.canonical.com/ Last login: Fri Nov 6 20:55:19 2009 from desktop.local nme@laptop ~ $ touch .hushlogin nme@laptop ~ $ logout Connection to laptop closed. nme@desktop ~ $ ssh laptop nme@laptop ~ $
Proste, aczkolwiek przydatne
Dwa komputery z Linuxem – jedna klawiatura i mysz
Czy kiedykolwiek zdarzyło Ci się pracować na dwóch komputerach – np. notebooku i komputerze stacjonarnym, albo dwóch stacjonarnych jednocześnie? Frustrujące uczucie, kiedy mylą się myszki, prawda? Jeśli oba komputery pracują pod Linuxem – jest na to sposób!

Ostatnio coraz częsciej pracuje na większej ilości komputerów jednocześnie. Zwykle jest to komputer stacjonarny i notebook, ale bywają też bardziej rozbudowane konfiguracje. W takich sytuacjach aż chce się mieć możliwość aby wyjechać myszką „za” ekran i „wjechać” na drugi, najechać na aplikację i coś wpisać za pomocą klawiatury, tej, z której korzystałem do pracy na pierwszej stacji roboczej. Da się to zrobić - rozwiązaniem tego problemu jest mała aplikacja o nazwie x2x.
Aplikacja x2x świetnie współpracuje z ssh. Mamy dzięki temu szyfrowane połączenie między oboma stacjami roboczymi i nie musimy się obawiać, że ktoś podsłucha co wpisujemy.
Aby korzystać z x2x, musimy go najpierw zainstalować. Robimy to na komputerze do którego chcemy się podłączyć, czyli – jeśli standardowo pracujemy na komputerze stacjonarnym, a chcemy mieć możliwość „wyjechania myszką” na notebooka, x2x musimy zainstalować na notebooku.
sudo aptitude install x2x
Kiedy mamy już zainstalowaną aplikację, możemy ją wykorzystać.
x2x w Ubuntu 9.04 i wcześniejszych
Jeśli notebook stoi po lewej stronie, jak na obrazku załączonym powyżej, musimy podać parametr -west. Mamy do dyspozycji również -north, -south i -east.
ssh -X notebook "x2x -west -to :0.0"
W tym momencie możemy już pracować na obu komputerach, korzystając z klawiatury i myszy z pierwszego z nich.
x2x w Ubuntu 9.10 Karmic Koala
Nowe X’y, nowy gdm – sprawy się nieco skomplikowały. Problem zaczął doskwierać również innym i został rozwiązany przez Roberta Jennigsa i Davida Boersma’ę. Aby cieszyć się z x2x w Karmic, możemy skorzystać z poniższego skryptu.
Musimy ustawić w nim następujące parametry:
- USER – nazwa użytkownika na którego logujemy się na zdalnej maszynie
- HOST – adres IP komputera lub jego nazwa w DNS lub /etc/hosts
- HOSTNAME – nazwa zdalnego komputera (taka sama jak zawartość /etc/hostname)
- SIDE – z której strony naszego podstawowego ekranu myszka może wyjechać
#!/bin/bash # # x2x Karmic problem solution based upon: # https://bugs.launchpad.net/ubuntu/+source/x2x/+bug/471726 # Many thanks to Robert Jennings and David Boersma! # Setup: USER=user # remote host username HOST=ip # remote host IP or name HOSTNAME=nazwa_hosta # remote /etc/hostname SIDE=west # north / south / west / east COMPRESSION="-C" # comment out for LAN # No need to change anything below: MERGE="xauth merge /var/run/gdm/auth-for-$USER*/database" LIST="xauth list" REMOVE="xauth remove $HOSTNAME/unix:0" X2X="x2x -$SIDE -to :0.0" #ssh -X $COMPRESSION $USER@$HOST "$MERGE; $LIST; $X2X; $REMOVE" #ssh -X $COMPRESSION $USER@$HOST "$LIST" ssh -X $COMPRESSION $USER@$HOST "$MERGE; $X2X; $REMOVE"
Ja już się uzależniłem, Wam również polecam!
Cisza na blogu
Kolega ostatnio zapytał, dlaczego na blogu zapanowała taka grobowa cisza.
Fakt, przez prawie półtorej miesiąca nic tu nie zamieściłem. Czynników które ten fakt spowodowały było kilka, m.in nowy rok akademicki który dla mnie wiąże się z nieco bardziej wytężoną pracą (korzystając z okazji pozdrawiam moich studentów i studentki
) czy wrednym przeziębieniem które męczyło mnie ponad dwa tygodnie.
Głównym czynnikiem który spowodował zastój na blogu była jednak zmiana pracy. Poznaje teraz nowe środowisko, zarówno pod względem społecznym jak i systemowym
Nie mam w zasadzie powodów do narzekań – jest dobrze, choć niestety blog trochę ucierpiał, bo zmalała zarówno liczba subskrybentów jak również ilość dziennych odwiedzin.
Mam jednak nadzieję, jako, że wspomniane wcześniej środowisko systemowe jest nieco odmienne, że będę miał niebawem więcej ciekawych zagadnień o których będę mógł napisać. Na tą chwilę więcej czytam niż piszę, ale sytuacja niebawem się odmieni. Dlatego dziewięciu wiernych słuchaczy nie powinno być zawiedzonych
Jedno jest pewne – nie zamierzam tego bloga zarzucić.
Przespałem, jeśli o wpisy chodzi, kilka ważnych wydarzeń – takich m.in jak wyjście nowego Ubuntu 9.10 Karmic czy betę VirtualBox 3.1.0, ale myślę, że wszystko jest do odrobienia
Tych którzy wcześniej ten blog subskrybowali, a teraz przestali, jeśli będą mieli okazję ten tekst przeczytać – zachęcam do zastosowania prostej zasady – nigdy nie kasujcie subskrypcji ze swoich czytników feedów. Jeśli na jakimś blogu jest zastój, lub wpisy pojawiają się rzadziej – warto skatalogować je jako „Martwe” czy „Rzadkie”, bo kto wie, może niechący umkną Wam rzeczy o których chcielibyście wiedzieć, a dzięki takiemu zabiegowi od razu będziecie widzieli nową aktywność.
Na koniec tego krótkiego wpisu mała dygresja – Media zapowiadają, że za dwa tygodnie nastąpi szczyt zachorowań na grypę. Pocieszające jest to, że na nową, AH1N1 choruje w kraju w przybliżeniu 600 osób. Dla kraju liczącego sobie 38 mln obywateli, ta liczba brzmi jak szansa na wygranie w Lotto… czego w przeciwieństwie do grypy, Wam życzę!



