Почему эти фигурные скобки необходимы в sed?

Я думаю, что важно отметить что cat не проблема в моем комментарии выше, но перенаправление оболочки. Вы пытаетесь ограничить копирование двоичных файлов или текстовых файлов? Если это - двоичные файлы, то я полагаю, что можно разработать что-то с rbash (см. http://blog.bodhizazen.net/linux/how-to-restrict-access-with-rbash/).

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

Я не уверен, что любое решение генерала SELinux было бы полезно здесь. Ваше приложение, которое читает, файлы должны записать данные где-нибудь? Если не и эти файлы только должен быть считан Вашим приложением, Вы могли бы просто дать доступ только для чтения типа своего приложения к файлам типа, который Вы хотели бы, чтобы это считало, и не даете ему запись нигде.

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


ОБНОВЛЕНИЕ - БОЛЕЕ ОПРЕДЕЛЕННЫЙ ОТВЕТ

Я думаю, что можно достигнуть того, что Вы хотите без SELinux, как это - то, сколько вещей обрабатывается (например, обычные пользователи, изменяющие их пароль в/etc/shadow через passwd команда):

  • Сделайте отдельного пользователя, и/или группа для Вашего коммерческого программного обеспечения (мог бы уже быть сделан),
  • Дайте доступ только для чтения файлов упомянутым пользователем и/или группой
  • Удостоверьтесь, что у обычных пользователей нет доступа к тем файлам
  • Сделайте свой исполняемый файл setuid или getgid (в зависимости от того, использовали ли Вы группу или пользователя), например. chmod g+s или chmod u+s
  • Когда пользователи запустят приложение, у них теперь будут те же полномочия, которые пользователь приложения или группа имеют, таким образом, позволяя доступ для чтения к тем определенным файлам в рамках требуемого приложения.

UPDATE2 - МНОГОЧИСЛЕННЫЕ ПОЛЬЗОВАТЕЛИ И ГРУППЫ, Если у Вас есть несколько приложений и групп, можно, вероятно, достигнуть функциональности, с которой Вы ищете sudo. Многие люди знают о его способности позволить Вам команды выполнения корень, но это - полноценность, идет далеко вне того примера. Я не уверен это идеальная установка, но это - один способ сделать то, чего Вы делаете попытку.

Можно все еще сделать все файлы приложения принадлежавшими приложению, но затем можно сделать отдельные группы для каждого набора файлов. Это что Ваш /etc/sudoers или файл в /etc/sudoers.d/ мог быть похожим:

User_Alias    FILEGROUP1 = user1, user2
User_Alias    FILEGROUP2 = user3, user4
Cmnd_Alias    MYEDITOR = /usr/local/bin/myeditor, /usr/local/bin/mycompiler

FILEGROUP1    ALL=(:fileset1) NOPASSWD: MYEDITOR 
FILEGROUP2    ALL=(:fileset2) NOPASSWD: MYEDITOR 

Где user1 и user2 нужен доступ к файлам, принадлежавшим группе fileset1 и user3 и user4 нужен доступ к файлам, принадлежавшим группе fileset2. Вы могли также использовать группы вместо пользователей.

Пользователи могли получить доступ к своим файлам через редактора путем выполнения sudo -g fileset1 /usr/local/bin/myeditor или что-то подобное.

Это могло бы помочь создать некоторые сценарии обертки для необходимого sudo -g команды для Ваших пользователей, тем более, что это походит, могут быть графическим приложением.

Подробнее:

http://www.garron.me/linux/visudo-command-sudoers-file-sudo-default-editor.html

https://serverfault.com/questions/166254/change-primary-group-with-sudo-u-g

http://linux.die.net/man/8/sudo

8
02.06.2015, 00:12
3 ответа

Согласно POSIX странице стандарта на sed :

Скрипт должен состоять из редактирования команды следующего вида:

 [ адрес  [,  адрес ]]  функция 

где function представляет собой односимвольный командный глагол из списка в Команды редактирования в sed , за которым следуют любые применимые аргументы.

Итак, первый непустой символ после адреса используется как командный глагол - в вашем конкретном случае это / , отсюда ошибка: char 9: unknown command: '/' .
Ссылки на фигурные скобки указаны ниже:

 [  2addr ] { команда редактирования 
 команда редактирования  
 ... 
} 
    Выполнять список команд редактирования `sed` только когда пространство шаблона выбрано. …

[ 2addr ] - индикатор того, что максимальное количество допустимых адресов равно двум.

Чтобы прояснить пункт, сделанный выше, в разделе Адреса sed (1) говорится:

Sed команды могут быть даны без адресов, {{1 }} в этом случае команда будет выполняться для всех строк ввода; с одним адресом, и в этом случае команда будет выполняться только для строк ввода, соответствующих этому адресу; {{1} } или с двумя адресами, и в этом случае команда будет выполняться для всех входных строк, которые соответствуют включенному диапазону строк , начиная с первого адреса и продолжая до второго адреса. Что касается диапазонов адресов, на которые следует обратить внимание: синтаксис: addr1 , addr2 (т.е. адреса разделяются запятой);
(и другие материалы, не относящиеся к этому обсуждению)

Информационная страница GNU ( info sed ) имеет аналогичный описание { и } , в разделе «3.4 Часто используемые команды»:

 { КОМАНДЫ } 
    Группа команды могут быть заключены в между { и } символами. Это особенно полезно, когда вы хотите, чтобы запускалась группа команд {{1} } по одному совпадению адреса (или диапазона адресов).

Иначе говоря, фигурные скобки используются для применения нескольких команд к одному и тому же адресу или для вложенных адресов.
Стандарт здесь не очень явный 1 , но левая скобка { на самом деле команда, запускающая группу других команд sed ( группа заканчивается правой фигурной скобкой } ).

И, рискуя действительно перейти на TL; DR , проблема в том, что 195 , 210 и / add / - это все адреса . Команды sed не могут быть вызваны с тремя адресами. Таким образом, чтобы заставить вашу команду работать , нужно вызвать команду { в диапазоне адресов 195,210 , , а затем ( в этом диапазоне) вызовите команду p по адресу / add / .


1:
хотя, если вы читаете всю страницу, упоминается, что:
Командные глаголы, кроме {, a , ] b , c , i , r , t , w , : и # могут сопровождаться ...

9
27.01.2020, 20:11

Согласно документации для sed фигурные скобки используются для группировки команд вместе. Итак,

sed -n '195,210{/add/p}' <file>

сначала обрабатывается как диапазон адресов 195,210 с помощью команды блока. Затем команда блока состоит из спецификации адреса / add / с командой print p

3
27.01.2020, 20:11

Синтаксис sed похож на

адрес / команда.

Итак, 195,210 - это первый совпадающий адрес, но затем вы хотите выполнить новую команду в этом диапазоне, а именно сопоставить «добавить», а затем распечатать. Поэтому вам нужно сгруппировать эту дополнительную команду, используя фигурные скобки.

0
27.01.2020, 20:11

Теги

Похожие вопросы