Ну чо, кто на ёлку богат уже? Кидайте в комменты ёлки и своё пятничное настроение, пиво там, вискарь или чо там у вас.
Добро пожаловать в канал "Линукс и DevOps Дни"! Если вы увлечены разработкой, devops, linux, скриптами, тестированием, сисадминством, техдирством, пиэмством и айтишной жизнью, то вы попали по адресу. Наш канал предлагает уникальный контент, посвященный этим темам, который поможет вам расширить ваше знание и навыки в области информационных технологий. Здесь вы найдете обзоры последних технологических новинок, полезные советы по работе с linux, разработке и тестированию программного обеспечения, а также обмен опытом с опытными специалистами. Присоединяйтесь к нашему каналу "Линукс и DevOps Дни" и станьте частью активного сообщества профессионалов, готовых делиться своими знаниями и опытом с вами.
13 Dec, 17:22
11 Dec, 19:31
11 Dec, 09:33
Error in file "script.py" on line 42: NameError: name 'variable' is not defined
script.py
сразу на 42 строке.( printf '%s\n' {A..Z}-$[++I] > /tmp/bashdays.txt )
A-1
B-2
C-3
D-4
E-5
F-6
G-7
H-8
I-9
...
mcedit +7 /tmp/bashdays.txt
less -w +11 /tmp/bashdays.txt
nano +14 /tmp/bashdays.txt
vim +4 /tmp/bashdays.txt
09 Dec, 15:22
chmod -R +X ./
установит возможность поиска во всех подкаталогах текущего, но не сделает все файлы исполняемыми!filXXX_Ohd1Ul.txt
Имя файла для каждого филиала всегда одно и то же, префикс - название филиала, суффикс набор букв (защита от перебора).07 Dec, 11:19
10.10.10.10
).~/.ssh/authorized_keys
shell10.sh
(666 root:root)
#!/bin/bash
set -o errexit
set -o nounset
set -o pipefail
ssh $USER.10.10.10 2>/dev/null
sudo usermod -s /home/Tagd83j6/shell10.sh Tagd83j6
~/.ssh/authorized_keys
su Tagd83j6
06 Dec, 12:40
ss|grep ip
- Видно, машина работает с 1с.ping ip
- машина не пингуется.nmap -Pn ip
- все порты < 1000 закрыты.arp ip
- показывает macsudo arping -I enp3s4 ip
- машина пингуется.sudo iptables -I INPUT -s ip -j REJECT
03 Dec, 13:19
rm /var/log/nginx/access.log
access.log
пропал и больше не появляется? Nginx то в данный момент работает, запросы на него идут.sudo > /var/log/nginx/access.log
rm
ёбнул само собой дескриптор потерялся и nginx охуевает.sudo truncate -s 0 /var/log/nginx/access.log
-s 0 =
обрезать файл до нулевого размера. В этом случае дескриптор также не будет потерян и nginx продолжит писать непотребности.sudo kill -USR1 <pid>
<pid> = PID
процесса. После выполнения этой команды файл с логов превратится в access.log.1
и откроется новый access.log
.rm
и т.п.30 Nov, 17:19
29 Nov, 17:57
29 Nov, 13:00
snap install chezmoi
28 Nov, 11:14
ChezMoi.
.bashrc
, .vimrc
, .gitconfig
) на нескольких устройствах.ChezMoi
как раз всю эту рутину берет на себя. Из коробки есть синхронизация между устройствами, поддержка git, создание набора конфигураций для разных ОС, шаблоны и куча еще всякого.snap install chezmoi --classic
chezmoi init
chezmoi add ~/.bashrc
~/.local/share/chezmoi/dot_bashrc
chezmoi edit ~/.bashrc
chezmoi diff
.bashrc
в следствии экспериментов, как откатиться?chezmoi -v apply
chezmoi cd
git add .
git commit -m "Initial commit"
git remote add origin git.com:$GITHUB_USERNAME/dotfiles.git
git branch -M main
git push -u origin main
~/.local/share/chezmoi
ну а дальше база гита.chezmoi init https://github.com/$GITHUB_USERNAME/dotfiles.git
24 Nov, 13:01
SIGRTMIN+0 - SIGRTMIN+7
для передачи битов, SIGRTMIN+8
- признак окончания символа, SIGRTMIN+9
признак окончания сообщения).SEND_CHAR
- "разбирает символ по битам и передает" SEND_MESSAGE
- разбирает сообщение по символам и отдает SEND_CHAR.
chmod +x serv.sh cli.sh
./serv.sh
(он выдаст что-то вроде Listener process 340527)../cli.sh 340527
(нужно подставить ваш номер процесса).#/bin/bash
#serv.sh
declare -i ASC=0
declare MSG=
declare DELAY=0.01
handle_signal() {
case "$1" in
W) MSG=${MSG}$(printf "\x$(printf %x $ASC)")
ASC=0 ;;
M) echo $MSG;MSG=;;
*) ((ASC+=$1));;
esac
}
#RTMIN=34
trap 'handle_signal 1' RTMIN+0
trap 'handle_signal 2' RTMIN+1
trap 'handle_signal 4' RTMIN+2
trap 'handle_signal 8' RTMIN+3
trap 'handle_signal 16' RTMIN+4
trap 'handle_signal 32' RTMIN+5
trap 'handle_signal 64' RTMIN+6
trap 'handle_signal 128' RTMIN+7
trap 'handle_signal W' RTMIN+8
trap 'handle_signal M' RTMIN+9
echo Listener process $$
while :;do
sleep $DELAY
done
#!/bin/bash
#cli.sh
if [[ -z $1 ]];then
echo Need server PID
exit
fi
declare -ir SERV_PID=$1
declare MESSAGE=BashBays
declare -ir RTM=34
function DELAY(){ sleep 0.02;}
function SEND_CHAR(){
local -i i ASC
CUR_CHAR=${1:-" "}
printf -v ASC "%d" "'$CUR_CHAR"
for i in {0..7};do
if [[ $(($ASC%2)) -eq 1 ]];then
# echo kill '-'$(($i+$RTM)) $SERV_PID
kill '-'$(($i+$RTM)) $SERV_PID
DELAY
fi
((ASC/=2))
done
# echo kill '-'$((8+$RTM)) $SERV_PID
kill '-'$((8+$RTM)) $SERV_PID
DELAY
}
function SEND_MESSAGE(){
local CUR_CHAR
local MESSAGE=${1:-BashDays}
local i
echo Send message \"$MESSAGE\" to Server PID=$SERV_PID
for ((i = 0 ; i < ${#MESSAGE} ; i++));do
SEND_CHAR ${MESSAGE:$i:1}
done
# echo kill '-'$((9+$RTM)) $SERV_PID
kill '-'$((9+$RTM)) $SERV_PID
DELAY
}
while [[ $MESSAGE ]];do
SEND_MESSAGE "$MESSAGE"
read -p "Input new message:" MESSAGE
done
SIGRTMIN
не прерывает выполнение команд bash). Т.е если выполняется sleep 10m. То обработки можно ждать долго.23 Nov, 18:48
22 Nov, 13:09
22 Nov, 13:09
22 Nov, 10:53
21 Nov, 10:05
19 Nov, 12:08
kill -l
.22 static int current_rtmin = __SIGRTMIN + 2;
23 static int current_rtmax = __SIGRTMAX;
17 Nov, 13:28
whois
. apt install whois
whois 164.92.216.105
whois
в скриптах не рекомендую, потому что для этого, во-первых, есть специальные базы, а во вторых - забанят.NetRange:164.92.64.0 - 164.92.255.255
CIDR:164.92.128.0/17, 164.92.64.0/18
164.92.128.0/17
и 164.92.64.0/18
и все будет хорошо, но так бывает не всегда.whois 114.199.33.115
inetnum: 114.199.0.0 - 114.199.63.255
apt install ipcalc
ipcalc -r 164.92.64.0 - 164.92.255.255
#вывод
deaggregate 164.92.64.0 - 164.92.255.255
164.92.64.0/18
164.92.128.0/17
ipcalc -r 114.199.0.0 - 114.199.63.255
# вывод
deaggregate 114.199.0.0 - 114.199.63.255
114.199.0.0/18
127.0.0.1-192.168.1.1
или 0.0.0.1-255.255.255.254
Вот только банить их не нужно. А вот разбивать диапазон 0.0.0.0 255.255.255.255
не рекомендую, а почему не скажу. Кто еще какими сетевыми калькуляторами пользуется?15 Nov, 17:11
15 Nov, 07:15
iptables
использует только нотацию CIDR. Например, подсеть /32 задает отдельный ip, поэтому правила, содержащие одиночный адрес, задаются с маской /32, даже если вы это не указали. (192.168.0.1=192.168.0.1/32
) 192.168.0.1
и 192.168.0.0
можно объединить в 192.168.0.0/31
, а 192.168.0.1
и 192.168.0.2
- нельзя.ipcalc
и sipcalc
.apt install ipcalc sipcalc
sipcalc 192.168.0.1/32
# вывод
Host address - 192.168.0.1
Network address - 192.168.0.1
Network mask (bits) - 32
Broadcast address - 192.168.0.1
Addresses in network - 1
Network rang - 192.168.0.1 - 192.168.0.1
ipcalc -b 192.168.0.1/32
# вывод
Address: 192.168.0.1
Netmask: 255.255.255.255 = 32
Hostroute: 192.168.0.1
Hosts/Net: 1
sipcalc 192.168.0.1/31
# вывод
Host address - 192.168.0.1
Network address - 192.168.0.0
Network mask (bits) - 31
Broadcast address - 192.168.0.1
Addresses in network - 2
Network range - 192.168.0.0 - 192.168.0.1
ipcalc -b 192.168.0.1/31
# вывод
Address: 192.168.0.1
Netmask: 255.255.255.254 = 31
Network: 192.168.0.0/31
HostMin: 192.168.0.0
HostMax: 192.168.0.1
Hosts/Net: 2
ipcalc
для такой экзотики работает более правильно, поскольку Broadcast для подсетей >30 не выводится.08 Nov, 10:46
sudo apt install xrdp
sudo dpkg-reconfigure xserver-xorg-legacy
# выбрать подключения "от кого угодно"
/etc/xrdp
основной файл xrdp.ini
.)sudo apt install freerdp2-x11
alias rdp='function _rdp(){ xfreerdp /h:700 /w:1300 /cert-ignore /v:"$@";}; _rdp '
/cert-ignore
- нужно для подключения к виндовым серверам, поскольку они раз в 120? дней меняют сертификаты, и приходится ручками удалять хэш из файла.rdp 192.168.1.100
# или так
rdp 192.168.1.100 /u:username
xrdp.ini
Поставить логотип конторы и прописать название сервера в заголовке окна. Удобно.).xsession-errors .xorgxrdp.log
) Решается отключением логирования в ini или ссылкой этих файлов в /dev/null.
05 Nov, 10:32
03 Nov, 10:15
echo "1"|
while read; do
echo $REPLY,2
done
# на
echo "1"| read
echo $REPLY,2
1,2
,2
echo "1"| (read;echo $REPLY,2)
#или так
read < <(echo "1")
echo $REPLY,2
# если переменная одна то классика
a=$(echo 1)
31 Oct, 11:38
#!/bin/bash
#8 ферзей
awk 'BEGIN{
i=8^8
while(i--){
c=sprintf("%08o",i)
j=8
while(index(c,--j)){}
if(j<0){
j=8
while(j--){q[j]=substr(c,j+1,1)}
b=1
for(m=0;m<7 && b;m++){
for(j=m+1;j<8;j++){
a=q[m]-q[j];sub(/-/,"",a)
if(a==(j-m)){b=0;break}}}
if(b){print c}
}}}'
#---
while(index(c,--j)){}
- чисел всего 8(0-7), если index=0
(нет цифры j в числе с из 8 цифр, значит каких-то цифр 2).while(j--){q[j]=substr(c,j+1,1)}
- преобразовали число c в массив цифр q[]
sub(/-/,"",a)
- еще один аналог модуля.30 Oct, 12:25
awk
недооцененным. Большинство примеров сводится к тому, чтобы убрать лишние колонки из отчета.AWK
, практически полноценный язык программирования. #!/bin/bash
#8 ферзей
awk 'BEGIN{
for(c[0]=8;c[0]--;){
for(c[1]=8;c[1]--;){
for(c[2]=8;c[2]--;){
for(c[3]=8;c[3]--;){
for(c[4]=8;c[4]--;){
for(c[5]=8;c[5]--;){
for(c[6]=8;c[6]--;){
for(c[7]=8;c[7]--;){
b=1
for(i=0;i<7 && b;i++){
for(j=i+1;j<8;j++){
if(c[i]==c[j]){b=0;break}
a=c[i]-c[j];n=j-i
if(a==n || a==-n){b=0;break}}}
if(b){print c[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7] }
}}}}}}}}
}'
c[i]==c[j])
- проверка на горизонталь.a=c[i]-c[j];n=j-i
- проверка на диагональ.abs(c[i]-c[j])
, но в awk
нет модуля, поэтому if(a==n || a==-n)
awk
оператор break
выходит из одного цикла, поэтому пришлось немного извращаться. (&& b)
, но задача решена.04752613
Время выполнения на моем дохлом ноуте ~1.5 минуты.30 Oct, 12:25
28 Oct, 10:40
strace
и как применять инъекции. Если пропустил, то читай тут и тут.#!/usr/bin/perl
use strict;
use warnings;
my %numbs;
select STDERR;
while(<STDIN>) {
if( /^[0-9]++\s++([a-z0-9_]++(?=\())/ ) {
my $t = ++$numbs{$1};
s/\s+/ \e[31m$t\e[m /;
die $! if( keys %numbs == 1000 );
}
print;
}
exit(0);
num_syscalls
и делаем chmod +x
, ну а дальше запускаем в связке с strace
:strace -o'|./num_syscalls' -yf sh -c 'ls|cat'
456107 48 close(3</usr/) = 0
456107 52 rt_sigreturn({mask=[]})
456107 63 openat(AT_FDCWD</usr/local/sbin>)
456107 53 newfstatat(3)
456107 64 openat(AT_FDCWD</usr/local/sbin>)
openat
, видим 63, 64. Это значит что openat
был вызван 64 раза. А newfstatat
53.strace
отправляется в stderr
, чтобы иметь возможность разделять вывод трассировки и вывод исследуемой программы.strace -o'|./num_syscalls' -yf ls > /dev/null
\e[31m\[em
».24 Oct, 12:19
apt update && apt upgrade && apt install mc
.23 Oct, 09:48
23 Oct, 07:59
22 Oct, 11:20
asdfbgroot
, но попытки перебора фиксировать, когда совпадает первая часть.20 Oct, 11:02
http:// https:// ftp://.
ssh user.dom.
Ну, ничего страшного.ssh addr.dom.
ssh addr.dom
не поленитесь и добавьте пользователя test.dom
, чтобы не светить свой реальный логин.16 Oct, 15:23
pfsense
. Да, без картинок воспринимается не очень, но это лучше, чем ничего.pfsense
позволяет работать с usb модемами, и подключениями типа pptp, pppoe и другими. Сейчас практически любой домашний роутер может работать как pptp сервер.15 Oct, 14:49
11 Oct, 15:20
07 Oct, 12:34
scp
, поскольку кроме копирования позволяет управлять правами доступа.ftp
- возможность работы через один порт (легко пробрасывается) Протокол защищенный.ssh
- как правило, есть доступ и по sftp
.sftp
, например, чтобы заливать архивы, но совсем не хочется давать возможность шариться по серваку и смотреть, что там крутится.sudo apt install mysecureshell
sftp
сервер с возможностью управления пользователями, группами, управление скоростью закачки и отдачи, можно просматривать текущие сессии и прибивать ненужные.cat /etc/shells
sudo usermod -s /usr/bin/mysecureshell username
/etc/ssh/sftp_config
sshfs
(монтирование через ssh
(по факту через sftp
)).rsync
, говорят не дружит, но я лично не проверял. Приводить примеры конфигурирования не стал, потому что там все очень понятно и прозрачно. Документация приличная, сам конфиг очень классно комментирован. 06 Oct, 11:36