SSH

SSH login

Npr. da imamo neki server na nekoj javnoj IP adresi. Na njemu imamo root korisnika za kog smo omogucili prijavljivanje sa ssh-om. Napravi li smo novog korisnika tux i sad hocemo isto da uradimo:

useradd -m tux  # -m: creates home directory
passwd tux

# Na lokalnoj masini javni kljuc se pravi kao:
ssh-keygen -t rsa   # moguce je dodati jos opcija
ssh-copy-id root@<ip-addr>
ssh root@<ip-addr>

# -n: dry run, to see what it would do
ssh-copy-id tux@<ip_addr>  

U slučaju da se poslednja ne izvrši, možemo manuelno da dodamo kjuč, prvo kopiramo javni ključ sa lokalne mašine:

cat ~/.ssh/id_rsa.pub
ssh root@<ip-addr>
su - tux
mkdir -p ~/.ssh
echo "<pub-key>" >> ~/.ssh/authorized_keys

# Potrebno je postaviti odg dozvole
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
# Sad bi trebalo da radi
ssh tux@<ip-addr>

U slučaju da ne radi, potreno je proveriti konfiguraciju u /etc/ssh/sshd_config:

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

sudo systemctl restart sshd
ssh tux@<ip-addr>

NAPOMENA: Dobra je praksa da se onemogući pristup root korisniku!

# To se radi u datoteci /etc/ssh/sshd_config
PermitRootLogin yes
sudo systemctl restart sshd

Limiting access to SSHD from specific hosts

Dve datoteke postoje za to /etc/hosts.allow i /etc/hosts.deny. Sistem proverava njih kad korisnik pristupa serveru. Prvi fajl je značajniji. Primer sshd: <ip-addr>

SSH and PassCodes


Korisnici

Postoje dva programa za dodavanje korisnika, to su useradd i adduser stim što je druga obično simbolički link ka prvoj komandi. Kada se napravi novi korisnik on se dodaje u /etc/passwd datoteku. Izgled svakog polja je:

name:password:UID:GID:GECOS(COMMENT):directory:shell

Komanda:

useradd -m -c "Petar Petrovic" petar

ima kao rezultat sledeći red u passwd datoteci: petar:x:1003:1003:Petar Petrovic:/home/petar:/bin/bash

Kada se doda novi korisnik potrebno mu je dodeliti i šifru kako bi mogao da se uloguje na sistem: passwd petar. Lozinka moze da se doda kada se pravi nalog: useradd petar -p sifra, NE PREPORUČUJE SE, vidi man 8 useradd. Šifra se čuva u /etc/shadow datoteci. Ako korisnik nema šifru onda će stajati !! ili ! u toj datoteci. Opcija -m je jako bitna jer kreira direktorijum za korisnika!

Korisne opcije --uid UID, --gid GID, -m.

U nekim slučajevima će dodeliti /bin/sh kao shell, pa neće raditi . .bashrc, zbog toga je najbolje eksplicitno navesti shell sa opcijom -s, --shell SHELL. Podrazumevano dodeliće na šta je stavljena $SHELL promenljiva. Takođe postoji i komanda chsh za to. Ako si na ssh serveru, onda se izloguj i ponovo uloguj i videćeš promene. Ili samo da se prijaviš ponovo sa su - <user>, jer - je ustvari --login i učitava bashrc, profile itd.

Končne komande:

useradd -m -c "Nesto kao komentar" -s /bin/bash <ime-korisnika>
passwd <ime-korisnika>

Pravila za user ID i group ID.

UID GID Opis
0 0 Root
1-999 1-999 Sistemski servisi (i nalozi)
1000+ 1000+ Korisnički nalozi

Upravljanje korisnicima

Najbitnija nam je komanda usermod, preko nje možemo sve da radimo. Primeri operacija:

Brisanje: userdel [-r] user-name
Listing password info: change -l user-name
Forcing password change every 90 days with minimum
number of days between password changes do 1: change -m 1 -M 90 <user>

Sudoers file

Podrazumevano korisnik nema privilegije da uradi nešto što može root korisnik. Da bi se to promenilo postoje dva načina: edituje se /etc/sudoers datoteka ili da se korisnik doda u sudo grupu (usermod -aG sudo <username>).

Ali je prvo potrebno proveriti datoteku sudoers je se možda durgačije zove grupa od sudo. Npr. na mojoj mašini grupi wheel su dodeljene sve privilegije, pa sam zato njen član. Treba se odjaviti i ponovo prijaviti da bi se primenile promene.

cat /etc/sudoers
groups <username> #check groups

usermod -aG <group_name> <user>
groups <username> #check groups

Networking

# Da bi se prikazali mrežni interfejsi
ip link [show]
ip l [show]
ip --brief l

# See only IPv4 and exclude IPv6
ip -4 addr show

Bitni pojmovi koji treba da se znaju:

