Контекст SELinux хранится в расширенных атрибутах файла ( xattr
, атрибут man 5
). Инструменты для работы с ними доступны в пакете core / attr
.
Атрибуты, включая контекст SELinux, можно получить с помощью getfattr
. Однако есть предостережение: по умолчанию getfattr
перечисляет только атрибуты пользователя .
пространство имен; а нужный нам атрибут selinux
находится в пространстве имен security
. Поэтому нам нужно передать параметр -m -
, чтобы запросить атрибуты для всех пространств имен ( -d
- это сбросить значения, а также имена):
$ getfattr -m - -d bin/sh
# file: bin/sh
security.selinux="u:object_r:system_file:s0"
Чтобы изменить контекст selinux, я использовал Инструмент setfattr
, для которого требуются привилегии суперпользователя:
$ sudo setfattr -n security.selinux -v u:object_r:shell_exec:s0 bin/sh
$ getfattr -m - -d bin/sh
# file: bin/sh
security.selinux="u:object_r:shell_exec:s0"
Запустив sudo udevadm control --log-priority=info
, затем посмотрев вывод tail -f /var/log/syslog
, я заметил несколько ошибок.
Jan 23 21:22:05 raspberrypi systemd-udevd[1587]: invalid key/value pair in file /etc/udev/rules.d/80-arduinouno.rules on line 1, starting at character 17 ('\n')
Jan 23 21:22:05 raspberrypi systemd-udevd[1587]: invalid key/value pair in file /etc/udev/rules.d/80-arduinouno.rules on line 2, starting at character 50 ('\n')
Jan 23 21:22:05 raspberrypi systemd-udevd[1587]: invalid key/value pair in file /etc/udev/rules.d/80-arduinouno.rules on line 3, starting at character 12 ('\n')
Jan 23 21:22:05 raspberrypi systemd-udevd[1587]: invalid key/value pair in file /etc/udev/rules.d/80-arduinouno.rules on line 4, starting at character 23 ('\n')
и
Jan 23 21:23:01 raspberrypi systemd-udevd[1646]: unknown key 'ENV(ID_SERIAL_SHORT)' in /etc/udev/rules.d/90-neatolidar.rules:1
Jan 23 21:23:01 raspberrypi systemd-udevd[1646]: invalid rule '/etc/udev/rules.d/90-neatolidar.rules:1'
Jan 23 21:23:01 raspberrypi systemd-udevd[1646]: invalid key/value pair in file /etc/udev/rules.d/90-neatolidar.rules on line 2, starting at character 77 ('\n')
Jan 23 21:23:01 raspberrypi systemd-udevd[1646]: invalid key/value pair in file /etc/udev/rules.d/90-neatolidar.rules on line 3, starting at character 36 ('\n')
Из этого я сделал вывод, что (1) мое правило ENV(ID_SERIAL_SHORT)
не работает, и (2) у меня не должно быть новых строк. Поэтому я перешел на следующие однострочные файлы .rules:
/etc/udev/rules.d/80-arduinouno.rules
:
SUBSYSTEM=="tty", ATTRS{idProduct}=="7523", ATTRS{idVendor}=="1a86", MODE="0666", OWNER="pi", GROUP="pi", SYMLINK+="arduinouno"
and /etc/udev/rules.d/90-neatolidar. rules
:
SUBSYSTEM=="tty", ATTRS{idProduct}=="6001", ATTRS{idVendor}=="0403", ATTRS{serial}=="AL01OTZS", MODE="0666", OWNER="pi", GROUP="pi", SYMLINK+="neatolidar"
После перезагрузки (или просто sudo service udev restart
и/или sudo udevadm control --reload
), это, кажется, работает.
Похоже, моя репутация недостаточно высока для того, чтобы оставить комментарий.
Кроме того: я использую следующий сценарий bash для перезагрузки моих правил udev и повторного запуска, поэтому мне даже не нужно отключать и повторно подключать устройство:
#!/bin/bash
sudo udevadm control --reload-rules
sudo udevadm trigger