Перейти к содержанию


Салют 👋,
Данная лабораторная работа посвещена изучению *nix машин и как они работают, позволяет приобрести навыки для работы с терминалом/ консолью и приобрести знания по работе ОС. В лабоработрной работе описываются материалы по командам, скриптам и подключаемым приложениям.

Для сдачи данной работы также будет требоваться ответить на дополнительыне вопросы по описанным темам.


Структура репозитория лабораторной работы

lab02
├── exmpl_hello.py
├── pygamesteel.py
└── README.md

Материалы

Давайте начнем с описания как это работает, но следует подойти к этому вопросу изначально с терминов и основных элекментов, таких как:

Раздел Описание Основные элементы
Терминал Устройство ввода/ вывода
Оболочка (shell) Интерпретатор команд, обеспечивающий интерфейс для взаимодействия пользователя с функциями ОС (в Linux по умолчанию bash).
  • env – вывод списка переменных окружения
  • export – экспорт переменных окружения
  • echo – вывод переданного параметра
  • reset – сброс настроек терминала к значениям по умолчанию
  • logout – завершение сеанса
  • exit – завершение сеанса оболочки
Консоль Интерфейс командной строки с командами для работы с файлами.
  • ls – вывод содержимого каталога
  • cd – смена текущего каталога
  • touch – создание файла
  • mkdir – создание каталога
  • rm / rmdir – удаление файла или каталога
  • cp – копирование
  • mv – перенос или переименование
  • ln – создание ссылок на файлы
  • cat / tac – вывод содержимого файла
  • df – отчёт об использовании дискового пространства
  • du – отчёт об используемом месте на диске
  • wc – подсчёт строк, слов и символов
  • uniq – нахождение/фильтрация дублирующихся строк
  • grep – поиск по шаблону
Файловая система Иерархия каталогов и файлов с правами доступа пользователей.
  • /bin – исполняемые файлы (программы и скрипты)
  • /sbin – исполняемые файлы и системное ПО
  • /dev – файлы устройств
  • /etc – конфигурационные файлы системы и приложений
  • /lib – системные библиотеки
  • /home – домашние каталоги пользователей
  • /root – домашний каталог суперпользователя
  • /usr – приложения и дополнительные данные
  • /var – изменяемые данные приложений
  • /tmp – временный каталог системы
  • /var/tmp – временные каталоги приложений
  • /proc – файловый интерфейс ядра и процессов
  • /mnt – точки монтирования сетевых файловых систем
  • /media – точки монтирования съёмных носителей
  • /boot – загрузчики и файлы ядра
  • /sys – интерфейс к устройствам и подсистемам ядра
Переменные окружения Переменные, задающие контекст работы пользователя и процессов.
  • SHELL – оболочка текущего пользователя
  • USER – имя пользователя
  • HOME – домашний каталог пользователя
  • PATH – пути поиска исполняемых файлов
  • PWD – текущий каталог
  • LANG – текущая локаль (язык и формат)

Права доступа

При монтировании образа для каждой *nix ОС задаются права доступа к файлам и путям каталогов, которые позволяют их индивидуально профилировать, а также изменять, но давайте посмотрим на общую картину, советую ознакомиться изначально с Петром Девянином и его описанием take-grant модели. Система безопасности построена на:

  • chmod — изменение прав доступа
$ chmod [-R] [option] [rules] # пользователь может менять только у принадлежащих ему файлов, а root у всех файлов в системе
  • umask — маска прав доступа дляполученияреальныхправвновь .
  • chown — изменение владельца
$ chown [-R] user[:group] file # доступна только для root
         -R # рекурсивная смена
  • chgrp — изменение группы
$ chgrp [-R] group ... file # изменение группы файла для пользователя только там, где он является ее членом

У каждого файла или каталога имеются определенные права доступа, такие как:

  • r — право на чтение из файла / просмотр содержимого директории
  • w — право на запись в файл / создание, удаление файлов в директории
  • x — право на исполнение / доступ в директорию и сабдиректории

По умолчанию права для директории 777, а для файлов 666. А теперь давайте посмотрим, как можно поменять права. На сейчас все *nix поддерживают POSIX ACL, который позволяет указать права доступа для конкретных пользователей и групп.

$ getfacl [option] file ... # показывает список access list
$ setfacl [option] file ... # устанавливает или удаляет access list
         -m # изменение или установка
          # удаление