Postoje dva glavne komandte za rad sa mrežama i konekcijama. To su ifconfig i ip. Na Linux-u ifconfig se smatra zastarelom (ip je mnogo moćnija), ali na Unix sistemima (Solaris, AIX, HP-UX, BSDs, SCO) se još uvek koristi.

Primeri jedne i druge:

# Show network devices and configuration
ifconfig
ip addr show
ip link show

# Enable a network interface
ifconfig eth0 up
ip link set eth0 up

# Disable network interface
ifconfig eth0 down
ip link set eth0 down

Može da se kraće zapiše: ip link -> ip l; ip addr -> ip a

Primer: objašnjene izlaza programa ip

ip addr show wlp1s0

Output: inet 192.168.100.32/24 brd 192.168.100.255 scope global dynamic noprefixroute wlp1s0

This entry shows that the wlp1s0 interface has been assigned the IPv4 address 192.168.100.32 with a subnet mask of /24. The address is dynamically assigned, and the interface’s broadcast address is 192.168.100.255. It is a globally scoped address, but it does not automatically add a route for this network.

Dodela statičke adrese

Ako imamo pristup ruteru

Ako nemamo pristup ruteru

Potrebno je prvo videti koliko to uređaja ima na mreži i koje su to adrese koje su im dodeljenje. To se radi pomoću komande: nmap -sP 192.168.100.0/24. Interval DHCP adresa je verovatno među onima koje nisu korišćene, možemo iz tog intervala da dodelimo.

Find the DHCP server: sudo dhclient -v <type>. cat /var/lib/dhcp/dhclient.leases.

Dodela

Bitno: Ako je adresa našeg server računara 192.168.100.57/24, ovo 24 predstavlja masku, što znači da je interval IP od 192.168.100.1 do 192.168.100.254. Prvi 24 bita se koriste za nešto, dopuni… Bira se adresa koja je blizu manjem ili većem kraju intervala kako bi se izbegli konflikti.

# Dodela
sudo ip addr add <new-ip/24> dev <wlps0>
# Set the Default Gateway,
# so that device can access the network
sudo ip route add default via <ipexp:192.168.100.1>

# Verify
ip addr show <wlp1s0>
ip route show

Napomena Ovo je samo privremeno, kad se restartuje server sve se vraća na staro. Zbog toga je potrebno modifikovati datoteku /etc/network/interfaces (NE, zaglavio sam se ovde, nije htelo, samo je vraćalo inet6) ili preko netplan komande. Mogu se dodati ove komande u bash_profile, ili gde se pokrece kada pali prvi put, ali ne valja to.

Ako se menja fajl onda posle čuvanja treba:

sudo systemctl restart networking
# Verify. It should present static IP
ip addr show wlp1s0

Šta je statička IP adresa? Zašto je dobra, zašto ne? Moze se dodeliti pomoću ip komande.

sudo ip addr add <address> dev <type>

https://www.cyberciti.biz/faq/add-configure-set-up-static-ip-address-on-debianlinux/

Kako poništiti sve izmene

  1. Skloniti sve iz /etc/netplan/*.yaml
  2. Restore /etc/network/interfaces
  3. # systemctl restart networking
  4. Remove Any Wireless Configurations (if applicable) from yaml

Ostalo

Zanimljivi linkovi:


> Old laptop as server <

Kada instaliramo neku Linux distribuciju na stari laptop, dovoljno je da proverimo da li je sshd aktiviran.

systemctl status ssh [sshd?]
# Ako nije instaliramo i pokrenemo
sudo apt update
sudo apt install openssh-server

sudo systemctl enable ssh
sudo systemctl start ssh

Da bi proverili da li radi sve kako treba dovoljno je da nadjemo IP adresu servera na lokalnoj mreži i da se povežemo na nekog njegovog korisnika. Npr. sa ip --brief a, dobijemo adresu za wlp1s0: 192.168.100.57, onda možemo samo da uradimo: ssh <user>@192.168.100.57

Da ne bi pamtili adresu dovoljno je da u /etc/hosts datoteci laptopa preko koga se povezujemo dodamo liniju: 192.168.100.57 server.local. Onda znatno lakše postaje komanda: ssh <user>@server.local

UPOZORENJE: Koristimo adresu koji je dodelio ruter u lokalnoj mreži tom laptopu (tačnije DHCP). Ta adresa ima životni vek, odnosno koliko dugo je validna (ip a, polje valid_lft). Drugi problem: ako ima malo korisnika unutar mreže ne bi trebalo da se menja ta adresa. Ali ako se poveća broj korisnika onda je moguće da se dodeli druga adresa serveru kada se ponovo upali. Zbog toga je bolje dodeliti statičku adresu koja je pri kraju DHCP intervala. To se moze videti kad se ulogujemo na ruter.

Kako dodeliti statičku IP adresu.

Ako imamo pristup ruteru

Ako nemamo pristup ruteru

Monitoring tools: To keep an eye on server health, use tools like htop, netstat, or more advanced monitoring like Prometheus or Nagios.

For a web server: Type the laptop’s IP address into a web browser and check if your server responds.

For a file server: Try accessing shared folders using the laptop’s IP address from another computer.

Since it’s an old laptop, be aware that running it 24/7 might not be the most power-efficient. Consider using power-saving settings in the BIOS/OS, like dimming the screen, turning off unnecessary peripherals, or setting it to sleep when idle.


Fixes

Couldn’t get a file descriptor referring to the console

setfont/dumpkeys modifies the font in the VGA console (what you get when you press CTRL-ALT-F1, etc) It won’t do anything in Terminal.

Normally only the root user can access the console device that setfont needs to connect to in order to make the font change. This is why you get an error message when you run it from your normal user account. An exception is when a user is logged into the VGA console… then the user has access to the console and setfont succeeds.

The fact that you get the error message whenever you start Terminal, means that you likely have some command in your .bashrc, .bash_profile, .bash_login, .profile or /etc/profile that is run whenever you start a terminal. Could it be that you have setfont in one of these places? otherwise, look for something else that may be accessing the console.

I don’t know about ChromeOS, but I get this same error with loadkeys and setfont on my Arch Linux machine when inside a screen session. The fix is to use an explicit -C option to specify the console:

$ loadkeys -C /dev/console cz

# Couldn't open /dev/console
# sudo chown myusername:myusername /dev/console

How to swap caps-lock and escape keys

# 1.
setxkbmap -option caps:swapescape
# to undone
setxkbmap -option
# setxkbmap -option caps:escape

# 2.
xmodmap -e "keycode 9 = Caps_Lock"; xmodmap -e "keycode 66 = Escape"
# to undone
xmodmap -e "keycode 66 = Caps_Lock"; xmodmap -e "keycode 9 = Escape"

dumpkeys | grep -P -i "^keymaps.*|^keycode.*escape|^keycode.*lock" > swap.map swap.map should look something like:

keymaps 0-127
keycode   1 = Escape
keycode  58 = CtrlL_Lock
keycode  69 = Num_Lock
keycode  70 = Scroll_Lock

Remap Caps Lock to Esc in Ubuntu and Debian

How to change console keymap in Linux?

Shutting down system

REISUB - the gentle Linux restart

Postoji vise komandi: shutdown, poweroff

sudo shutdown -h now
sudo /sbin/shutdown -h time "message"
# Shutdown in 10 minutes:

sudo shutdown -h +10 &
shutdown -h +10  \
   "Development server is going down \
    for maintenance. Please save your work \
    ASAP."

# How to see log of my Linux system shutdown
last reboot
last shutdown
last -x shutdown

# Za sisteme sa systemD-om
sudo systemctl poweroff

Vreme i vremenske zone

Vremensku zonu je moguće zameniti za svakog korisnika zasebno (user specific) ili za ceo sistem (system wide). Za pojedinačnog korisnika je dovoljno u ~/.bashrc ili u .profile dodati export TZ=Europe/Belgrade. To može da ne radi za program cron, zavisi od konfiguracije, ali uvek moze da se navede TZ kada se piše cron skripta.

Za sistemsko menjanje se koristi: sudo timedatectl set-timezone Europe/Belgrade

Drugi način, datoteka /etc/localtime je simlink ka vremenskoj zoni, pa je moguće samo zameniti taj link. sudo rm -rf /etc/localtime, sudo ln -s /usr/share/zoneinfo/Europe/Belgrade /etc/localtime


NgniX

Bitno je da se namesti firewall

ufw allow 80
ufw allow 443

ufw status
ufw app list
ufw allow 'Nginx HTTP'

Interview Questions

Collection of Linux Sysadmin/DevOps interview questions link

10 Job Interview Questions for Linux System Administrators link

Linuks terminal za početnike link

https://www.datacamp.com/blog/what-is-shell

11 Essential Linux Interview Question link

24 Linux admin interview questions (and answers) link

Collection of Linux Sysadmin/DevOps interview questions - github link

20 Most Common System Administrator Interview Questions and Answers link

Linux Interview Questions And Answers link

Top 15+ Important Unix Commands Interview Questions For Beginners link

Top 25 Command Line Interview Questions and Answers link

Programming concepts link

Making servers work – digitalocean book link


Networking

Kako naci ip adresu, privatnu i javnu: * Privatna: * hostname -I * ip addr * ifconfig * Javna adresa: * dig ANY +short @resolver2.opendns.com myip.opendns.com * dig ANY +short @ns1-1.akamaitech.net ANY whoami.akamai.net * curl -s http://tnx.nl/ip * wget -O - -q https://icanhazip.com/

Uopstene komande: - nmcli networking on/off - nmcli radio wifi off Linux Network Commands Cheat Sheet link