Naprej Nazaj Vsebina

3. Podrobni nasveti

3.1 Deljenje izmenjalnih particij med Linuxom in Windows. Tony Acero, ace3@midway.uchicago.edu

  1. Sformatirajte particijo kot particijo za DOS in na njej ustvarite izmenjalno datoteko za Windows, vendar operacijskega sistema Windows še ne zaženite (naj izmenjalna datoteka zaenkrat ostane še prazna, da jo je možno dobro stisniti).
  2. Ponovno zaženite računalnik v Linuxu in shranite particijo v datoteko. Npr. če je bila to particija /dev/hda8:
    dd if=/dev/hda8 of=/etc/dosswap
    
  3. Stisnite izmenjalno datoteko za DOS; ker je navidezno prazna, jo je mogoče zelo dobro stisniti:
    gzip -9 /etc/dosswap
    
  4. Da bi pripravili in namestili izmenjalno datoteko v Linuxu, dodajte v datoteko /etc/rc naslednje: XXXXX je število blokov v navidezni particiji
    mkswap /dev/hda8 XXXXX
    swapon -av
    
    Prepričajte se, da ste v datoteko /etc/fstab dodali vnos za izmenjalno particijo.

  5. V primeru da vaš osnovni/zagonski paket podpira /etc/brc ali /sbin/brc, v datoteko /etc/brc dodajte naslednje (drugače to opravite ročno, ko želite računalnik zagnati v DOSu|OS/2 in poskušate izmenjalno particijo pretvoriti nazaj v različico za dos/windows):
    swapoff -av
    zcat /etc/dosswap.gz | dd of=/dev/hda8 bs=1k count=100
    
    # Ne pozabite, da se na ta način zapiše nazaj na particijo samo prvih 100 blokov. Empirično sem ugotovil, da to zadošča.
>>Kakšne so prednosti in pomanjkljivosti takšnega početja?

Prednost: prihranite precejšno količino prostora na disku. Pomanjkljivost: Če 5. korak ni avtomatiziran, boste morali to opraviti ročno, kar bo upočasnilo proces ponovnega zagona za nanosekundo :-)

3.2 Obnavljanje zbrisanih datotek. Michael Hamilton, michael@actrix.gen.nz

Tu je trik, ki sem ga morali uporabiti že nekajkrat.

Obnovitev zbrisane tekstovne datoteke obupanega uporabnika.

Če po nesreči odstranite tekstovno datoteko, npr. neko elektronsko sporočilo ali rezultate nočne programerske seanse, ni nujno, da je vse izgubljeno. Če je datoteka bila na disku in na njem ostala več kot 30 sekund, je njena vsebina mogoče še vedno na particiji diska.

Vsebino datoteke na particiji diska lahko poiščete s pomočjo ukaza grep.

Na primer, pred kratkim sem zbrisal del elektronskega sporočila. Takoj sem prekinil vse operacije, ki bi particijo lahko spremenile: v tem primeru sem se samo izognil shranjevanju datotek, prevajanju, itd. V drugih primerih sem sistem moral celo privesti na način enega samega uporabnika in odklopiti datotečni sistem.

Na particiji diska sem potem uporabil ukaz egrep: v mojem primeru je bilo elektronsko sporočilo v imeniku /usr/local/hime/michael. Iz izhoda ukaza df sem lahko ugotovil, da je ta na particiji /dev/hdb5:

sputnik3:~ % df
Filesystem         1024-blocks  Used Available Capacity   Mounted on
/dev/hda3              18621    9759     7901     55%   /
/dev/hdb3             308852  258443    34458     88%   /usr
/dev/hdb5             466896  407062    35720     92%   /usr/local

sputnik3:~ % su
Password:
[root@sputnik3 michael]# egrep -50 'ftp.+COL' /dev/hdb5 > /tmp/x
Kadar delam s particijami diska, sem zelo previden. Torej sem si vzel odmor in se pred potrditvijo prepričal, da res razumem pomen ukaza. V tem primeru je elektronsko sporočilo vsebovalo besedo 'ftp', ki ji je sledil tekst in na koncu še beseda 'COL'. Sporočilo je bilo dolgo okrog 20 vrstic, torej sem uporabil 50, da bi dobil vse vrstice okrog izraza. Včasih sem uporabljal tudi 3000 in s tem zagotovil, da sem dobil nazaj vse vrstice izvorne kode. Rezultat sem iz ukaza egrep usmeril na drugo particijo diska in s tem preprečil, da bi se sporočilo, ki ga iščem, prepisalo.

Izhod sem preiskal z uporabo ukaza strings:

strings /tmp/x | less
in seveda našel elektronsko sporočilo.

Ta metoda ni zanesljiva. Mogoče je bilo nekaj, ali pa celoten prostor na disku, ponovno uporabljeno.

Ta zvijača je verjetno uporabna samo na sistemih z enim uporabnikom. Na sistemih z več uporabniki z visoko dejavnostjo diskov se je mogoče prostor na disku, ki ste ga sprostili, ponovno porabil. Prav tako večina izmed nas ne more kar tako preprečiti uporabe računalnika ostalim uporabnikom, kadar želimo obnoviti neko datoteko.

Na domačem sistemu me je ta zvijača rešila v približno treh primerih v zadnjih nekaj letih po navadi takrat, ko sem po pomoti zavrgel rezultate celodnevnega dela: če moje delo preživi do neke točke, kjer imam občutek, da sem naredil pomemben napredek, to delo shranim na disketo in te zvijače sploh ne uporabljam pogosto.

3.3 Kako uporabljati nespremenljive oznake. Jim Dennis, jadestar@rahul.net

Uporaba nespremenljivih oznak

Takoj po tem, ko boste namestili in nastavili vaš sistem, preglejte datoteke /bin/sbin, /usr/bin, /usr/sbin, /usr/lib (in še nekatere druge običajne osumljence) in brez predsodkov uporabite ukaz chattr +i. To vrstico dodajte tudi v datoteke jedra v korenskem imeniku. Naredite nov imenik 'mkdir /etc/.dist/' in prekopirajte vsebino imenika /etc (to naredim v dveh korakih z uporabo /tmp/etcdist.tar in se s tem izognem podvajanju) v ta novi imenik. (Lahko bi tudi ustvarili imenik /etc/.dist.tar.gz) -- in ga označili kot nespremenljivega.

Vzrok za vse to delo je zmanjšati škodo, ki bi jo lahko naredili, kadar boste prijavljeni kot korenski uporabnik. Na ta način ne boste mogli prepisati datotek z napačnim preusmeritvenim operatorjem in presledkom v ukazu 'rm -fr' (še vedno lahko naredite veliko škodo sistema ne boste mogli poškodovati z nepravilno postavljenim vašim podatkom ampak vsaj vaše knjižnice in binarne datoteke bodo bolj zaščitene).

S tem boste prav tako onemogočili ali vsaj otežili uporabo številnih varnostnih in preklicnih storitev (ker večina temelji na prepisovanju datotek med izvajanjem programa SUID, ki *ne nudi poljubnih ukazov lupine*).

Edina neprijetnost se bo pojavila pri grajenju in izvajanju ukaza "make install" na različnih vrstah sistemskih binarnih datotek. Po drugi strani pa boste s tem preprečili, da bi 'make install' prepisal datoteke. Kadar pozabite prebrati Makefile in chattr -i, datoteke, ki bodo prepisane (in imenike, katerim želite datoteke dodati) -- in se ukaz make ne izvede, samo uporabite ukaz chattr in ga ponovno zaženite. Izkoristite lahko tudi priložnost in prestavite stare binarne datoteke, knjižnice oz. kar koli je že v imeniku .old/, jih preimenujete, stisnete ali počnete z njimi kar pač želite.

3.4 Nasveti, kam dati nove stvari. Jim Dennis, jadestar@rahul.net

