Intro

Эта статья для совсем уж новичков. Если вы опытный, то вам будет скучно. Она про архитектуру Linux и Windows. Про философию Linux. Про различия в том как построены эти ОС, про то как устроен доступ и права к файлам.

Некоторые спрашивали о том, почему под линуксом нет вирусов.

А другие спрашивают можно ли раскомментить "%wheel ALL=(ALL) NOPASSWORD: ALL" если на ноутбуке только один пользователь.

Кто-то просил рассказать о том почему Linux безопаснее Windows.

Некоторые люди говорят, что под линукс вирусы не пишут. Ну потому что очень маленькая доля таких компьютеров.

Ага, ага. Практически все суперкомьютеры работают под линуксом.

https://ru.wikipedia.org/wiki/Top500 ну вот, например, список из десяти. И все 10 работают под линуксом.

А еще у нас есть сервера, большая часть которых работает на линуксе.

Или андроид, который тоже на нем основан.

Так что этот аргумент так себе.

И да, давайте сразу оговоримся. Все что я говорю, естественно касается Unix. Но я, возможно, буду говорить Linux.

И первая, и, наверное, основная причина почему в Linux нет вирусов это механизм разграничения доступа.

Причина #1. Пользователи и группы.

Вообще изначально Linux проектировалась как многопользовательская система. И поэтому в ней очень хорошо продумано все что связано с правами, пользователями группами. В отличие, например, от той же Windows. Эта система разграничения доступа была реализована еще в 70 годах. Но она до сих пор крайне актуальна. Потому что сделана она очень просто и изящно. И эта система до сих пор успешна справляется со всеми задачами для которых она была создана.

И вот как раз из-за этого люди и любят Linux. Потому что тут многие вещи просто прекрасны с инженерной точки зрения. Тут очень высокий уровень семантики, логичности и простоты.

В принципе в Unix все сделано очень логично. В отличии от Windows. Во-первых само дерево файлов. Что у тебя есть один корень, и от него уже идут директории, а не вот этот идиотизм в Windows с буквами дисков. В Unix так же каждое устройство это файл. Даже ваш диск, который вы подключили или звуковая карта это файл. И это очень логично. Все конфиги в линуксе хранятся в файлах. И ты знаешь где они. Они у тебя в домашней директории. Ты всегда можешь просто скачать на диск свою домашнюю директорию, установить линукс на другом компе, закачать туда свою домашнюю директорию и у тебя все будет работать точно так же. В Windows у тебя вообще не понятно где хранятся настройки. Что-то вообще в реестре. Сам реестр в винде это тот еще идиотизм. Я не понимаю кто вообще его придумал. Это настолько нелогично насколько можно себе представить. Ты если что-то настраиваешь в винде, а потом переустанавливаешь систему то тебе все приходится настраивать заново. Не говоря уже о том, что сама винда она крайне перегружена. Ты в два клика можешь увидеть окошко с настройками которое выглядит так будто оно из виндовс98.

Короче говоря, механизм разграничения доступа в линуксе - это как раз одна из причин из-за которых в линуксе нет вирусов. И если вы как пользователь скачали вирус и как-то сумели его правильно скомпилировать и запустить то он ничего не сможет сделать с системой. Так как ему нужны будут права рута. Все что сможет вирус, так это сделать что-либо с данными того пользователя из под которого его вызвали.

В Linux только пользователь Root может работать со всеми файлами независимо от их набора их полномочий. И это очень важно, потому что локальный доступ к файлам для всех программ и всех пользователей позволил бы вирусам без проблем уничтожить систему.

Людям может показаться, что это сложно. Человек, допустим смотрит на права какого-нибудь файла и вообще не понимает что тут к чему.

Но на самом деле все очень просто.

Изначально каждый файл имел три параметра доступа. Вот они:

Чтение - когда можно посмотреть файл, но нельзя изменить. А если это директория, то посмотреть список файлов в ней.

Запись - когда можно и читать и изменять. А если это директория то создавать и изменять файлы в ней.

Выполнение - В виндоус вы можете запускать файлы если у них есть определенное расширение. Exe, bat, com. В линуксе ты можешь запустить любой файл если у него есть флаг на выполнение. От расширения ничего не зависит. Ну и соответственно если флага нет, то программа не запустится.

Но все это не имело бы смысла если бы в системе был бы только один пользователь. Поэтому для каждого файла мы определяем чтение, запись и выполнение для трех видов пользователей.

