dd
не генерирует контент ( за исключением пробела или нулевого заполнения, которые он может выполнять с некоторыми параметрами), его задача - читать данные откуда-то и записывать их в другом месте указанными способами.
По умолчанию dd
записывает в свой стандартный вывод то, что он читает из своего стандартного ввода. Итак, самое простое, что вы можете сделать, это (в виде кода оболочки).
dd << EOF > file
Hello World
EOF
dd
читает свой стандартный ввод (здесь документ, предоставленный оболочкой) по 512 байт за раз и записывает его на свой стандартный вывод (здесь открытый оболочкой в файле
).
Он может открыть выходной файл самостоятельно:
dd of=file << EOF
Hello World
EOF
Он может выполнять некоторые преобразования, искать, читать по меньшим / большим фрагментам и т. Д.
dd bs=1 skip=15 << EOF > file
Please output: Hello World
EOF
Или:
dd bs=12 count=1 conv=swab << EOF > file
eHll ooWlr
daft
EOF
ок. Проблема с SELinux. При создании некоторых новых материалов, связанных с существующей службой, вам необходимо убедиться, что у службы будет соответствующий доступ к вашим файлам. Журнал из вашего файла предполагает, что у него нет (если он не запущен как unlimited_t
).
executing action "/etc/acpi/actions/lid.sh "button/lid LID open""
action exited with status 126
Выполнение вышеуказанной команды завершилось неудачно (статус выхода 126), что означает, что исходный тип apmd_t
не имеет возможности выполнить ваш файл (у которого есть неизвестные мне метки). Просматривая политику, например:
$ sesearch -A -s apmd_t -p execute /etc/selinux/targeted/policy/policy.*
, мы можем заметить строку
allow apmd_t apmd_exec_t : file { ioctl read getattr lock execute execute_no_trans entrypoint open }
, позволяющую выполнять типы apmd_exec_t
. Изменение меток вашего исполняемого файла на этот тип должно продвинуть вас вперед:
# chcon -t apmd_exec_t /etc/acpi/actions/lid.sh
В дальнейшем вы, вероятно, столкнетесь с проблемами при записи в файл /home/user/lid.txt
, который, вероятно, помечен как home_t
или что-то еще. Ваша служба может написать, например, apmd_tmp_t
:
$ sesearch -A -s apmd_t -p write /etc/selinux/targeted/policy/policy.*
allow apmd_t apmd_tmp_t : file { ioctl read write create getattr setattr lock append unlink link rename open } ;
Поэтому, если вы измените контекст вашего целевого файла на apmd_tmp_t
, он должен работать для вас:
# chcon -t apmd_tmp_t /home/user/lid.txt
Это решение не является постоянным . Более правильным было бы определить свою собственную политику, охватывающую эти файлы и контексты, или переместить файлы в места, где контекст находится по умолчанию.Вам может помочь программа аудита ( ausearch -m AVC
и audit2allow
). Если что-то не работает, дайте мне знать.