Права Доступа

Размышления на тему: Права Доступа

                                                                                                                                                             ........"мир" - число. Пифагор

В Unix каждому файлу соответствует набор прав доступа, представленный в виде 9-ти битов режима,(восьмеричную запись которых можно увидеть в виде 3-х цифр по правилам двоичного кодирования этих восмеричных цифр) Он определяет, какие пользователи имеют право читать файл, записывать в него данные или выполнять его. Вместе с другими тремя битами, влияющими на запуск исполняемых файлов, этот набор образует код режима доступа к файлу. Двенадцать битов режима хранятся в 16-битовом поле индексного дескриптора вместе с 4-мя дополнительными битами, определяющими тип файла. Последние 4 бита устанавливаются при создании файлов и не подлежат изменению. Биты режима (далее права) могут изменяться либо владельцем файла, либо суперпользователем с помощью команды chmod.

Существует "три пути" управления доступом к файлу или каталогу. Было определено, что каждый файл должен иметь: 

Эти названия обычно приводятся как: пользователь/группа/остальные (user/group/others) или коротко ugo. Реализация управления доступом к файлам и каталогам в Unix позволяет или запрещает доступ по трем флагам:

Стандартные права

Посмотреть права доступа на объекты можно командой ls c ключем -l (или более компактно ls -hog). Также можно добавить ключ -a, для того,чтобы были отображены скрытые объекты:

[root@arch-v]# ~ ls

итого 24

-rw-r--r-- 1            root root 31 окт 28 12:14 crontab

drwxr-xr-x 2         root root 4096 ноя 25 15:03 Desktop/

drwxrwxrwx 2      root root 4096 ноя 30 20:34 Mail/

-rw-r--r-- 1            root root 11 май 30 2014 octave-workspace

-rw------- 1            root root 19 окт 21 21:48 

-rw------- 1             root root 195 май 30 2014 text1

В листинге выше используются буквенные обозначения прав (т.н. маска режима доступа), но используютcя, при назначении прав, чаще цифровые обозначения в восьмеричном представлении. Рассмотрим таблицу восьмеричного,  бинарного и символьного сопоставлений. Для назначения обычных прав используются три восьмеричных цифры (9 битов).

Первая цифра определяет -права для владельца файла,

Вторая                                     - права для основной группы пользователя,

Третья                                      - для всех остальных пользователей.

Так, например, чтобы задать права на файл всем и вся, нужно установить права : 777 (rwxrwxrwx).

Существуют также специальные биты или флаги что тождественно слову бит, то есть да или нет 0 или 1, такие как SUID, SGID и Sticky-бит. Идея, лежащая в основе применения бита SUID, состоит в том, что пользователь, запустивший программу, для которой владелец установил бит SUID, на время выполнения программы получает все права ее владельца. Если, например, администратор создал сценарий и установил для него бит SUID, а другой пользователь запускает этот сценарий, привилегии администратора на время выполнения сценария переходят к пользователю. Тот же принцип применим и к биту SGID, только в данном случае меняются привилегии группы, владеющей сценарием. При их применении необходимо использовать не три восьмеричных цифры, а 4. Зачастую, в различной технической литературе права обозначаются именно 4-мя цифрами, например 0744, что конечно верно и более полно (во всяком случае) Пример:

Для первой строки:

     Восьмеричное обозначение прав для файла : 0644.  — стандартный режим доступа для файлов создаваемых системой по средствам umask (666 - 022 = 644) о чем ниже.

----------------------------------------------------------

-rw-r--r-- 1 root root 31 окт 28 12:14   crontab

drwxr-xr-x 2 root root 4096 ноя 25 15:03 Desktop/

drwxrwxrwx 2 root root 4096 ноя 30 20:34 Mail

----------------------------------------------------------

Для второй строки: (это каталог, о чем свидетельствует флаг «d»), по аналогии:

Для владельца каталога root - полные права (rwx).

Для группы root - права только на листинг каталога (r-x).

Для пользователя «все остальные» - права только на листинг каталога (r-x).

Восьмеричное обозначение в этом примере: 0755

Другое прочтение того-же самого

Права доступа и информация о типе файла в UNIX-системах хранятся в индексных дескрипторах  в отдельной структуре, состоящей из двух байтов, т. е. из 16 бит .

Четыре бита из этих 16-ти отведены для кодированной записи о типе файла, определяет тип файла и устанавливаются при создании (более внятно см."индексные дискрипторы") Следующие три бита задают особые свойства исполняемых файлов (suid=4000,sgid=2000,t=1000,) и, наконец, оставшиеся 9 бит определяют права доступа к файлу. Эти 9 бит разделяются на 3 группы по три бита.

При этом, если соответствующий бит имеет значение 1, то право предоставляется, а если он равен Ø, то право не предоставляется. В символьной форме записи прав единица заменяется соответствующим символом (r, w или x), а Ø представляется прочерком.  Без понимания устройства и работы файловой системы (подсистемы), не возможно полное понимание прав в UNIX. (подробнее тут  и тут , и тут)

Право на чтение (r) файла означает, что пользователь может просматривать содержимое файла с помощью различных команд просмотра, например, командой more или с помощью любого текстового редактора. Но, подредактировав содержимое файла в текстовом редакторе, вы не сможете сохранить изменения в файле на диске, если не имеете права на запись (w) в этот файл. Право на выполнение (x) означает, что вы можете загрузить файл в память и попытаться запустить его на выполнение как исполняемую программу.

Конечно, если в действительности файл не является программой (или скриптом shell), то запустить этот файл на выполнение не удастся, но, с другой стороны, даже если файл действительно является программой, но право на выполнение для него не установлено, то он тоже не запустится.

По отношению к каталогам трактовка понятий "право на чтение", "право на запись" и "право на выполнение" несколько изменяется. Право на чтение по отношению к каталогам легко понять, если вспомнить, что каталог — это просто файл, содержащий список файлов в данном каталоге.Следовательно, если вы имеете право на чтение каталога, то вы можете просматривать его содержимое (этот самый список файлов в каталоге).

Право на запись тоже понятно — имея такое право, вы сможете создавать и удалять файлы в этом каталоге, т. е. просто добавлять в каталог или удалять из него запись, содержащую имя какого-то файла и соответствующие ссылки.

Право на выполнение интуитивно менее понятно. Оно в данном случае означает право переходить в этот каталог. Если вы, как владелец, хотите дать доступ другим пользователям на просмотр какого-то файла в своем каталоге, вы должны дать им право доступа в каталог, т. е. дать им "право на выполнение каталога".

Более того, надо дать пользователю право на выполнение для всех каталогов, стоящих в дереве выше данного каталога. Поэтому в принципе для всех каталогов по умолчанию устанавливается право на выполнение как для владельца и группы, так и для всех остальных пользователей. И, уж если вы хотите закрыть доступ в каталог, то лишите всех пользователей (включая группу) права входить в этот каталог. Только не лишайте и себя такого права, а то придется обращаться к суперпользователю!

После прочтения предыдущего абзаца может показаться, что право на чтение каталога не дает ничего нового по сравнению с правом на выполнение. Однако разница в этих правах все же есть. Если задать только право на выполнение, вы сможете войти в каталог, но не увидите там ни одного файла (этот эффект особенно наглядно проявляется в том случае, если вы пользуетесь каким-то файловым менеджером, например, программой Midnight Commander). Если вы имеете право доступа в каком-то из подкаталогов этого каталога, то вы можете перейти в него (командой cd), но, как говорится "вслепую", по памяти, потому что списка файлов и подкаталогов текущего каталога вы не увидите (тут).

Алгоритм проверки прав пользователя при обращении к файлу.

Система вначале проверяет, совпадает ли имя пользователя с именем владельца файла.  Если эти имена совпадают (т. е. владелец обращается к своему файлу), то проверяется,  имеет ли владелец соответствующее право доступа: на чтение, на запись или на выполнение . Если право такое есть, то соответствующая операция разрешается. Если же нужного права владелец не имеет, то проверка прав, предоставляемых через группу или  через группу атрибутов доступа для остальных пользователей, уже даже не проверяются, а пользователю выдается сообщение о невозможности выполнения затребованного действия (обычно что-то вроде "Permission denied").Если имя пользователя, обращающегося к файлу, не совпадает с именем владельца, то система проверяет, принадлежит ли владелец к группе, которая сопоставлена данному файлу (далее будем просто называть ее группой файла). Если принадлежит, то для определения возможности доступа к файлу используются атрибуты, относящиеся к группе, а на атрибуты для владельца и всех остальных пользователей внимания не обращается. Если же пользователь не является владельцем файла и не входит в группу файла, то его права определяются атрибутами для остальных пользователей. Таким образом, третья группа атрибутов, определяющих права доступа к файлу, относится ко всем пользователям, кроме владельца файла и пользователей, входящих в группу файла.

http://citforum.ru/operating_systems/linux

chmod --->> change mode — программа для изменения прав доступа к файлам и директориям. Название происходит от программы ОС Unix chmod, которая, собственно, изменяет права доступа к файлам, директориям и символическим ссылкам. Опции:

chmod- никогда не изменяет права на символьные ссылки. Однако, для каждой символьной ссылки, заданной в командной строке, chmod изменяет права доступа связанного с ней файла. При этом chmod игнорирует символьные ссылки, встречающиеся во время рекурсивной обработки каталогов. Аргумент команды chmod, задающий разрешения, может быть записан в двух форматах: в числовом и в символьном.

stat папка — посмотреть права доступа на папку

Как установить права доступа на запись в папку и на все подпапки и файлы:

chmod -R 755 /home/vasya

      chmod 777 -Rv /media/share/

Числовые права доступа

Права доступа к файлу в Unix-подобных операционных системах могут выражаться в цифровой нотации (в восьмеричной системе счисления). Это связано с тем, что на хранение значения "каждого права" отводится бит памяти. Всего надо хранить 9 значений (три для пользователя, три для группы и три для остальных). Если "право" есть, то хранится единица, если нет, то ноль. Права записываются одной строкой сразу для трёх типов пользователей. В числовом виде файлу или каталогу устанавливаются абсолютные права ,в то же время в символьном виде можно установить отдельные права для разных типов пользователей. (тоже подробнее)

Числовая форма для прав доступа  цифры - это три отдельных атрибута, запись всегда пишется в формате: RWX-->> read, write, execute, и сумма складывается.

Первая цифра используется для обозначения user владельца файла (u) user ;

Вторая цифра используется для обозначения group других пользователей, входящих в группу владельца (g) group;

Третья цифра используется для обозначения others всех прочих пользователей (o) others ;

r (read, чтение) = 4 (100)

x (execute, выполнение) = 1 (001)

w (write, запись) = 2 (010)

Три любых двоичных разряда (100 001 010) - это цифры от 0 до 7 в восьмеричной системе счисления. Поэтому права доступа трех категорий (владельца, группы, остальных) можно выражать просто как три независимых числа от 0 до 7.

7   (rwx) читать, писать, выполнять (rwx = 4 + 2 + 1 = 7)  (111 = 7)

6   (rw-) читать, писать (rw- = 4 + 2 + 0 = 6)  (110 = 6)

5   (r-x) читать, выполнять (r-x = 4 + 0 + 1 = 5)   (101 =5)

4   (r--) читать (r-- = 4 + 0 + 0 = 4)   (100 = 4)

3   (-wx) писать, выполнять (-wx = 0 + 2 + 1 = 3)  (011 = 3) 

2   (-w-) писать (-w- = 0 + 2 + 0 = 2)  (010 =2)

1   (--x) выполнять (--x = 0 + 0 + 1 = 1)  (001 = 1)

0   (---) ничего нельзя делать (--- = 0 + 0 + 0 = 0)  (000 = 0)

Первая цифра – права владельца файла

Вторая цифра – права группы

Третья цифра – права всех пользователей

Таким образом, получается:

rwx = 4 + 2 + 1 = 7

rw- = 4 + 2 = 6

rwx rwx rwx = (4 + 2 + 1)(4 + 2 + 1)(4 + 2 + 1) = 777

и тд.....

Символьные права доступа

Другой способ назначения прав - это использование маски режима доступа (символьное представление). Помимо прав задается еще кому мы собираемся эти права выставлять. В символьном виде использование команды chmod позволяет более гибко добавлять, устанавливать или убирать права на файл(ы) или каталоги. Сочетание [references][operator][modes] определяют "класс доступа" , если классов доступа несколько их надо разделить запятой. $ chmod [references][operator][modes] file ...

1.References определяют пользователей, которым будут меняться права.

References определяются одной или несколькими буквами:

2.Operator определяет операцию, которую будет выполнять chmod:

3.Modes определяет какие именно права будут установлены, добавлены или удалены:

Использование символьного представления позволяет редактировать права файлов более гибко: chmod u+x,g+w-x koshki.txt

Добавить владельцу файла koshki.txt права на его выполнение, пользователям группы разрешить запись и запретить выполнение и оставить права остальных пользователей без изменений; chmod u=rwx,g+w,go-x sobaki.doc

