TGViewer
Bash Days | Linux | DevOps Bash Days | Linux | DevOps @bashdays · 23.6K subscribers
Post #192 8.77K
Привет, дело было вечером, делать было нечего. Начнем это утро с мнемоники прав доступа. Оно нам сегодня вечером пригодится. Возможно будет сумбурно, но постараюсь разжевать. А вечером будем заниматься хитрой стеганографией на bash, как раз с помощью прав доступа.

Для стандартных трех троек прав доступа справедливо следующее:

 4    2    1     # восьмеричная система  
r-- -w- --x # символьное представление
100 010 001 # двоичная система


Сразу обрати внимание на разряды с единицей (1) в двоичной системе счисления. Они соответствуют позициям прав доступа в символьном представлении из вывода команды ls -l.

Наглядная табличка соответствий:

- 0: 000 / —
- 1: 001 / –x
- 2: 010 / -w-
- 3: 011 / -wx
- 4: 100 / r–
- 5: 101 / r-x
- 6: 110 / rw-
- 7: 111 / rwx

Если требуется определенный набор прав, то складываем 4, 2, 1. Первая строка это, права, которые получаются при сложении.

 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
—
💩 @bashdays
  • 👍 121
More from @bashdays
  1. Sep 29, 2026Самый жаркий холивар в команде — это не systemd, а какие заказать роллы на всю команду. Од…
  2. Sep 24, 2026Post #1565
  3. Sep 23, 2026Здрасти приехали, решил я в кой-то веке воспользоваться услугами Codex, создал аккаунт, по…
  4. Sep 22, 2026Всем привет, с вами TagdTagd. Сегодня опять поднимем тему архивов, но немного с другой сто…
  5. Sep 15, 2026Всем привет, с вами TagdTagd. И это вторая часть. Практическая. С первой частью можешь озн…
  6. Sep 9, 2026Всем привет, с вами TagdTagd! Я тут вынужденно перешёл на MAX. Просто Telegram перестал ра…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →