NullByte
Active Member
Тази статия/тема е написана от мен ексклузивно за Предприемач и моя блог, не разрешавам копирането на статията или части от нея без моето разрешение.
Ако имате клиенти, приятели или потребители, които имат шел достъп до вашия сървър, добре е вместо да ги лишавате от него, просто да ги ограничите в действията, които могат да извършват.
В повечето случаи един потребител, който използва акаунта си за хостинг на уебсайт, няма нужда от инструменти като gcc/g++ компилаторите, perl, python и др. подобни интерпретатори. Тогава ще е най-добре те да нямат достъп до тях, за да ги ограничите от използването на зловредни скриптове за атаки, пробиви и тн., всичко незаконно и всичко, което би ви навредило.
Да, вярно е, че и само с шел скрипт и команди може да се навреди, но същото може да се постигне и само с php.
Препоръчвам да се проверяват периодично историите на командите на потребителите, което става лесно с една две команди.
За целта първо трябва да сме сигурни, че по подразибране няма .bash_logout скрипт, който да изтрива историята при излизане. Всеки потребител има право на това и не можете да ги ограничите, но го махнете от подразбиращата се директория (/etc/skel).
След това периодично може да проверявате по ключови думи за зловредни действия, например grep perl /home/*/.bash_history ще ви изведе всички съвпадения за всички потребители, които са използвали команди, в които се съдържа думата perl
Хубаво е да проверявате и какви процеси са пуснати с инструменти като top и htop, или командата ps (ps -u username), както и файлове със съмнителни разширения (например за перл .pl - търсите с команда find -name \.pl)
За да се ограничат определени инструменти или компилатори, може да използвате следната методика, която аз използвам (не претендирам да е добра):
Първо създавате една или повече групи, в зависимост от вашите нужди. Да кажем нужни са ни 2 групи - една потребителска (users), която ще има ограничения и една администраторска (admins) за наши приятели или за системни администратори, която ще може всичко, което потребителите преди въвеждането на ограниченията са можели.
Потребителската - users би трябвало да е създадена предварително, а администраторската admins я създавате вие с командата addgroup (за дебиан и подобни) или groupadd за всички.
След това създаваме потребители, на които основната група да е една от тези, ако имате повече групи може да добавяте на един потребител няколко групи.
За дебиан това става лесно - adduser ivanov --ingroup admins - това ще създаде юзър ivanov с основна група admins. Съответно за ограничен потребител adduser ime --ingroup users.
За модифициране на основната група на вече създаден потребител използваме usermod командата (за всички дистрибуции) - usermod -g grupa user
Пример: usermod -g admins ivanov или usermod -g users ivanov ще направи основната група на потребителя admins или users (ограничената).
След като сме разпределили потребителите е време и да решим как ще ограничим тези в група users.
За целта просто променяме правата на избраните от нас бинарни файлове (програми) на инструментите. Да кажем, че искаме да забраним c,c++ компилатора наречени gcc и g++ и интерпретаторите perl и python, както и допълнително make, с който се build-ват някои програми. За целта пишем следните команди:
Можем да проверим правата с командата ls -l /usr/bin или за определена програма с ls -l /usr/bin | grep perl
-rwxr-x--- 2 root admins 1487332 Apr 12 13:25 perl
-rwxr-x--- 2 root admins 1487332 Apr 12 13:25 perl5.14.2
Виждаме, че само собственика на файловете и групата имат права, а именно root и групата admins.
Така само root и потребители в групата admins ще могат да изпълняват командите.
Вие решавате кои неща да са ограничени, като дори команди като df, who, w, ping, traceroute и тн можете да ограничите по ваше усмотрение.
Ако даден потребител вече си има основна група, например група devels, нищо не пречи да му добавите групата admins, не е нужно тя да е основна.
Друг начин за защита е като ограничите ресурсите за даден потребител, група или за всички. Това става във файла limits.conf, който най-често се намира в /etc/security директорията
Как се борави с този файл може да прочетете с man limits.conf
Ще дам няколко примера:
* hard nofile 65535
* soft nofile 4096
@ivan hard nproc 16384
@ivan soft nproc 2047
където първо се описва потребителя (* означава всички, без root, който трябва отделно да се описва винаги), hard или soft е метода (soft е на ниво shell/bash, а hard е на ниво ядро(kernel))
Ще ограничи броя на отворени файлове за всички потребители на 4096 soft и 65535 hard
Ще ограничи броя на процеси за потребител или група ivan (2047 soft и 16384 hard)
Може да ограничавате много неща, например: процесорно време, максимален размер на файлове, максимален брой едновременни логина в шела, приоритет на процеси и тн.
Ако имате въпроси ще се радвам да отговоря, надявам се да съм бил полезен.
Ако имате клиенти, приятели или потребители, които имат шел достъп до вашия сървър, добре е вместо да ги лишавате от него, просто да ги ограничите в действията, които могат да извършват.
В повечето случаи един потребител, който използва акаунта си за хостинг на уебсайт, няма нужда от инструменти като gcc/g++ компилаторите, perl, python и др. подобни интерпретатори. Тогава ще е най-добре те да нямат достъп до тях, за да ги ограничите от използването на зловредни скриптове за атаки, пробиви и тн., всичко незаконно и всичко, което би ви навредило.
Да, вярно е, че и само с шел скрипт и команди може да се навреди, но същото може да се постигне и само с php.
Препоръчвам да се проверяват периодично историите на командите на потребителите, което става лесно с една две команди.
За целта първо трябва да сме сигурни, че по подразибране няма .bash_logout скрипт, който да изтрива историята при излизане. Всеки потребител има право на това и не можете да ги ограничите, но го махнете от подразбиращата се директория (/etc/skel).
След това периодично може да проверявате по ключови думи за зловредни действия, например grep perl /home/*/.bash_history ще ви изведе всички съвпадения за всички потребители, които са използвали команди, в които се съдържа думата perl
Хубаво е да проверявате и какви процеси са пуснати с инструменти като top и htop, или командата ps (ps -u username), както и файлове със съмнителни разширения (например за перл .pl - търсите с команда find -name \.pl)
За да се ограничат определени инструменти или компилатори, може да използвате следната методика, която аз използвам (не претендирам да е добра):
Първо създавате една или повече групи, в зависимост от вашите нужди. Да кажем нужни са ни 2 групи - една потребителска (users), която ще има ограничения и една администраторска (admins) за наши приятели или за системни администратори, която ще може всичко, което потребителите преди въвеждането на ограниченията са можели.
Потребителската - users би трябвало да е създадена предварително, а администраторската admins я създавате вие с командата addgroup (за дебиан и подобни) или groupadd за всички.
След това създаваме потребители, на които основната група да е една от тези, ако имате повече групи може да добавяте на един потребител няколко групи.
За дебиан това става лесно - adduser ivanov --ingroup admins - това ще създаде юзър ivanov с основна група admins. Съответно за ограничен потребител adduser ime --ingroup users.
За модифициране на основната група на вече създаден потребител използваме usermod командата (за всички дистрибуции) - usermod -g grupa user
Пример: usermod -g admins ivanov или usermod -g users ivanov ще направи основната група на потребителя admins или users (ограничената).
След като сме разпределили потребителите е време и да решим как ще ограничим тези в група users.
За целта просто променяме правата на избраните от нас бинарни файлове (програми) на инструментите. Да кажем, че искаме да забраним c,c++ компилатора наречени gcc и g++ и интерпретаторите perl и python, както и допълнително make, с който се build-ват някои програми. За целта пишем следните команди:
Код:
cd /usr/bin
chown root:admins gcc
chmod o-rwx gcc
chown root:admins g++
chmod o-rwx g++
chown root:admins make
chmod o-rwx make
chown root:admins perl
chmod o-rwx perl
chown root:admins python
chmod o-rwx python
Можем да проверим правата с командата ls -l /usr/bin или за определена програма с ls -l /usr/bin | grep perl
-rwxr-x--- 2 root admins 1487332 Apr 12 13:25 perl
-rwxr-x--- 2 root admins 1487332 Apr 12 13:25 perl5.14.2
Виждаме, че само собственика на файловете и групата имат права, а именно root и групата admins.
Така само root и потребители в групата admins ще могат да изпълняват командите.
Вие решавате кои неща да са ограничени, като дори команди като df, who, w, ping, traceroute и тн можете да ограничите по ваше усмотрение.
Ако даден потребител вече си има основна група, например група devels, нищо не пречи да му добавите групата admins, не е нужно тя да е основна.
Друг начин за защита е като ограничите ресурсите за даден потребител, група или за всички. Това става във файла limits.conf, който най-често се намира в /etc/security директорията
Как се борави с този файл може да прочетете с man limits.conf
Ще дам няколко примера:
* hard nofile 65535
* soft nofile 4096
@ivan hard nproc 16384
@ivan soft nproc 2047
където първо се описва потребителя (* означава всички, без root, който трябва отделно да се описва винаги), hard или soft е метода (soft е на ниво shell/bash, а hard е на ниво ядро(kernel))
Ще ограничи броя на отворени файлове за всички потребители на 4096 soft и 65535 hard
Ще ограничи броя на процеси за потребител или група ivan (2047 soft и 16384 hard)
Може да ограничавате много неща, например: процесорно време, максимален размер на файлове, максимален брой едновременни логина в шела, приоритет на процеси и тн.
Ако имате въпроси ще се радвам да отговоря, надявам се да съм бил полезен.
Последно редактирано: