[LPIC-1] System Security(110.1)

Този урок покрива материала от LPIC-1 110.1, нужен за изпит 102-400.
Урока покрива следните команди и файлове:
1.
su
sudo
/etc/sudoers
passwd
2.
find
fuser
lsof
nmap
chage
usermod
ulimit
3.
who, w, last

1.
Когато става въпрос за сигурност едно от най-важните неща е да се избягва директното влизане като root в системата, освен когато е наложително. Когато ви потрябва достъп до root акаунта(напр. за дадена команда) е препоръчително да се достъпи чрез su или sudo командите.

Su

За да достъпим друг профил се използва “su” командата:

[boyan@boyanLaptop home]$ su root
Password:
[root@boyanLaptop home]$

Това ви дава “non-login” shell за дадения акаунт. Това означава, че нямате достъп до техните променливи или shell промени(не се изпълнява ~/.bash_profile). Ако искате login shell се използва su командата с “-” или “-l” опциите.
Следните две команди са еквивалентни:

su – boyan
su -l boyan

За да достъпите потребителски акаунт е нужно да въведете името му, но при root акаунта това не е нужно.
Следните команди са еквивалнтни:

su – root
su -l root
su –
su -l

Когато от root акаунта влизате в някой друг акаунт не се изисква парола. Това ви позволява да използвате всички акаунти, без да им знаете паролата, и следователно при забравянето на съответната прола може да ползвате акаунта, като от root влезете в него.
В следния пример се опитвам да вляза в даден акаунт, но съм му забравил паролата. Чрез root,и командата passwd, мога да я сменя без да влизам в профила.

boyanweb@boyan:/home$ su tester
Password:
su: Authentication failure
boyanweb@boyan:/home$ su root
Password:
root@boyan:/home# passwd tester
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

Ако се опитате да смените паролата докато сте в даден акаунт, ще трябва да въведете и текущата парола:

[boyan@boyanLaptop sbin]$ passwd
Changing password for user boyan.
Changing password for boyan.
(current) UNIX password:

Sudo

Проблемът с командата su, е че за да се използва е необходимо всеки потребител да знае паролата на root потребителя. Често на обикновен потребител може да му се наложи да изпълни определена команда, която изиска root права.

На някой системи за рестарирането на network сървиса може да се използва следната команда:

/etc/rc.d/init.d/network restart

За да изпълни командата успешно потребителят има нужда от root права. За да позволим на потребителя да рестарира сървиса е нужно да използваме командата visudo, която променя файла /etc/sudoers(разликата межу visudo и vi /etc/sudoers е, че visudo провереява за грешки в синтаксиса преди запаметяването на файла). Ако искате да изпозвате друг едитор, а не vi, трябва да промените EDITOR промелнивата.
За да се използва nano:

export EDITOR=nano

Файлът /etc/sudoers има много опции, но за LPI е нужно да знаете как да дадете достъп за всики команди(или само някой) на даден потребител. Ако искаме потребителя tesт да може да рестарира сървиса networк:

test ALL=(ALL) /etc/rc.d/init.d/network

А ако имате достатъчно доверие на test, може да му позволите достъп до всички команди:

test ALL=(ALL) ALL

След добавянето на следния ред в файла /etc/sudoers:

test ALL=(ALL) /bin/yum update

Забележете че при изпълняването на командата чрез sudo, тя не иска паролата на root, както обикновено, а тази на test

[root@boyanLaptop sbin]$ visudo
[root@boyanLaptop sbin]$ su test
[test@boyanLaptop sbin]$ sudo yum update
[sudo] password for test:

Ако обаче нашият смел test потребител реши да надвиши правата си и се опита да изпълни друга команда от yum, той ще бъде посрещнат от грешка:

[test@boyanLaptop sbin]$ sudo yum upgrade
Sorry, user test is not allowed to execute ‘/bin/yum upgrade’ as root on boyanLaptop.

2.

След инсталиране на коя да е дистрибуция на Линукс, много от файловете имат специални позволения(permissions), за улеснение на нормалните потребители. Такива позволения са
SUID-Цифрово зададен чрез 4-Позволява да се пуска процеса чрез правата на собственика.
SGID-Цифрово зададен чрез 2-Позволява да се пуска процеса чрез правата на групата собственик, а ако е на директория задължава всички файлове в самата директория да са на нея група.
Sticky bit-Когато е зададена на директория не позволява на “несобственици” да трият файлове.

Важно е от време на време да се пуска find команда за да се види кой файлове имат специални позволения. Например за да видим всички файлове на root, който имат права 4777, можем да използваме следната команда:

boyanweb@boyan:~$ sudo find / -user root -perm 4777
/home/boyanweb/somefile

Или пък ако искаме да намерим всички файлове на root, който имат SUID, и отделно на това всички файлове по-големи от 100мб, можем да използваме тази команда:

sudo find / \( -perm -4000 -fprintf /root/suid.txt ‘%#m %u %p\n’ \) , \( -size +100M -fprintf /root/big.txt ‘%-10s %p\n’ \)

Бележка:Резултатите от тези команди зависят от версията на find

Използвайки -perm опцията на find командата трябва да се вземе в предвид това как се използва.
-perm 4777. Ще покаже всички файлове с права точно 4777.
-perm 4000. Ще покаже всички файлве със зададено SUID(4) и чиито права са по-високи от зададените.

sudo find / -user root -perm -4000
/usr/bin/passwd
/usr/bin/mbmon
/usr/bin/newgrp
/usr/bin/gpasswd
/usr/bin/newgidmap
/usr/bin/chsh
/usr/sbin/hddtemp
/usr/sbin/pppd
/bin/fusermount
/bin/umount
/bin/ping6
/bin/ping
/bin/mount
/bin/ntfs-3g
/bin/su
/home/boyanweb/somefile

boyanweb@boyan:~$ ll /bin/su /home/boyanweb/somefile
-rwsr-xr-x 1 root root 40128 May 17 2017 /bin/su*
-rwsrwxrwx 1 root root 0 Jun 3 21:14 /home/boyanweb/somefile*

Тъй като за тези команди е нужно да знаете само основното няма да се спирам подробно на тях.

Chage командата може да се използва за промяна на срока на годност на дадена парола или за преглеждането на тази информация(чрез -l опцията).

[test@boyanLaptop home]$ chage -l test
Last password change : May 27, 2018
Password expires : May 29, 2018
Password inactive : Jun 01, 2018
Account expires : Oct 27, 2018
Minimum number of days between password change : 1
Maximum number of days between password change : 2
Number of days of warning before password expires : 3

root може да променя тези данни директо чрез chage .

[root@boyanLaptop home]$ chage test
Changing the aging information for test
Enter the new value, or press ENTER for the default
Minimum Password Age [1]: 1
Maximum Password Age [1]: 1
Last Password Change (YYYY-MM-DD) [2018-05-27]:
Password Expiration Warning [10]: 1
Password Inactive [1]: 1
Account Expiration Date (YYYY-MM-DD) [2018-10-27]: 2018-10-26

При изтекла валидност на парола при следващия опит за логин се показва това съобщение:

[boyan@boyanLaptop home]$ su test
Password:
Your account has expired; please contact your system administrator
su: Authentication token expired

Usermod командата позволява да се променят някой настройки на акаунта:
-d -> Променя home директорията на дадения потребител.
-е -> Променя “срока на годност” на потребителя.
-g -> Променя главната група на потребителя.
-G -> Променя/Добавя/Премахва второстепенните групи на потребителя.
-s -> Променя пътя към шелл-а на потребителя.
-u -> Променя UID на потребителя.
-L -> Заключва акаунт.(Слага ! пред паролата в /etc/passwd)
-U -> Отключва акаунт.(Премахва ! от паролата в /ect/passwd)

ulimit представлява начин за задаване на лимити за някой потребители. За да прегледате лимитите на дадения акаунт от който сте влезли се изпозлва ulimit -a.

boyanweb@boyan:~$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 23708
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 23708
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited

Всяка от тези опции може да се променя с показаните в удебелено знаци.

netstat изкарва информация за network връзките routing таблиците, както и много други неща.

fuser показва кои процеси изполват TCP или UDP сокети, както и кой процес изплзва дадена директория или файл.

lsof накратко за List Open Files. Показва кои файлове са отворени и процесите от които са отворени/използвани.

3.
Who, w и last са подобни команди:
Who-> Показва кой е лог-иннат.

boyanweb@boyan:~$ who
root tty1 2018-04-10 16:02
boyanweb pts/0 2018-06-03 20:57 (192.168.1.2)
boyanweb pts/8 2018-06-03 23:13 (192.168.1.3)

w-> Показва кой е лог-иннат, какво прави както и ъптаймът на машината.

boyanweb@boyan:~$ w
23:15:50 up 54 days, 7:14, 3 users, load average: 0.29, 0.22, 0.21
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 10Apr18 54days 0.14s 0.06s bash
boyanweb pts/0 192.168.1.2 20:57 1:34m 0.25s 0.25s -bash
boyanweb pts/8 192.168.1.3 23:13 6.00s 0.10s 0.00s w

last-> Показва лист с последно лог-иннатите потребители.

boyanweb@boyan:~$ last
boyanweb pts/8 192.168.1.3 Sun Jun 3 23:13 still logged in
boyanweb pts/8 192.168.1.3 Sun Jun 3 23:12 – 23:12 (00:00)
boyanweb pts/0 192.168.1.2 Sun Jun 3 20:57 still logged in
boyanweb pts/0 192.168.1.2 Sun Jun 3 00:49 – 03:41 (02:52)
boyanweb pts/0 192.168.1.2 Sat Jun 2 14:33 – 16:45 (02:11)