Внутри директории events создай файлы для ошибок с номерами 400 и 500
15. Пользователей с N равным 1 и 2 добавить в группу workers вручную внеся изменения в конфигурационный файл.
User@B1A406C02:/home$ sudo usermod user_8_1 -G workers
User@B1A406C02:/home$ sudo usermod user_8_2 -G workers
User@B1A406C02:/home$ sudo nano workers
16. После добавления пользователей осуществить проверку файла /etc/group на ошибки.
User@B1A406C02:/home$ cat /etc/group
17. Пользователей с N равным 3, 4 и 5 добавить в группу students при помощи команд администрирования. Если у Вас возникли вопросы по поводу использования тех или иных ключей воспользуйтесь командой man для получения справки: man [имя команды].
User@B1A406C02:/home$ sudo usermod user_8_3 -G students
User@B1A406C02:/home$ sudo usermod user_8_4 -G students
User@B1A406C02:/home$ sudo usermod user_8_5 -G students
18.Проверьте результат, выполнив действия п.12.
User@B1A406C02:/home$ sudo cat /etc/passwdroot:x:0:0:root:/root:/bin/bashdaemon:x:1:1:daemon:/usr/sbin:/bin/shbin:x:2:2:bin:/bin:/bin/shsys:x:3:3:sys:/dev:/bin/shsync:x:4:65534:sync:/bin:/bin/syncgames:x:5:60:games:/usr/games:/bin/shman:x:6:12:man:/var/cache/man:/bin/shlp:x:7:7:lp:/var/spool/lpd:/bin/shmail:x:8:8:mail:/var/mail:/bin/shnews:x:9:9:news:/var/spool/news:/bin/shuucp:x:10:10:uucp:/var/spool/uucp:/bin/shproxy:x:13:13:proxy:/bin:/bin/shwww-data:x:33:33:www-data:/var/www:/bin/shbackup:x:34:34:backup:/var/backups:/bin/shlist:x:38:38:Mailing List Manager:/var/list:/bin/shirc:x:39:39:ircd:/var/run/ircd:/bin/shgnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/shnobody:x:65534:65534:nobody:/nonexistent:/bin/shlibuuid:x:100:101::/var/lib/libuuid:/bin/shsyslog:x:101:103::/home/syslog:/bin/falsemessagebus:x:102:105::/var/run/dbus:/bin/falseavahi-autoipd:x:103:106:Avahi autoip daemon. /var/lib/avahi-autoipd:/bin/falseusbmux:x:104:46:usbmux daemon. /home/usbmux:/bin/falsednsmasq:x:105:65534:dnsmasq. /var/lib/misc:/bin/falsewhoopsie:x:106:110::/nonexistent:/bin/falsekernoops:x:107:65534:Kernel Oops Tracking Daemon. /:/bin/falsertkit:x:108:114:RealtimeKit. /proc:/bin/falsespeech-dispatcher:x:109:29:Speech Dispatcher. /var/run/speech-dispatcher:/bin/shlightdm:x:110:116:Light Display Manager:/var/lib/lightdm:/bin/falseavahi:x:111:118:Avahi mDNS daemon. /var/run/avahi-daemon:/bin/falsecolord:x:112:120:colord colour management daemon. /var/lib/colord:/bin/falsepulse:x:113:121:PulseAudio daemon. /var/run/pulse:/bin/falsehplip:x:114:7:HPLIP system user. /var/run/hplip:/bin/falsesaned:x:115:123::/home/saned:/bin/falsesoeltic:x:1000:1000:SoEltic. /home/soeltic:/bin/bashguest-Auutpr:x:116:125:Guest. /tmp/guest-Auutpr:/bin/bashuser_13_1:x:1001:1001::/home/user_13_1:/bin/shuser_13_2:x:1002:1001::/home/user_13_2:/bin/shuser_13_3:x:1003:1003::/home/user_13_3:/bin/shuser_13_4:x:1004:1003::/home/user_13_4:/bin/shuser_13_5:x:1005:1003::/home/user_13_5:/bin/sh
19. Создать пользователя teacher_[номер варианта]. В комментарии к учетной записи должны быть Ваше имя и фамилия. uid учетной записи должен быть равен 3000. Пользователя добавить в группу teachers.
User@B1A406C02:/home$ sudo useradd teacher_8 -G teachers -u 3000 -c Popova_A
20. Для всех пользователей задайте пароли, используя команду passwd.
User@B1A406C02:/home$ sudo passwd user_8_1
Введите новый пароль UNIX:
Повторите ввод нового пароля UNIX: passwd: пароль успешно обновлён user@B1A406C02:/home$ sudo passwd user_8_2
Введите новый пароль UNIX:
Повторите ввод нового пароля UNIX:
Passwd: пароль успешно обновлён
User@B1A406C02:/home$ sudo passwd user_8_
3Введите новый пароль UNIX:
Повторите ввод нового пароля UNIX:
Passwd: пароль успешно обновлён
User@B1A406C02e:/home$ sudo passwd user_8_4
Введите новый пароль UNIX:
Повторите ввод нового пароля UNIX:
Passwd: пароль успешно обновлён
User@B1A406C02:/home$ sudo passwd user_8_5
Введите новый пароль UNIX:
Повторите ввод нового пароля UNIX:
Passwd: пароль успешно обновлён
User@B1A406C02:/home$ sudo passwd teacher_8
Введите новый пароль UNIX:
Повторите ввод нового пароля UNIX:
Passwd: пароль успешно обновлён
21. Создать директорию labs в корневом каталоге. В нем создать каталог library
User@B1A406C02:/home$ cd ..
User@B1A406C02:/$ sudo mkdir labs
User@B1A406C02:/$ cd labs
User@B1A406C02:/labs$ sudo mkdir library
22. Создать файлы book_[фамилия студента]_N и поместить их в library
User@B1A406C02:/$ cd labs/library
User@B1A406C02:/labs/library$ sudo touch book_Popova_1
User@B1A406C02:/labs/library$ sudo touch book_Popova_2
User@B1A406C02:/labs/library$ sudo touch book_Popova_3
User@B1A406C02:/labs/library$ sudo touch book_Popova_4
User@B1A406C02:/labs/library$ sudo touch book_Popova_5
23. В директории labs создать файл list, который должен содержать список файлов директории /etc.
User@B1A406C02:/labs/library$ cd ..
User@B1A406C02:/labs$ sudo touch list
User@B1A406C02:/labs$ ls /etc
acpi hdparm.conf popularity-contest.conf
adduser.conf host.conf ppp
adjtime hostname profile
alternatives hosts profile.d
anacrontab hosts.allow protocols
apg.conf hosts.deny pulse
apm hp python
apparmor ifplugd python2.7
apparmor.d init python3
apport init.d python3.3
apt initramfs-tools rc0.d
aptdaemon inputrc rc1.d
at-spi2 insserv rc2.d
avahi insserv.conf rc3.d
bash.bashrc insserv.conf.d rc4.d
bash_completion iproute2 rc5.d
bash_completion.d issue rc6.d
blkid.conf kbd rcS.d
blkid.tab kernel remote-login-service.conf
bluetooth kernel-img.conf resolvconf
brlapi.key kerneloops.conf resolv.conf
brltty ldap rmt
brltty.conf ld.so.cache rpc
ca-certificates ld.so.conf rsyslog.conf
ca-certificates.conf ld.so.conf.d rsyslog.d
calendar legal samba
chatscripts libaudit.conf sane.d
checkbox.d libnl-3 securetty
colord.conf libpaper.d security
compizconfig libreoffice selinux
ConsoleKit lightdm sensors3.conf
console-setup lintianrc sensors.d
cracklib locale.alias services
cron.d localtime sgml
cron.daily logcheck shadow
cron.hourly login.defs shadow-
cron.monthly logrotate.conf shells
crontab logrotate.d signond.conf
cron.weekly lsb-base signon-ui
cups lsb-base-logging.sh skel
cupshelpers lsb-release snmp
dbus-1 ltrace.conf speech-dispatcher
debconf.conf magic ssh
debian_version magic.mime ssl
default mailcap sudoers
deluser.conf mailcap.order sudoers.d
depmod.d manpath.config sysctl.conf
dhcp mime.types sysctl.d
dhcp3 mke2fs.conf systemd
dictionaries-common modprobe.d terminfo
dnsmasq.d modules thunderbird
doc-base motd timezone
dpkg mtab timidity
drirc mtab.fuselock ts.conf
emacs mtools.conf ucf.conf
environment nanorc udev
firefox netscsid.conf udisks2
fonts network ufw
foomatic NetworkManager updatedb.conf
fstab networks update-manager
fstab.d newt update-motd.d
fuse.conf nsswitch.conf update-notifier
gai.conf obex-data-server UPower
gconf openal upstart-xsessions
gdb opt usb_modeswitch.conf
ghostscript os-release usb_modeswitch.d
gnome pam.conf vim
gnome-app-install pam.d vtrgb
gnome-settings-daemon papersize wgetrc
groff passwd wildmidi
group passwd- wodim.conf
group- pcmcia wpa_supplicant
grub.d perl X11
gshadow pkcs11 xdg
gshadow- pm xml
gtk-2.0 pnm2ppa.conf xul-ext
gtk-3.0 polkit-1 zsh_command_not_found
24.Дать право на изменение файла только пользователю teacher_[номер варианта], а на чтение пользователям группы workers.
В системе обнаружен баг. Он проявлялся 30.12.2019 с 21:30:00 до 21:39:59. Допустим надо найти ошибки 500 в этот промежуток.
Пример вывода 235.243.133.78 - - [30/12/2019:21:35:47 +0000] "PATCH /customers HTTP/1.1" 400 3264
Как написать команду?
grep работает не с датами, а с символами, и вам нужно искать последовательность символов, присутствующую во всех строках даты/времени в этом интервале, а затем искать ошибку 500 в найденном:
grep работает не с датами, а с символами, и вам нужно искать последовательность символов, присутствующую во всех строках даты/времени в этом интервале, а затем искать ошибку 500 в найденном:
Понял примерно. А как сделать в одном запросе, чтобы отобразились все записи в такой промежуток "Он проявлялся 30.12.2019 и 31.12.2019 с 21:30:00 до 21:39:59" и поместить эти записи в отдельный файл, например bug.txt
А как сделать в одном запросе, чтобы отобразились все записи в такой промежуток "Он проявлялся 30.12.2019 и 31.12.2019 с 21:30:00 до 21:39:59" и поместить эти записи в отдельный файл, например bug.txt
Целиком задание звучит так, как написать команды?
В системе обнаружен баг. Он проявлялся 30.12.2019 и 31.12.2019 с 21:30:00 до 21:39:59. При этом появлялись ошибки с номерами 400 и 500. Твоя задача — сохранить в отдельный файл логи, которые были записаны в этот период.
Затем эти логи надо разложить по отдельным файлам: логи с одинаковой ошибкой положи в один файл. Как это сделать:
В домашней директории на удалённом сервере создай директорию bug1.
Все запросы, которые произошли в указанный период, положи в файл main.txt.
Внутри директории bug1 создай директорию events.
Внутри директории events создай файлы для ошибок с номерами 400 и 500. Назови эти файлы 400.txt и 500.txt соответственно. В них выдели логи с соответствующей ошибкой из файла main.txt.
В ответе приложи:
команды, которые создают директории bug1 и events;
команду, которой ты выбираешь запросы за указанный период. Это те запросы, которыми ты отбираешь логи в файл main.txt;
команды, которыми ты кладёшь логи в файлы 400.txt и 500.txt из main.txt;
тексты файлов 400.txt и 500.txt.
Лекции
Лабораторные
Справочники
Эссе
Вопросы
Стандарты
Программы
Дипломные
Курсовые
Помогалки
Графические
Удали красный текст и впиши свои ответы.
Задание 1
Команда или последовательность команд, которой удалось получить нужные логи.
cat /var/log/messages |grep 184.79.247.161
или
logread |grep 184.79.247.161
Логи:
184.79.247.161 - - [30/12/2019:21:38:13 +0000] "PUT /alerts HTTP/1.1" 400 3557
Команды, которые создают директории bug1 и events.
mkdir bug1 && mkdir events
Команда, которой выбираешь запросы за указанный период. Это те запросы, которыми ты отбираешь логи в файл main.txt.
Извлечь события, которые произошли четыре дня назад от текущей даты;
grep "$(date -d '6 day ago' +'%b %d'| sed 's/0//')" /var/log/messages > main.txt
Чтобы получить логи от конкретной даты и времени на основе формата даты в файле журнала, например, 8th April, 09:22;
grep "$(date -d '6 day ago' +'%b %d 09:22' | sed 's/0//')" /var/log/messages > main.txt
Чтобы получить строки определенного диапазона дат, скажем, с 6 по 7 апреля;
grep -E "Apr 6|Apr 7" /var/log/messages > main.txt
Команды, которыми ты кладёшь логи в файлы 400.txt и 500.txt из main.txt.
Я думаю, многие сталкивались с задачей, когда к Вам приходят и спрашивают: «У нас тут файл пропал на общем ресурсе, был и не стало, похоже кто-то удалил, Вы можете проверить кто это сделал?» В лучшем случае вы говорите, что у вас нет времени, в худшем пытаетесь найти в логах упоминание данного файла. А уж когда включен файловый аудит на файловом сервере, логи там, мягко говоря «ну очень большие», и найти что-то там — нереально.
Вот и я, после очередного такого вопроса (ладно бекапы делаются несколько раз в день) и моего ответа, что: «Я не знаю кто это сделал, но файл я Вам восстановлю», решил, что меня это в корне не устраивает…
Начнем.
Для начала включим к групповых политиках возможность аудита доступа к файлам и папкам.
Локальные политики безопасности->Конфигурация расширенной политики безопасности->Доступ к объектам
Включим «Аудит файловой системы» на успех и отказ.
После этого на необходимые нам папки необходимо настроить аудит.
Проходим в свойства папки общего доступа на файловом сервере, переходим в закладку «Безопасность», жмем «Дополнительно», переходим в закладку «Аудит», жмем «Изменить» и «Добавить». Выбираем пользователей для которых вести аудит. Рекомендую выбрать «Все», иначе бессмысленно. Уровень применения «Для этой папки и ее подпапок и файлов».
Выбираем действия над которыми мы хотим вести аудит. Я выбрал «Создание файлов/дозапись данных» Успех/Отказ, «Создание папок/дозапись данных» Успех/отказ, Удаление подпапок и файлов и просто удаление, так же на Успех/Отказ.
Жмем ОК. Ждем применения политик аудита на все файлы. После этого в журнале событий безопасности, будет появляться очень много событий доступа к файлам и папкам. Количество событий прямопропорционально зависит от количества работающих пользователей с общим ресурсом, и, конечно же, от активности использования.
Итак, данные мы уже имеем в логах, остается только их оттуда вытащить, и только те, которые нас интересуют, без лишней «воды». После этого акурратно построчно занесем наши данные в текстовый файл разделяя данные симовлами табуляции, чтобы в дальнейшем, к примеру, открыть их табличным редактором.
А теперь очень интересный скрипт.
Скрипт пишет лог об удаленных файлах.
Т.е. берутся все события с ID 4660. У них берется 2 свойства, время создания и порядковый номер.
Далее в цикле по одному берется каждое событие 4660. Выбирается его свойства, время и порядковый номер.
Далее в переменную $PrevEvent заносится номер нужного нам события, где содержится нужная информация об удаленном файле. А так же определяются временные рамки в которых необходимо искать данное событие с определенным порядковым номером (с тем самым который мы занесли в $PrevEvent). Т.к. событие генерируется практически одновременно, то поиск сократим до 2х секунд: + — 1 секунда.
(Да, именно +1 сек и -1 сек, почему именно так, не могу сказать, было выявлено экспериментально, если не прибавлять секунду, то некоторые может не найти, возможно связано с тем, что возможно два эти события могут создаваться один раньше другой позже и наоборот).
Сразу оговорюсь, что искать только по порядковому номеру по всем событиям в течении часа — очень долго, т.к. порядковый номер находиться в теле события, и чтобы его определить, нужно пропарсить каждое событие — это очень долго. Именно поэтому необходим такой маленький период в 2 секунда (+-1сек от события 4660, помните?).
Именно в этом временном промежутке ищется событие с необходимым порядковым номером.
После того как оно найдено, работают фильтры:
Т.е. не записываем информацию об удаленных временных файлах (.*tmp), файлах блокировок документов MS Office (.*lock), и временных файлах MS Office (.*~$*)
Таким же образом берем необходимые поля из этого события, и пишем их в переменную $BodyL.
После нахождения всех событий, пишем $BodyL в текстовый файл лога.
Для лога удаленных файлов я использую схему: один файл на один месяц с именем содержащим номер месяца и год). Т.к. удаленных файлов в разы меньше чем файлов к которым был доступ.
В итоге вместо бесконечного «рытья» логов в поисках правды, можно открыть лог-файл любым табличным редактором и просмотреть нужные нам данные по пользователю или файлу.
Рекомендации
Вам придется самим определить время в течении которого вы будете искать нужные события. Чем больше период, тем дольше ищет. Все зависит от производительности сервера. Если слабенький — то начните с 10 минут. Посмотрите, как быстро отработает. Если дольше 10 минут, то либо увеличьте еще, вдруг поможет, либо наоборот уменьшите период до 5 минут.
После того как определите период времени. Поместите данный скрипт в планировщик задач и укажите, что выполнять данный скрипт необходимо каждые 5,10,60 минут (в зависимости какой период вы указали в скрипте). У меня указано каждый 60 минут. $time = (get-date) — (new-timespan -min 60).
У меня оба эти скрипта работают для сетевого ресурса в 100Гб, на котором ежедневно активно работают в среднем 50 пользователей.
Время поиска удаленных файлов за час — 10-15 минут.
Время поиска всех файлов, к которым был доступ — от 3 до 10 минут. В зависимости от нагрузки на сервер.
Просмотреть содержимое директорий /etc, /proc, /home. Посмотреть пару произвольных файлов в /etc.
- Используя команду ls /$DIRNAME просматриваем содержимое директории. Команда cat /etc/$FILENAME позволяет просмотреть файлы
Выяснить, для чего предназначена команда cat. Используя данную команду, создать два файла с данными, а затем объединить их. Просмотреть содержимое созданного файла. Переименовать файл, дав ему новое имя.
Создать несколько файлов. Создать директорию, переместить файл туда. Удалить все созданные в этом и предыдущем задании директории и файлы.
- Переместить файл в директорию можно командой mv $FILENAME $DIRNAME . Удаляем все файлы командой rm -r находясь в директории практического занятия
В ОС Linux скрытыми файлами считаются те, имена которых начинаются с символа “.”. Сколько скрытых файлов в вашем домашнем каталоге? (Использовать конвейер. Подсказка: для подсчета количества строк можно использовать wc.)
- Конвейер ls -ld .?* | wc -l выведет количество скрытых файлов в текущей директории, в моем домашнем каталоге их 16
- Командой cat /etc/* 2> catalogs отправляем ошибочные выводы в файл "catalogs", потом считаем строки в файле wc -l catalogs . У меня вышло 126
Запустить в одном терминале программу, а в другом терминале посмотреть PID процесса и остановить с помощью kill, посылая разные типы сигналов. Что происходит?
- В зависимости от типа сигнала процесс переходит в определенный статус, например kill -9 $PID завершит процесс сразу
Отобразить в /dev список устройств, которые в настоящее время используются вашим UID (для этого используется команда lsof). Организовать конвейер через less, чтобы посмотреть их должным образом.
Cоздать директорию для хранения фотографий. В ней должны быть директории по годам (например, за последние 5 лет), и в каждой директории года — по директории для каждого месяца.
Заполнить директории файлами вида ГГГГММДДНН.txt. Внутри файла должно быть его имя. Например: 2018011301.txt, 2018011302.txt.
- Используем команду ls -lA в сочетании с конвейером для выполнения условий задания. Вывод:
- добавляем |wc -l и подстчет выдает нам 10 типов разрешений
Файлы и права доступа в Linux
Создать файл file1 и наполнить его произвольным содержимым. Скопировать его в file2. Создать символическую ссылку file3 на file1. Создать жесткую ссылку file4 на file1. Посмотреть, какие айноды у файлов. Удалить file1. Что стало с остальными созданными файлами? Попробовать вывести их на экран.
- Файлы file1 и file4 будут иметь одинаковые айноды. После удаления останутся все файлы, кроме file1, при этом символическая ссылка будет битой, а при входе по ней в текстовый редактор будет создан новый файл file1.
Дать созданным файлам другие, произвольные имена. Создать новую символическую ссылку. Переместить ссылки в другую директорию.
- Как от переименования, так и от перемещения пострадают только символьные ссылки, так как они будут ссылаться или не натот файл, или не по тому пути.
Создать два произвольных файла. Первому присвоить права на чтение, запись для владельца и группы, только на чтение — для всех. Второму присвоить права на чтение, запись — только для владельца. Сделать это в численном и символьном виде.
- chmod 664 file1 && chmod 644 file2 в числовом виде и chmod ug=rw,o=r file1 && chmod u=rw,og=r file2 в символьном(можно также использовать +-, если известны права доступа).
Создать пользователя, обладающего возможностью выполнять действия от имени суперпользователя.
- на выбор useradd или adduser быстрее всего сделать одной командой useradd -m -G sudo -s /bin/bash adminuser
Создать группу developer и несколько пользователей, входящих в нее. Создать директорию для совместной работы. Сделать так, чтобы созданные одними пользователями файлы могли изменять другие пользователи этой группы.
- Создаем группу командой groupadd developer , затем создаем новых пользователей командами из предыдущей задачи указав необходиму группу или добавляем существующих пользователей в группу при помощи usermod -aG developer $USERNAME . На каталоге меняем группу рекурсивно chgrp -R developer , затем меняем права chmod -R 2775 newpol 2 - setGID означает, что все новые файлы наследуют группу каталога.
Создать в директории для совместной работы поддиректорию для обмена файлами, но чтобы удалять файлы могли только их создатели.
- Если добавить атрибут t на каталог, то удалить файлы из него смогут только владельцы
Создать директорию, в которой есть несколько файлов. Сделать так, чтобы открыть файлы можно было, только зная имя файла, а через ls список файлов посмотреть было нельзя.
Bash, скрипты и автоматизация
Написать скрипт, который удаляет из текстового файла пустые строки и заменяет маленькие символы на большие (воспользуйтесь tr или sed).
- Скрипт chscript.sh для выполнения указанной задачи добавлен в репозиторий
Создать скрипт, который создаст директории для нескольких годов (2010 — 2017), в них — поддиректории для месяцев (от 01 до 12), и в каждый из них запишет несколько файлов с произвольными записями (например, 001.txt, содержащий текст«Файл 001», 002.txt с текстом Файл 002) и т. д.
- Скрипт dirmaker.sh для выполнения указанной задачи добавлен в репозиторий
Создать файл crontab, который ежедневно регистрирует занятое каждым пользователем дисковое пространство в его домашней директории.
- Задачу cron нужно запустить от root пользователя, чтобы иметь доступ ко всем данным. Строка команды в crontab будет выглядеть так @daily date >> /var/log/diskspacemonitor; du -hs /home/* >> /var/log/diskspacemonitor
Создать скрипт ownersort.sh, который в заданной папке копирует файлы в директории, названные по имени владельца каждого файла. Учтите, что файл должен принадлежать соответствующему владельцу.
- Скрипт ownersort.sh добавлен в репозиторий, настроен на копирование без рекурсии, для копирования всех файлов убрать -maxdepth 1 из параметров
Сетевые возможности Linux
Произвести ручную настройку сети в Ubuntu.
- задаем адрес c помощью ifconfig предварительно установив пакет net-tools. ifconfig eth0 10.10.10.10 netmask 255.255.255.0 , затем добавляем роут route add default gw 10.10.10.1 eth0
Переключить настройку сети на автоматическую через DHCP, проверить получение адреса.
- переходим в директорию /etc/network/interfaces прописываем следующие строки и перезапускаем службу networking
- Способов несколько, один из них добавление в /etc/network/interfaces строки dns-nameservers 1.1.1.1 , я отредактировал файл /etc/resov.conf, до перезагрузки будут действовать установленные настройки
Настроить правила iptables, чтобы из внешней сети можно было обратиться только к портам 80 и 443.
- Очищаем текущие правила приема iptables -F INPUT добавляем новые
Дополнительно к предыдущему заданию настроить доступ по ssh только из указанной сети.
Читайте также: