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!
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>
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:
Komanda:
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:
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 |
Najbitnija nam je komanda usermod
, preko nje možemo sve da radimo. Primeri operacija:
-a
da se stavi kako ne bi obrisali staru grupu (–append)
usermod
-a -G <GID>
user
usermod -c "novi komentar <user>
chfn -f "novi komentar" <user>
usermod
-e yyyy-mm-dd
<name>
usermod
-s /bin/sh <user>
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>
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
# 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:
ip --brief link
ip link show <type>
ip addr show <type>
ip addr show <type> | grep inet
ip route show
cat /etc/resolv.conf
ip link show <type> | grep mtu
ip -s link show <type>
ip link add link <type> name <name> type vlan id 100
sudo iptables -L -v -n
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
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.
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
.
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:
Šta je statička IP adresa? Zašto je dobra, zašto ne? Moze se dodeliti pomoću ip
komande.
https://www.cyberciti.biz/faq/add-configure-set-up-static-ip-address-on-debianlinux/
/etc/netplan/*.yaml
/etc/network/interfaces
# systemctl restart networking
Zanimljivi linkovi:
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.
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.
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
# 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
1
and 58
, while deleting the other _Lock
lines; leave the first line intact though.sudo loadkeys swap.map
/etc/rc.local
, before the exit 0 line, to activate the swap upon boot:loadkeys /home/user/swap.map # or whatever path you chose
Remap Caps Lock to Esc in Ubuntu and Debian
How to change console keymap in Linux?
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
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
Bitno je da se namesti firewall
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
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