Привет, дело было вечером, делать было нечего. Начнем это утро с мнемоники прав доступа. Оно нам сегодня вечером пригодится. Возможно будет сумбурно, но постараюсь разжевать. А вечером будем заниматься хитрой стеганографией на bash, как раз с помощью прав доступа.
Для стандартных трех троек прав доступа справедливо следующее:
Сразу обрати внимание на разряды с единицей (1) в двоичной системе счисления. Они соответствуют позициям прав доступа в символьном представлении из вывода команды ls -l.
Наглядная табличка соответствий:
Если на пальцах, у нас есть 3 базовых цифры 1, 2, 4 которые означают такое:
Берем эти цифры, складываем как угодно и получаем например 7, что равно 1+2+4 = rwx (читаем, пишем, исполняем).
Ладно, большинству из вас оно нахрен не вперлось, но я продолжу. У меня коллега например всегда всем ставит 777 даже не задумываясь. Мол всё работает и никогда нет проблем с доступом к файлам и папкам. Ну ок, возможно однажды встретит своего черношляпа и пересмотрит свои практики. Работает кстати в крупном банке. Только представь какой 3.14здец на серверах у него творится где наши денюжки лежат.
Давай по теме. Создаем массив:
Получаем права в двоичной системе счисления:
На экран выведется:
В bash при указании индекса массива можно применять арифметические операции. Давай воспользуемся и наглядно посмотрим как суммируются права доступа.
Получаем:
То есть когда мы делали arr[1] у нас было 000, а когда применили сложение arr[1+2], 000+001 = 011.
В общем математика и кишочки. Голову сильно не забивай, в повседневных задачах достаточно восьмеричной и символичной системы счислений. Из полезного: теперь ты знаешь как создавать массивы и складывать их.
Ну и на закуску команда, которая выведет права в восьмеричной системе:
Получим такое:
Не забываем что у всей этой ерунды есть еще дополнительные биты, это когда права указываются четырьмя цифрами.
Короче базу рассмотрели, если ничо не понял, забей. Это как Джаз, чтобы от него блевать не хотелось, нужно стать старым пердуном. Но мы же с вами еще так молоды!
Увидимся вечером. Хорошего понедельника!
tags: #linux #bash
—
💩 @bashdays
Для стандартных трех троек прав доступа справедливо следующее:
4 2 1 # восьмеричная система
r-- -w- --x # символьное представление
100 010 001 # двоичная система
Сразу обрати внимание на разряды с единицей (1) в двоичной системе счисления. Они соответствуют позициям прав доступа в символьном представлении из вывода команды ls -l.
Наглядная табличка соответствий:
- 0: 000 / —Если требуется определенный набор прав, то складываем 4, 2, 1. Первая строка это, права, которые получаются при сложении.
- 1: 001 / –x
- 2: 010 / -w-
- 3: 011 / -wx
- 4: 100 / r–
- 5: 101 / r-x
- 6: 110 / rw-
- 7: 111 / rwx
3 5 6 7
1+2 1+4 2+4 1+2+4
-wx r-x rw- rwx
011 101 110 111
Если на пальцах, у нас есть 3 базовых цифры 1, 2, 4 которые означают такое:
4 = r
2 = w
1 = x
Берем эти цифры, складываем как угодно и получаем например 7, что равно 1+2+4 = rwx (читаем, пишем, исполняем).
Ладно, большинству из вас оно нахрен не вперлось, но я продолжу. У меня коллега например всегда всем ставит 777 даже не задумываясь. Мол всё работает и никогда нет проблем с доступом к файлам и папкам. Ну ок, возможно однажды встретит своего черношляпа и пересмотрит свои практики. Работает кстати в крупном банке. Только представь какой 3.14здец на серверах у него творится где наши денюжки лежат.
Давай по теме. Создаем массив:
arr=({0..1}{0..1}{0..1})
Получаем права в двоичной системе счисления:
echo ${arr[1]}
echo ${arr[2]}
echo ${arr[3]}
echo ${arr[4]}
echo ${arr[5]}
echo ${arr[6]}
echo ${arr[7]}
На экран выведется:
000
001
010
011
100
101
110
В bash при указании индекса массива можно применять арифметические операции. Давай воспользуемся и наглядно посмотрим как суммируются права доступа.
echo ${arr[1+2]}
echo ${arr[1+4]}
echo ${arr[2+4]}
echo ${arr[1+2+4]}
Получаем:
010
100
101
110
То есть когда мы делали arr[1] у нас было 000, а когда применили сложение arr[1+2], 000+001 = 011.
В общем математика и кишочки. Голову сильно не забивай, в повседневных задачах достаточно восьмеричной и символичной системы счислений. Из полезного: теперь ты знаешь как создавать массивы и складывать их.
Ну и на закуску команда, которая выведет права в восьмеричной системе:
stat -c'%a %n' /tmp/*
Получим такое:
700 snap-private-tmp
700 ssh-XXXXXX5Fyxmr
700 ssh-XXXXXXENecCm
700 ssh-XXXXXXkPO9QF
700 systemd-logind.tkfPcb
700 systemd-r1KRzA
777 test.txt
Не забываем что у всей этой ерунды есть еще дополнительные биты, это когда права указываются четырьмя цифрами.
Короче базу рассмотрели, если ничо не понял, забей. Это как Джаз, чтобы от него блевать не хотелось, нужно стать старым пердуном. Но мы же с вами еще так молоды!
Увидимся вечером. Хорошего понедельника!
tags: #linux #bash
—