Владелец - тот кто создал файл или тот кого мы переназначили.

Группа - пользователей можно объединять в группы. Просто для удобства. Просто представьте, что у вас тысяча пользователей, и вам не удобно для каждого файла было бы перечислять пользователей.

Остальные - это просто те, кто не владелец и те, кто не входит в группу.

r - право на чтение;

w - право на запись;

x - право на исполнение.

Можем, например, посмотреть на файл .zshrc

Мы видим у него следующие права

-rw-------

За права тут отвечают черточки. Самая первая это тип файла, тут - что означает, что это просто файл. Дальше у нас идут девять черточек. Это по три черточки для владельца, три для группы и три для всех остальных.

И тут мы сразу понимаем, что этот файл может читать и изменять владелец. Но владелец не может его запускать. Группа и остальные не имеют никаких прав.

drwxrwxrwx

Если рассмотреть вот этот пример, то вы видим, что первая строчка тут d что означает, что это директория. А потом идут три группы rwx это значит, что и владелец и группа и остальные имеют право читать, выполнять и запускать.

Так же мы можем использовать не только буквенное представление прав, но и числовое.

Ну а чтобы менять права есть программа chmod

Если мы хотим чтобы наш пользователь мог читать, записывать и запускать файл. Группа могла только читать. А остальные ничего не могли, то мы можем сделать следующее.

chmod u=rwx,g=r,o= file.txt

chmod 760 file.txt

Ну а если нам нужно изменить все файлы в директории, то мы можем использовать опцию -R

chmod -R 777 folder

Вот так просто меняются права на файл.

А если мы хотим изменить владельца файла, то мы это сможем сделать с помощью следующей программы:

chown name_of_new_owner file_name

А если нужно изменить группу то

chgrp name_of_group_to_change file_name

Группы

Группы вообще нужны чтобы расширить возможности управления правами. Как я уже сказал, представьте, что у вас тысяча пользователей, и вам не удобно для каждого файла было бы перечислять пользователей. Но вообще пользователи могут быть не только пользователями. В линуксе пользователем может быть процесс. И группы могут управлять не только доступом для пользователей, но и управлением правами программ и их доступом к оборудованию.

Вот, например, этой командой мы можем посмотреть сколько у нас групп

vim /etc/group

Вот как я уже сказал, есть у нас группа sudo, wheel, users. И эти группы нужны как раз для управления пользователями.

А остальные группы они нужны для управления программ и их доступом к различным ресурсам, процессам и оборудованию. И каждая группа тут она регулирует полномочия пользователей, которые в них находятся, и соответственно процесса, который запущен от этого пользователя.

  • sys - группа для доступа к ядру
  • daemon - группа для демонов
  • proxy - используется для прокси
  • www-data - из под этой группы запускается веб-сервер
  • wheel - Позволяет запускать sudo. И выполнять команды без пароля. Соответственно, если отвечать вопрос в начале ролика, то нет. Крайне не рекомендуется убирать тот комментарий.

Ну вот как-то так. Продуманность системы разграничения доступа это основной фактор безопасности Linux.

Причина #2.

Принцип изолирования пользователей от приложений, файлов.

Когда пользователь запускает какое-либо приложение, ну, например, браузер или почтовая программа, они запускаются с ограниченными полномочиями данного пользователя.

И не возможно отправить по электронной почте пользователю Linux какое-то сообщение, чтобы при открытии его у тебя заразился весь компьютер. Или при открытии странички браузера чтобы у тебя что-то случилось с системой. И не имеет значения даже то насколько плохо написан браузер или почтовый клиент. Ведь они запускаются от нашего пользователя, а значит самый максимум на что они способны это повредить файлы нашего пользователя.

Так же, в отличие от Windows, в Linux намного меньше различных модулей, которые интегрированы прям в ядро самой операционной системы. Ну, например, в Win ядро управляет графической системой. И если что-то случится с графической системой, то все, ты уже ничего не поделаешь. У тебя компьютер ребутнется. А в Linux ты можешь перезапустить графическую систему не перезагружая Linux. Ты вообще можешь сходу сменить Gnome на KDE. Без перезагрузки.

Причина #3. Репы.

Ну, конечно же, архитектура системы не единственный аргумент в пользу того, что тут нет вирусов. Еще один крайне важный фактор это то, что софт под Linux люди ставят из репозитариев, а для Windows ты качаешь *.exe из интернета. И это, как вы понимате, довольно опасно.