tisdag 15 september 2009

SSH och lite säkerhet

Det kan ju vara bra att rigga upp lite skydd om man har ssh-server igång.

Fick ett par länkar som går igenom det:

http://blog.dathomir.se/2009/02/konfigurera-ssh-for-okad-sakerhet.html


och

http://blog.dathomir.se/2009/05/sa-har-skyddar-du-ssh-mot.html


Väldigt användbart.

Ett bra tips till en början kan vara att gå in i sshd_config och kryssa bort root-inlogg.

måndag 14 september 2009

C-program i Nano/terminalen

Satt och kollade igenom lite Harvard Computer Science från deras online lectures.
Rätt bra grejer, speciellt eftersom det fyller upp en del luckor jag känner att jag har, i grunderna och även sånt jag kunde för 10 år sen men nu förträngt eller glömt :)
så det var kul att se att han plötsligt börjar programmera i nano, och kompilera och exekvera i terminalen.
Vad jag minns har jag faktiskt aldrig gjort det på det sättet (antar att jag jobbade i MS-DOS...) men lite kom jag iaf ihåg, include stdio.h osv osv...

Så när man skriver ett C-program i nano så bör man antagligen (nu är jag ju färsk så ursäkta ev missar...) börja med att döpa filen lämpligen genom "nano filnamn.c" så att man inte klantar sig och glömmer .c efteråt. Kanske lite enklare att hålla reda på filerna sedan, speciellt om man kompilerar dem osv.

När man sedan skrivit sin kod, typ:

/* ett program i C, skrivet 2009 whatever */
#include < stdio.h >

int
main(int argc, char * argv[])
{
printf("hello, world\n");
}
[HÄR SLUTAR NANO]

Ok det där var alltså ett C-program i form av "hello world".
Observera backslash-n som byter till ny rad, så slipper man markören direkt efter.

Det man gör nu (om man har gcc eller cc som jag har på mac) är att man kompilerar filen.
Filen bör nu heta hello.c (kolla med ls) och sedan skriver man
cc hello.c
och då bör det dyka upp en kompilerad fil (om du inte klantat dig i koden och får fel) som heter
a.out
Testa med ls -l att den finns, och observera att den är +x för alla. (körbar).

Förslagsvis döper man nu om denna till "helloworld.pgm" eller lämpligt annat namn som inte är a.out.

Sedan är det bara att testa köra igång den genom att skriva
./helloworld.pgm
då ska man se en rad
hello world
och sedan kommer kommandoraden tillbaka på nästa rad (pga backslash-n).
Händer nåt annat eller ingenting så är det nåt som är fel i koden, kompileringen eller ditt kommando. Alternativt att du inte har rätt att exekvera filen.

Spännande, eller hur? Nu kan jag programmera i C igen :)

fredag 4 september 2009

Onsdag

UTSKRIFT

Windows
UNIX - koppla ihop ett program med en skrivare
utseendet är upp till programmet

lpr /lpd

nästan alla skrivare pratar "lpr"-protokollet

IPP - Internet Printing Protocol / CUPS supportar det

JetDirect (kan kallas AppSocket)
är ett "dumt" protokoll - ingen intelligens

3 sorters skrivare
radskrivare
sidskrivare
specialskrivare
- etiketter
- plottrar
- kartonger, osv

LPD
ofta ej standard
bra för specialskrivare

CUPS
modernt
sidskrivarorienterat
WYSIWYG

/etc/lpd.conf
BSD lpd (traditionell, stenålder)
lpd ng (modern, begränsat sidstöd)

vill man ha bannersida kan man ställa in det med lpd

SNMP
Simple Network Management Protocol
används för att övervaka och hantera datornätverk baserade på TCP/IP.


Kommandon, man -k lp
lpr
lprm
lpq

enscript
ps2ascii
pdf2ps
dvi2ps

dessa genererar dvi-filer
TeX
Latex


GÖRA "PDF-PRINTER" (cups-pdf)
su -
rpm -p cups-pdf
*installerar*
(yum -y install cups-pdf)

finns nu som en "idle" skrivare, åtkomlig över nätverket.

tisdag 1 september 2009

tisdag

Tisdag

PAKETHANTERING
innehåller filer
beroendeinformation
konfigurationsskript
databas över installerad mjukvara

det finns (i princip)
4 sorters pakethanterare
- enkel / ingen hantering : slackware
- källkodsbaserad - kompilerar själv : Gentoo
- rpm (redhat packet manager): Red Hat, CentOS, Suse, Fedora, Mandriva
- deb (dpkg): Debian, Ubuntu , Nexenta

RPM
rpm -i paket

i vilket paket finns faciliteten?
rpm --whatprovides facilitet

rpm -qa (listar alla paket på systemet)
rpmquery

rpm --verify paket

YUM (Yellowdog Updater Modified)
yum install program (till ex emacs, firefox osv, tittar i paketlistan)

i företagsmiljö får man INTE
- bygga kärnor själva
- lägga på paket som inte är officiellt supportade

DEBIAN
dpkg
dpkg -i paket (installera)
dpkg -L paket (ger alla filer som har med ett paket att göra)
dpkg -l (lista alla paket)
dpkg -S (search)

dselect
aptitude
apt-get install (vad som ska installeras)
synaptic
kynaptic


ALIEN
alien tar ett främmande paket och gör om det för det system man har
RPM - DEB , DEB - RPM


SOURCE CODE
packa upp med tar
./configure (klagar på vad man inte har, får ta ner paket)
make
make install

Mer FTP och filetransfers
WGET - wget laddar ner, vanligt förekommande.
CURL - laddar även upp
AXEL
LFTP - bör man titta på, "vanlig"
YAFC

ftp.apa.net/ls.txt (om den finns så innehåller det en lista)

exempel på nedladdad "kalkylatorprogram"
tar xzof bc-1.06.tar.gz (OBS o för rättigheter)
cd bc
./configure
make
make install


FILSYSTEM / MOUNT

mount (montera ett filsystem)

/etc/fstab (definitioner för montering)
/etc/mtab (systemfil "databas" över monterade filsystem)

mount /dev/sda5 /apa (standardsyntaxen för mount)
mount -o loop -t iso9660 foo.iso /apa
mount -o ro /apa (kollar i fstab efter apa)

FSTAB
# kommentar
/dev/cdrom/
typ (till ex iso9660)
mountpath /cdrom
LABEL=namn
GUID= (siffror) (64bitarstal?)


umount /dev/hda3
umount /mnt

VARNING
mount /dev/sda3 /foo
mount /dev/sda3 /foo/bar (monterat på sig själv!!! som raden ovan)


För att montera om ett filsystem som read only (fastlåst av program till ex)
mount -o remount -oro /mnt
testa unmount sedan

NFS
mac, BSD, unix
med NFS exporterar man ett filträd
(NFS-server finns i linuxkärnan)

mount -t nfs server1:/banan/apa /apa
man måste lista vilka som får ansluta och använda filsystemet
/etc/hosts.allow
/etc/hosts.deny

SMB (server message block) /CIFS (Common Internet File System)
Samba

smbclient //server1/foo -U user

smb username=namn //server1/foo /mnt


DISKETTER
/dev/fd0 hd1720
/dev/fd0

fdformat (för att formatera)
mtools (ett verktygspaket)
mdiv
mcopy
mmove
mtype

definiera drives
/etc/mtools
mdiv a:

måndag

SHELL SCRIPT

#!/bin/bash

om man bara har läsbehörighet
bash foo
bash < foo
cat foo | bash

Ett script:
du -sk *
ls -l


if
for
while

if ls apa
then
cp apa banan
else
touch banan/apa
fi

if ls apa;then; cp apa banan; else touch banan/apa; fi

ls apa && cp apa banan

&& - gör nästa om första gick bra
& - kör det första i bakgrunden

"testcase" - (man test /testcase)

if [-t apa]

-f vanlig fil
-d katalog
-x körbar fil

while ls -l apa
do
sleep 30
done

om den inte hittar filen så sleepar den

tar varje apa och utför något.
for apa in *
do
cp $apa /tmp
done


for i in /home/indata *
do
gzip -9 "$i" (kan vara bra med " " runt denna pga mellanslag)
if df | grep /utdata
then
mv "$i.gz" /utdata
else
mv "$i.gz" /home/klara
fi
done


foo.sh (kallar vi filen)

#!/bin/bash

foo.sh &
ls
foo.sh &
exit 0
exit 0 (extra exit om man har klantat sig)


$0 (ger programnamnet)
$1 (första parameter)
$2 (andra param)
$3 (tredje param)
$n (n:te param)

echo
echo apa
echo $apa
echo "$apa"

\n new line
\t
\l
\013
\x10
\\
\f form feed (matar nästa ark - till ex kassaterminaler och industri)

dc (desk calculator)
bc

$((57 - 31))
$((57 + $apa))

[ 57 - eq $apa ] (blir "sant" om apa är 57)

-eq - equal
-ne - not equal
-le - less than/equal
-ge - greater/equal

$apa = " 57 "
är inte samma sak som
§banan = "57"
pga mellanslagen, jämför strängar


PROCESS

kan allokera minne
allokera resurser (filer, sockets, semaforer mm)
en process har status
prioritet -nice

kill (skickar bara en signal till en process, dödar inte)
kill -9 proc-nr (signalhanteraren för signalen 9 ska "fint" döda proc, om den vill)

sighup ( -1 terminalen dör)
sigint (sluta vid tillfälle)
sigkill (-9 döda processen fint)

nice (defaultparameter -20)
nice -20 gzip (parametrar) (ger gzip lite mindre resurser än normalt)
root kan ge positiva nice-värden - processen tar mer resurser från andra.

ps, top, jobs (processer,"job control" titta på vad som körs)
ps -fe (ger så komplett lista som möjligt)
ps aux (komplett lista på BSD)

killall [signal] [namn]

screen
dtach (också liknande screen, lite annorlunda)
ctrl a 0...9
ctrl a d (detach)
ctrl a c (create)
ctrl a n (next)
ctrl a p (previous)
ctrl a k (kill)


KOMMUNIKATION - dator-till-dator

write user tty
writeall

IRC - Internet Relay Chat
/server (namn/nummer)
/nick (namn)
/join (#kanal)

MSN
Jabber
AIM
ICQ
Skype

Pidgin (fd GAIM)
KIT

Epost
Var finns inlådan? (inbox)
lokal hantering?

TEXTBASERADE
elm
pine
mitt
mail

thunderbird
evolution
Kmail


SMTP
Lokala alternativ:
- mbox
- mdir (en katalog per användare)

Nätverk:
- POP3
- IMAP

sendmail
postfix



SSH
Stark autentisering via certifikat
Krypterad överföring
både klient och server får mha certifikat verifiera att de är vem de utgör sig att vara
Server: /etc/ssh
innehåller servernycklar
sshd_config
ssh_host_key
.bsh kan behöva ses över vid konfigurering av uppkoppling

ssh -l user host
ssh user@host

tar cf- /foo/bar | ssh user@host tar xf-

scp -r /foo/bar user@host (då blir user@host ägare)

sftp

lftp

PreSharedKeys
görs med
ssh-keygen

ssh-keygen -t rsa1 (kompatibla med äldre system)
ssh-keygen -t rsa
ssh-keygen -t dsa

/ssh/authorized.keys

ssh-agent
man autentiserar mot agenten som sedan tar hand om kommunikationen m klient.


RSH - RemoteShell
kan finnas i Windows
program, login, VPN mm

Telnet
fjärrsession


FTP
filöverföring


TFTP (+BootP)

DHCP

PuTTy