Установить полные права для владельца файла, разрешить пользователям группы запись и запретить выполнение всем пользователям, кроме владельца файла.


Символьное назначение окажет неоценимую услугу, если требуется добавить права на объект к уже существующим правам. Наглядность символьного назначения прав более чем очевидна например:

chmod u=rwx, g=rx, o=r [файл]         ---> символьная

chmod 754 [файл]                               ---> числовая

Не забывая разделять классы доступа запятыми.

chmod +x [файл]                                --->сделать файл исполняемым

Биты SUID, SGID, Sticky

Более внятное объяснение дано в  "А.Робачевский-Операционная система UNIX " Unix отслеживает не символьные имена владельцев и групп, а их идентификаторы, как писалось выше:

Права доступа и информация о типе файла в UNIX-системах хранятся в индексных дескрипторах в отдельной структуре.Четыре бита из этих 16-ти отведены для кодированной записи о типе файла. Следующие три бита задают особые свойства исполняемых файлов ( suid=4000,sgid=2000,t=1000,) это и есть Биты SUID, SGID и Sticky и, наконец, оставшиеся 9 бит определяют права доступа к файлу (рассмотренные выше)  В понимании прав доступа важную часть занимает понятие идентификатор пользователя

Для сопоставления имени пользователя с именем владельца системе потребуется UID - для пользователей и GID - для групп, по скольку манипуляциями с файлами занимается не пользователь, а запущенный им процесс, идентификатор пользователя - обязательное свойство любого процесса.   ....подробнее тут!

UID - для пользователей /etc/passwd

GID - для групп /etc/group

 реальный и эффективный пользовательский (UID)

 реальный и эффективный групповой (GID)

Реальные номера применяются для учета использования системных ресурсов, а эффективные для определения прав доступа к процессам. Как правило, реальные и эффективные идентификаторы совпадают. Владелец процесса может посылать ему сигналы, а также изменять приоритет. Процесс не может явно изменить ни одного из своих четырех идентификаторов, но есть ситуации когда происходит косвенная установка новых эффективных идентификаторов процесса (косвенная, по скольку привилегии будут изменены (обычно расширены) лишь на время выполнения и только в отношении этой программы , ведь речь идет о процессе ), по средствам двух специальных битов: 

SUID (Set User ID - бит смены идентификатора пользователя)

SGID (Set Group ID - бит смены идентификатора группы)

t-бит (закрепляющий бит, бит сохранения задачи)

t-бит используется только с директориями, а впервые sticky bit появился в пятой редакции UNIX в 1974 году для использования в исполняемых файлах. Он применялся для уменьшения времени загрузки наиболее часто используемых программ. После закрытия программы код и данные оставались в памяти, а следующий запуск происходил быстрее. Когда t-бит для директории не установлен, файл в данной директории может удалить любой пользователь, имеющий доступ на запись к данному файлу. Устанавливая t-бит на директорию, мы меняем это правило таким образом, что удалить файл может только владелец этого файла и root , из чего следует часто распространенное определение - "закрепляющий бит" .

Когда пользователь или процесс запускает исполняемый файл с установленным одним из этих битов, файлу временно назначаются права его (файла) владельца или группы (в зависимости от того, какой бит задан). Таким образом, пользователь может даже запускать файлы от имени суперпользователя. 

Восьмеричные значения: SUID - 4000    SGID - 2000    t-бит - 1000

Как и вслучае когда суммируются значения прав: r (read, чтение) = 4 w (write, запись) = 2 x (execute, выполнение) = 1, так-же суммируются suid=4000,sgid=2000,t=1000, и читаются в первом поле числовой записи (0755 (битовая маска прав доступа к файлам содержит 4 группы по 3 бита в каждой (в данном случае Ø поскольку ни один не установлен)))

Одним словом установка битов SUID или SGID позволит пользователям запускать исполняемые файлы от имени владельца (или группы) запускаемого файла. Например, как говорилось выше, команду chmod по умолчанию может запускать только root. Если мы установим SUID на исполняемый файл/usr/bin/chmod, то обычный пользователь сможет использовать эту команду без использования sudo, так, что она будет выполнятся от имени пользователя root.

В некоторых случаях очень удобное решение. Кстати по такому принципу работает команда passwd, c помощью которой пользователь может изменить свой пароль, хозяин root, группа root, и тем не менее..., процесс, скрипт будет запущен. ****************************** Если установить SGID для каталога, то все файлы созданные в нем при запуске будут принимать идентификатор группы каталога, а не группы владельца, который создал файл в этом каталоге. Аналогично SUID. Одним словом, если пользователь поместил исполняемый файл в такой каталог, запустив его, процесс запустится от имени владельца (группы) каталога, в котором лежит этот файл, то есть опять про реальный и эффективный индефикатор пользователя, .....банальный хакерский фокус подменить идентификатор пользователя.

Установка SGID для директории приведёт к установке принадлежности каждого нового создаваемого файла к той же группе, к которой принадлежит сама директория, а не к основной группе владельца, как это происходит по умолчанию. SUID для директории не имеет смысла

Обозначаются при символьной записи буквой «s» и «t»: «rwsrwxrwx» - для SUID и «rwxrwsrwx» - для SGID и «rwxrwxrwt» - для t-бит,  4777 - 2777 - 1777  соответственно. 

Устанавливаются биты SUID, SGID, Sticky стандартно с использованием chmod, по средствам добавления соответствующей цифры (4,2,1):

# chmod 4755  file-example   SUID        # chmod u+s  file-example  (-rwsr-xr-x)

# chmod 2755  file-example   SGID        # chmod g+s  file-example (-rwxr-sr-x)

# chmod 1755  file-example   Sticky      # chmod +t  file-example   (-rwxr-xr-t)

Пример: chmod 4555 [имяфайла] «r-sr-xr-x» — все имеют право на чтение и выполнение, но запускаться файл на исполнение будет с правами владельца. Обычной практикой является установка бита sticky на каталог, будучи установленным на каталог, позволяет производить удаление файла только владельцу файла,что позволяет предотвратить удаления файлов в публичных каталогах, таких как /tmp, пользователями, не владеющими файлом.

***Примечание: Право на запись (w) даёт пользователю возможность записывать или изменять файл, а право на запись для каталога — возможность создавать новые файлы или удалять файлы из этого каталога. Если на каталоге стоит возможность записи (w), то файл внутри этого каталога можно будет удалить, даже если право на запись для него не установлено.


***Символ «t» может быть как строчная буква (t), так и прописная (T). Строчная буква отображается в том случае, если перед установкой sticky bit произвольный пользователь уже имел право на выполнение (х), а прописная (Т) — если такого права у него не было.


****Символ «s» может быть как строчная буква (s), так и прописная (S), чем предоставляется дополнительная информация об исходных установках, т.е. был ли до установки SGID установлен бит, в данном случае на выполнение (rwxrwsrwx). Если «s» строчная, то права на выполнение у группы этого файла были до установки SGID. Если (S) прописная, то группа для этого файла ранее не имела прав на выполнение до установки SGID.

$ > test; ls -l test

-rw-r--r-- 1 user user 0 Dec 15 16:38 test

PS:Создадим файл, согласно с umask, в Debian это 0022, в восьмиричном представлении 644(666-022 = 644). 666 - rw-rw-rw(всем читать и редактировать, если без маски) $ umask = 0022

$ chmod +x test; ls -l test

-rwxr-xr-x 1 user user 0 Dec 15 16:38 test

$ chmod -x test; ls -l test

-rw-r--r-- 1 user user 0 Dec 15 16:38 test

$ chmod +t test; ls -l test

-rw-r--r-T 1 user user 0 Dec 15 16:38 test

$ chmod -t test; ls -l test

-rw-r--r-- 1 user user 0 Dec 15 16:38 test

$ chmod u+s test; ls -l test

-rwSr--r-- 1 user user 0 Dec 15 16:38 test

$ chmod u-s test; ls -l test

-rw-r--r-- 1 user user 0 Dec 15 16:38 test

$ chmod g+s test; ls -l test

-rw-r-Sr-- 1 user user 0 Dec 15 16:38 test

$ chmod g-s test; ls -l test

-rw-r--r-- 1 user user 0 Dec 15 16:38 test


$ > testfile #$ ls -l ~/testfile

-rw-r--r--  user user 0 Dec 15 14:57

$ chmod 1644 testfile #$ ls -l ~/testfile 

-rw-r--r-T  user use 0 Dec 15 14:57

$ chmod 4644 testfile #$ ls -l ~/testfile 

-rwSr--r--  user use 0 Dec 15 14:57

$ chmod 2644 testfile #$ ls -l ~/testfile 

-rw-r-Sr--  user use 0 Dec 15 14:57

Еще одна таблица назначения и результата назначения прав на файл и директорию.

Популярные значения

0400 (-r--------) Владелец имеет право чтения; никто другой не имеет права выполнять никакие действия

0644 (-rw-r--r--) Все пользователи имеют право чтения; владелец может редактировать

0660 (-rw-rw----) Владелец и группа могут читать и редактировать; остальные не имеют права выполнять никаких действий

0664 (-rw-rw-r--) Все пользователи имеют право чтения; владелец и группа могут редактировать

0666 (-rw-rw-rw-) Все пользователи могут читать и редактировать

0700 (-rwx------) Владелец может читать, записывать и запускать на выполнение; никто другой не имеет права выполнять никакие действия

0744 (-rwxr--r--) Каждый пользователь может читать, владелец имеет право редактировать и запускать на выполнение

0755 (-rwxr-xr-x) Каждый пользователь имеет право читать и запускать на выполнение; владелец может редактировать

0777 (-rwxrwxrwx) Каждый пользователь может читать, редактировать и запускать на выполнение

1555 (-r-xr-xr-t) Каждый пользователь имеет право читать и запускать на выполнение; удалить файл может только владелец этого файла

2555 (-r-xr-sr-x) Каждый пользователь имеет право читать и запускать на выполнение с правами группы(user group) владельца файла

4555 (-r-sr-xr-x) Каждый пользователь имеет право читать и запускать на выполнение с правами владельца файла

Список всех возможных разрешений и их восьмеричное представление:


$ touch /tmp/$$;for N in `seq -w 0 7777|grep -v [89]`; do chmod $N /tmp/$$; P=`ls -l /tmp/$$ | awk '{print $1}'`; echo $N $P; done | tee >(awk 'END{print "Итого: " NR" вариантов"}'); rm /tmp/$$ 


0000 ----------

0001 ---------x

0002 --------w-

0003 --------wx

0004 -------r--

0005 -------r-x

0006 -------rw-

0007 -------rwx

.............................

7774 -rwsrwsr-T

7775 -rwsrwsr-t

7776 -rwsrwsrwT

7777 -rwsrwsrwt

Итого: 4096 вариантов

Так  еще круче :):

$ touch /tmp/$$;for N in `seq -w 0 7777|grep -v [89]`; do chmod $N /tmp/$$; P=`ls -l /tmp/$$ | awk '{print $1}'`; echo $N $P; done | tee >(awk 'END{print"   Всего: " NR" вариантов"}') | paste -d\  - - - - - -  | less; rm /tmp/$$



.........................................................

7736 -rws-wsrwT 7737 -rws-wsrwt 7740 -rwsr-S--T 7741 -rwsr-S--t 7742 -rwsr-S-wT 7743 -rwsr-S-wt

7744 -rwsr-Sr-T 7745 -rwsr-Sr-t 7746 -rwsr-SrwT 7747 -rwsr-Srwt 7750 -rwsr-s--T 7751 -rwsr-s--t

7752 -rwsr-s-wT 7753 -rwsr-s-wt 7754 -rwsr-sr-T 7755 -rwsr-sr-t 7756 -rwsr-srwT 7757 -rwsr-srwt

7760 -rwsrwS--T 7761 -rwsrwS--t 7762 -rwsrwS-wT 7763 -rwsrwS-wt 7764 -rwsrwSr-T 7765 -rwsrwSr-t

7766 -rwsrwSrwT 7767 -rwsrwSrwt 7770 -rwsrws--T 7771 -rwsrws--t 7772 -rwsrws-wT 7773 -rwsrws-wt

7774 -rwsrwsr-T 7775 -rwsrwsr-t 7776 -rwsrwsrwT 7777 -rwsrwsrwt    Всего: 4096 вариантов 

(END)

Кому не нравится утилита paste(paste -d\  - - - - - -), может использовать утилиту column с ключем -с, позволяющий растянуть или сузить вывод в терминале, похоже более интелектуальна чем  paste поскольку изначально исходит из ширины терминала и согласно ширине выводит количество столбцов например:

$ echo $COLUMNS  #Узнать ширину терминала

144

$ touch /tmp/$$;for N in `seq -w 0 7777|grep -v [89]`; do chmod $N /tmp/$$; P=`ls -l /tmp/$$ | awk '{print $1}'`; echo $N $P; done | tee >(awk 'END{print"Всего: " NR" вариантов"}') | column -c 144 | less; rm /tmp/$$

...................................................................................................

1454 -r--r-xr-T     3140 ---xr-S--T      4624 -rwS-w-r--      6310 --ws--s---      7774 -rwsrwsr-T

1455 -r--r-xr-t     3141 ---xr-S--t      4625 -rwS-w-r-x      6311 --ws--s--x      7775 -rwsrwsr-t

1456 -r--r-xrwT     3142 ---xr-S-wT      4626 -rwS-w-rw-      6312 --ws--s-w-      7776 -rwsrwsrwT

1457 -r--r-xrwt     3143 ---xr-S-wt      4627 -rwS-w-rwx      6313 --ws--s-wx      7777 -rwsrwsrwt

1460 -r--rw---T     3144 ---xr-Sr-T      4630 -rwS-wx---      6314 --ws--sr--      Всего: 4096 вариантов

(END)

PS: Это все конечно будет уже извращение, но можно "автоматизировать" подстановку переменной "ширина терминала":

$ touch /tmp/$$;for N in `seq -w 0 7777|grep -v [89]`; do chmod $N /tmp/$$; P=`ls -l /tmp/$$ | awk '{print $1}'`; echo $N $P; done | tee >(awk 'END{print"Всего: " NR" вариантов"}') | column -c ${COLUMNS} | less; rm /tmp/$$ 

добавление восмеричного представления прав для ls -l:


$ ls -l | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf("%0o ",k);print}' 

total 2.9M

740 drwxr-----  3 user user 4.0K Dec 13  2021 apparmor/

755 -rwxr-xr-x  1 user user  382 Nov 29  2022 backups*

740 drwxr-----  4 user user 4.0K Dec 13  2021 base/

644 -rw-r--r--  1 user user    7 Jul 17 14:58 bb

644 -rw-r--r--  1 user user    6 Jul 16 22:18 bbb

644 -rw-r--r--  1 root root  121 Aug 27  2021 blacklist.txt

........................................................

Для смены владельца файлов/каталогов используем chown:  chown -R vasya:users /home/vasya  поменяет владельца и группу каталога vasya и содержимое оного!

Если использовать утилиту stat будет проще и информативней

$ stat -c '%A %a %n' * 

-rw-r--r-- 644 4kvideodownloader_4.4.11-1_amd64.deb

-rw-r--r-- 644 ask

-rw-r--r-- 644 awk

drwxr-xr-x 755 backup

drwxr-xr-x 755 bin

................................................

***** $ stat -f '%Sp %p %N' * | rev | sed -E 's/^([^[:space:]]+)[[:space:]]([[:digit:]]{4})[^[:space:]]*[[:space:]]([^[:space:]]+)/\1 \2 \3/' | rev

Таблица умножения 

На всякий случай;

$ seq 9 | sed 'H;g' | awk -v RS='' '{for(i=1;i<=NF;i++)printf("%dx%d=%d%s", i, NR, i*NR, i==NR?"\n":"\t")}'

1x1=1

1x2=2 2x2=4

1x3=3 2x3=6 3x3=9

1x4=4 2x4=8 3x4=12 4x4=16

1x5=5 2x5=10 3x5=15 4x5=20 5x5=25

1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36

1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49

1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64

1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81

Вычисление рядов, например от 1 до 100:

$ awk 'BEGIN {for(i=1;i<=100;i++)sum+=i}; END {print sum}' /dev/null 

5050

PS:

Вот как можно отформатировать вывод passwd при помощи column и sed:

$ column -s: -t -n . -N USERNAME,PASS,UID,GID,NAME,HOMEDIR,SHELL -T NAME /etc/passwd|sed "1,2 i $(printf %80s|tr ' ' '=')" 

================================================================================

USERNAME         PASS  UID    GID    NAME  HOMEDIR                  SHELL

================================================================================

root             x     0      0      root  /root                    /bin/bash

daemon           x     1      1      daem  /usr/sbin                /usr/sbin/nologin

bin              x     2      2      bin   /bin                     /usr/sbin/nologin

sys              x     3      3      sys   /dev                     /usr/sbin/nologin

sync             x     4      65534  sync  /bin                     /bin/sync

games            x     5      60     game  /usr/games               /usr/sbin/nologin

.....................................................................................