Vse nove stvari se začnejo pod /usr/local! Ali v /usr/local/'hostname'. Če je vaša distribucija ena tistih, ki pusti imenik /usr/local prazen, tvorite svoje imenike /usr/local/src, /usr/local/bin, itd. in jih uporabljajte. V primeru da vaša distribucija v drevesno strukturo imenika /usr/local shrani stvari, boste verjetno uporabili ukaz 'mkdir /usr/local/'hostname'' in mu podelili 'wheel' group +w (prav tako jih naredim SUID in SGID in s tem zagotovim, da lahko vsak član skupine wheel upravlja samo s svojimi datotekami in da vse ustvarjene datoteke pripadajo wheel skupini).

Disciplinirajte se in nove pakete *Vedno! Vedno! Vedno!* shranite v /usr/local/src/.from/$KJERKOLI_SEM_JIH_DOBIL/ (za .tar oz. katere koli datoteke) in jih zgradite v imeniku /usr/local/src (ali /$HOSTNAME/src). Prepričajte se, da se namesti pod lokalno ureditev. Če je paket *nujno potrebno* namestiti v /bin, /usr/bin ali kjer koli drugje podajte symlink od lokalne ureditve do vsakega posameznega elementa.

Vzrok za to -- čeprav je več dela -- je pomoč pri osamitvi tistih stvari, za katere je potrebno narediti varnostne kopije, jih obnoviti ali ponovno namestiti pri opravilu popolne ponovne namestitve z distribucijskega medija (običajno s CD-ja). Z uporabo imenika /usr/local/.from vzdržujete tudi dnevnik z informacijami, kje ste izvorno kodo dobili -- kar vam je v pomoč pri iskanju novih različic -- je pa nujno potreben, kadar nadzorujete sezname objav glede varnosti.

Eden mojih domačih sistemov (s katerega kličem) je bil sestavljen preden sem začel uporabljati takšen sistem. Še vedno ne *poznam* vsega, po čemer se razlikuje od po namestitvi pripravljenega sistema. To se mi dogaja kljub temu, da zelo malo delam s konfiguracijo domačega sistema in da sem *edina* oseba, ki ga uporablja.

V primerjavi s tem so vsi sistemi, ki sem jih nastavil v službi (ko so mi zaupali vlogo sistemskega administratorja), nastavljeni na ta način -- in čeprav so jih upravljali različni ljudje in so bili velikokrat nadgrajeni, pa vendar dobro vem kateri elementi so bili dodani *naknadno* po začetni namestitvi in nastavitvi.

3.5 Kako spremeniti vse velike črke v imenih datotek v majhne črke. Justin Dossey, dossey@ou.edu

V razdelku 2c nasvetov 12. izdaje sem opazil kar nekaj prezahtevnih ali nepotrebnih postopkov. Ker jih je več, vam jih pošiljam:

#!/bin/sh
# lowerit
# spremeni vse velike črke v imenih datotek v trenutnem imeniku v majhne črke
# uporabna samo za navadne datoteke--ne spreminja imen imenikov
# preden prepiše obstoječo datoteko, boste morali to potrditi
for x in `ls`
 do
 if [ ! -f $x ]; then
   continue
   fi
 lc=`echo $x  | tr '[A-Z]' '[a-z]'`
 if [ $lc != $x ]; then
   mv -i $x $lc
 fi
 done
Uh, to je pa dolga skripta. Za izvajanje tega opravila jaz ne bi pisal skripte. Namesto tega bi v ukazni vrstici uporabil ukaz:
for i in * ; do [ -f $i ] && mv -i $i `echo $i | tr '[A-Z]' '[a-z]'`; done;
Avtor pravi, da je skripto zapisal v tej obliki zaradi večje razumljivosti (glej spodaj).

V naslednjem primeru, o dodajanju in odstranjevanju uporabnikov, Geoff dela dokaj dobro, razen v zadnjem koraku. Ponoven zagon? Resno upam, da avtor računalnika ne zaganja ponovno, vedno kadar odstrani uporabnika. Opraviti morate samo prva dva koraka. Kakšne procese pa naj bi uporabnik sploh uporabljal? Mogoče irc bot? Postopek ubijete z enostavnim ukazom

kill -9 `ps -aux |grep ^<username> |tr -s " " |cut -d " " -f2`
Primer; uporabniško ime je foo
kill -9 `ps -aux |grep ^foo |tr -s " " |cut -d " " -f2`
S tem je delo opravljeno; gremo naprej na pozabljeno korensko geslo.

Rešitev, ki je navedena v glasilu, je najbolj univerzalna, ne pa tudi najenostavnejša. Z LILO in loadlin lahko vsak poda zagonski parameter "single" in računalnik se neposredno zažene v privzeti lupini brez poziva za prijavo in geslo. V tem primeru lahko pred vnosom "init 3" za zagon več-uporabniškega načina, vsakdo spremeni ali zbriše katero koli geslo. Število ponovnih zagonov v tem primeru: 1, število ponovnih zagonov v drugih primerih: 2

Justin Dossey

3.6 Kako nadgraditi sendmail. Paul Anderson, paul@geekyl.ebtech.net

Začeli bomo z neobdelano, čisto izvorno kodo. Najprej si priskrbite izvorno kodo Sendmaila. Zajel sem verzijo 8.9.0, kar pa je zelo zahtevno opravilo, kot boste ugotovili. Kodo sem dobil na ftp://ftp.sendmail.org/pub/sendmail/sendmail.8.9.0.tar.gz.

Dolga je okrog 1 MB in glede na to, da uporabljam 8.7.6, mislim, da je vredna truda. Če bo to delovalo, boste nedvomno izvedeli, saj sicer ne bom mogel izdati nove HOWTO verzije :)

Ko ste kodo prenesli, jo razpakirajte. V trenutnem imeniku bom ustvaril imenik z imenom sendmail-8.9.0. Premaknite se v ta imenik ter preberite datoteki README in RELESE_NOTES (presenečeni boste nad opravljenimi nadgraditvami). Premaknite se sedaj v src. V tem imeniku boste opravili večino dela.

Kratko sporočilo: Sendmail je kratek, zelo uporaben, dobro napisan program. Binarna datoteka se na računalniku 5x86 133 z 32 MB RAM-a prevede v manj kot 5 minutah! Celotno prevajanje in namestitev (brez nastavitev) traja manj kot 15 minut!

Običajno na mojem sistemu ne zaganjam BIND, zaradi tega sem našel naslednje vrstice:

# ifndef NAMED_BIND
#  define NAMED_BIND    1     /* uporabi Berkeleyski internetni strežnik */
# endif
in spremenil 1 v 0:
# ifndef NAMED_BIND
#  define NAMED_BIND    0     /* uporabi Berkeleyski internetni strežnik */
# endif
Pri distribuciji Debian 1.3.1 se db.h glede na privzeto vrednost namesti v /usr/include/db, namesto v /usr/include, kjer jo sendmail poskuša najti. Pojdite v imenike src, mailstats, makemap, praliases in smrsh in tam izvedite naslednji ukaz:
./Build -I/usr/include/db
Ko boste s tem gotovi, cd .. in vnesite make install. Tako! Program sendmail različice 8.9.0 naj bi bil sedaj nameščen! V tem primeru sem predpostavil, da ste prej že opravili originalno nastavitev. Da bi na mojem sistemu vse potekalo gladko, ker gostim brezplačne poštne sezname za ljudi, ki uporabljajo majordomo, sem moral na začetek datoteke /etc/sendmail.cf dodati:
O DontBlameSendmail=forwardfileinunsafedirpath, forwardfileinunsafedirpathsafe
Dandanes je sendmail zelo občutljiv na dovoljenja imenikov in datotek ter bo javljal napake o imenikih in datotekah v privzetih imenih ali datotekah .forward, ki jih lahko spreminjajo skupine ali so prosto dostopne. Ker ni dobro odpraviti te občutljivosti, uporabljam v konzoli samo način enega uporabnika in se mi je zdelo, da je v redu tudi, če obstaja ta majhna varnostna luknja. YMMV

3.7 Nekaj nasvetov za nove sistemske administratorje, Jim Dennis, jadestar@rahul.net

Ustvarite in vzdržujte /README.'hostname' in/ali /etc/README.'hostname' [oz. če je le možno /usr/local/etc/README.'hostname' - Vzdrževalec.]

Od prvega dne upravljanja dalje sistem zapisuje stvari v omrežni dnevnik. Mogoče boste v root-ov /bash_logout vnesli vrstico "vi /README.$(ime gostitelja)". To lahko pravite tudi tako, da napišete skripto za su ali sudo, ki počne nekaj podobnega:

function exit \
        { unset exit; exit; \
          cat ~/tmp/session.$(date +%y%m%d) \
          >> /README.$(hostname) && \
          vi /README.$(hostname)
          }
script -a ~/tmp/session.$(date +%y%m%d)
/bin/su.org -
(Dnevnik ustvarite s pomočjo ukaza typescript. Prav tako ustvarite funkcijo, ki bo avtomatizirala dopolnjevala in posodabljala dnevnik.)

Priznati moram, da te avtomatizacije nisem vgradil do sedaj sem se zanašal na samodisciplino. Kakor koli že, s to zamislijo sem se igral (naredil sem celo prototip skripte in funkcije lupine, kot lahko vidite.) Nekaj, kar me pri tem moti, je ukaz 'script' sam. Mislim, da bom moral zajeti izvore in dodati nekaj parametrov ukazne vrstice (za prekinitev/zaustavitev shranjevanja skript iz ukazne vrstice), preden bom začel uporabljati ta način.

Moj zadnji nasvet (v tem trenutku):

Korenska pot mora biti sestavljena iz 'PATH= /bin'

To je to. Nič drugega v korenski poti. Za vse, kar počne korenski uporabnik, poskrbi symlink iz /bin, privzeto ime ali funkcija lupine, oziroma je skripta ali binarna verzija v /bin ali pa je izpisana z eksplicitno potjo.

S tem se vsi, ki se prijavljajo kot korenski uporabnik, zavedajo (včasih na zelo boleč način), kako zaupajo binarnim verzijam. Pameten sistemski administrator z več uporabniki bo redno pregledoval datoteke /bin in /.*history, da bi s tem našel vzorce in zančne napake.

Zares dobro motivirani sistemski administratorji bodo poiskali opravila, ki jih je mogoče avtomatizirati, mesta, kjer je možno vnesti logična preverjanja in opravila (zagon urejevalnikov, MTA in druge obsežne interaktivne programe, z izpopolnjenimi lastnostmi skript, ki jih je mogoče vnašati v prosojne ali podatkovne datoteke kot je neslavni vi ./.exrc in emacs ./.emacs in celo bolj zahrbten $EXINIT in vgrajeni makri v glavi/nogi), ki jih je potrebno opravljati brez korenskih privilegijev. Seveda je takšne vrste ukazov mogoče zaganjati s:

cp $data $some_users_home/tmp
su -c $origcommand $whatever_switches
cp $some_users_home/tmp $data
(kjer so specifikacije odvisne od ukaza).

Večina teh zadnjih varnostnih ukrepov prenese na domačo delovno postajo ali postajo z enim samim uporabnikom so pa zelo dober način za upravljanje večjega števila uporabnikov še posebej javnosti izpostavljeni sistemi (kot tisti pri netcom-u.)

3.8 Kako nastaviti xdm-ovega izbiralca za izbiro gostitelja. Arrigo Triulzi, a.triulzi@ic.ac.uk

  1. Uredite datoteko, ki zažene xdm (najverjetneje je to datoteka /etc/rc/rc.6 ali /etc/rc.local), tako da bo v razdelku za zagon xdm vsebovala naslednje vrstice:
    /usr/bin/X11/xdm
    exec /usr/bin/X11/X -indirect hostname
    
  2. Uredite datoteko /usr/lib/X11/xdm/Xservers in odstranite znak za komentar v vrstici, ki zažene strežnik na lokalnem računalniku (npr. z začetnim nizom 0:)
  3. Ponovno zaženite računalnik in delo je opravljeno.
To sem dodal zato, ker sem ga hotel nastaviti tudi za svojo podmrežo, pa sem za odpravo vseh problemov potreboval skoraj en teden.

Opozorilo: s starimi distribucijami SLS (1.1.1) lahko po vrstici za klic xdm izpustite -nodaemon: to NE deluje pri kasnejših izdajah.


Naprej Nazaj Vsebina