Команда semanage не меняет контекст файла

Я пытаюсь изменить контекст selinux для каталога загрузки, чтобы включить анонимную загрузку.

Это путь к каталогу /var/ftp/upload

Это контекст по умолчанию

[root@server ftp]# ls -Z upload
drwxr-XR-х. корень корень undefined_u:object_r:public_content_t:s0 загрузить

Я попробовал эту команду, чтобы изменить тип каталога

[root @ server ftp] # semanage fcontext -a -t public_content_rw_t upload
[root @ server ftp] # restorecon -v upload

Это не меняется, в чем здесь ошибка?

[root @ server ftp] # ls -Z pub
drwxr-XR-х. корень корень undefined_u:object_r:public_content_t:s0 загрузить

4 ответа

Решение

Это контекст по умолчанию

[root@server ftp]# ll -Zd upload/
drwxr-XR-х. корень корень undefined_u:object_r:public_content_t:s0 upload/

Я попробовал эту команду, чтобы изменить контекст

[root@server ftp]# semanage fcontext -a -t public_content_rw_t upload/
[root@server ftp]# ll -Zd upload/
drwxr-XR-х. корень корень undefined_u:object_r:public_content_t:s0 upload/
[root @ server ftp] # restorecon -R -v upload
[root@server ftp]# ll -Zd upload/
drwxr-XR-х. корень корень undefined_u:object_r:public_content_t:s0 upload/

Это не работает, но эта команда запишет контекст в /etc/selinux/targeted/contexts/files/file_contexts.local файл

посмотреть здесь

# Этот файл автоматически сгенерирован libsemanage
# Не редактируйте напрямую.

upload / system_u: object_r: public_content_rw_t: s0

Теперь я попробовал эту команду (Рабочая команда)

[root @ server ftp] # semanage fcontext -a -t public_content_rw_t "/var/ftp/upload(/.*)?"
[root @ server ftp] # restorecon -R -v upload
восстановление concon reset / var / ftp / загрузка контекста undefined_u:object_r:public_content_t:s0->undefined_u:object_r:public_content_rw_t:s0
Теперь контекст изменился.
[root@server ftp]# ll -Zd upload/
drwxr-XR-х. корень корень undefined_u:object_r:public_content_rw_t:s0 upload/

Но я действительно не знаю, почему это работает, вижу разницу в команде.

Я получил ответ на странице руководства man ftpd_selinux

semanage fcontext -a -t public_content_rw_t "/var/ftpd/incoming(/.*)?"

Разница между semange и chcon состоит в том, что chcon, если система "временная", получает информацию, контексты, присутствующие в файле / каталоге, будут потеряны, использование semanage делает контексты selinux постоянными.

Для того, чтобы semanage работал, вы должны указать полный путь к файлу или каталогу, поэтому semanage fcontext -a -t public_content_rw_t upload/ не работает но semanage fcontext -a -t public_content_rw_t "/var/ftp/upload(/.*)? делает; restorecon не требует полного пути.

Согласно этой странице:

file_contexts.local файл хранит контексты для вновь созданных файлов и каталогов, не найденных вfile_contexts,

Вот почему вы найдете сообщение в журнале file_contexts.local,

При изменении контекста SELinux с помощью semanage fcontext -aиспользуйте полный путь к файлу или каталогу, чтобы избежать неправильной маркировки файлов после перемаркировки файловой системы или после restorecon команда запускается.

Это подсказка, чтобы использовать полный путь для правильной перемаркировки.

Пытаться

chcon -t public_content_rw_t /var/ftp/upload

Это будет работать.

Другие вопросы по тегам