# Пример
$ setfacl -m u:user1:rw file # для пользователя
$ setfacl -m g:users:r file # для группы
$ setfacl -m m::rw file для # маски

Процессы

А теперь давай посмотрим, что каждому выполняемому процессу присваивается уникальный номер PID Process ID, где его ID после завершения процесса высвобождается. У всех процессов в системе кроме самого первого (PID = 1 - init) есть родительские, которые запускают процесс.

$ ps [option] # список процессо в всистеме
    -a # список всех процессов привязанных к терминалу
    -x # ... не привязанных к терминалу
    —е # показывает все процессы системы
    -f # показывает дерево процессов
    -u user # список процессов пользователя
$ pstree # дерево процессов

$ kill [-l] PID # пример как можно вывести спиок всех сигналов
$ killall [-signal] # определение процесса по имени

После завершения работы родительского процесса у наследователя становится init. Также, если shell заканчивает работу, то все процессы будут завершены. Но если надо, что бы программа работала далее без оболочки, то ее необходимо запускать при помощи nohup, так как отключает программу от терминала. А теперь, все вы знаете про daemon, а это именно то, что работает после запуска и сразу же отключается от терминала.


Задание

  • 1. Выведите на терминале и проанализируйте следующие команды консоли
$ who | wc -I
$ id
$ whoami
$ hostnamectl
  • 2. Выведите утилитой tree список вложенности дерева диреторий для каталога своего пользователя. Далее используйте ls -a и укажите отличие от ls -l.
  • 3. Используйте утилиту file и df для определения какая файловая система на разделе /dev/sda1.
  • 4. Выведите на терминале и проанализируйте следующие команды консоли
$ which vi
$ locate hello.py
$ sudo updatedb
$ locate hello
$ touch screen
$ find ~ -name screen
$ locate screen
$ sudo updated
$ locate screen
  • 5. Используйте конструкцию и вставьте ее в созданный файл ранее. Подключите pygame - используем исключительно для стилизации окна.
import pygame
pygame.init()

# Устанавливаем размеры окна
screen_width = 800
screen_height = 600
window_size = (screen_width, screen_height)
pygame.display.set_mode(window_size) # Создаем окно

# Задаем цвет фона
bg_color = (255, 255, 255)
pygame.draw.rect(screen, bg_color, [0, 0, screen_width, screen_height], 1)

# Выводим текст на экран
font = pygame.font.SysFont(None, 75)
text = font.render("Hello appsec world*", True, (0, 255, 0))
text_rect = text.get_rect()
text_rect.center = (400, 300)
screen.blit(text, text_rect)

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            quit()
pygame.display.flip() # Обновляем экран
  • 6. Сделайте commit и push в свой репозиторий с изменениями в master branch. На следующих лабораторных работах мы вернемся к этому файлу.
  • 7. Выведите на терминале и проанализируйте следующие команды консоли
$ groups
$ useradd smallman
$ userdel smallman -rf
$ useradd smallman
$ passwd smallman
$ usermod smallman -c 'Hach Hachov Hacherovich,239,45-67,499-239-45-33'
$ passwd smallman
$ id smallman
$ groupadd -g 1500 readgroup
$ usermod -aG readgroup smallman
$ chmod 666 screen 
  • 8. Выведите группу прав для screen и измените, что бы файл был доступен только для чтения созданному пользователю и выведите права этого польователя для измененного файла только используя readgroup.
  • 9. Используйте POSIX ACL. Выведите на терминале и проанализируйте следующие команды консоли
$ touch nmapres.txt
$ setfacl -m u:smallman:rw nmapres.txt
$ setfacl -m g:readgroup:r nmapres.txt
$ getfacl nmapres.txt
  • 10. Сохраните файл внутри локального репозитория, так как следующая работа будет подразумевать запись в нее данных о nmap.
  • 11. Для закрепления выведите все списки групп пользователей на вашей ОС и права на верхнеуровневые каталоги.
  • 12. Выведите все права для файлов и директорий локального репозитория которые имеют различные пользователи (без использования длинных путей)
  • 13. Выведите процессы которые у вас запущены в термине и вне его.
  • 14. Оформить README.md по аналогии и использовать shield, etc.
  • 15. Составить gist отчет и отправить ссылку личным сообщением

Copyright © 2025 Elijah S Shmakov

Logo


Логотип