Как сохранить контекст SELinux в файле при запуске от неограниченного пользователя

У меня возникли проблемы с контекстом SELinux нескольких моих файлов с моей настройкой openstack-swift.

Сведения о настройке:

Демон запускает swift-object-replicator со следующим контекстом SELinux.

system_u:system_r:swift_t:s0 swift ... /usr/bin/python /usr/bin/swift-object-replicator /etc/swift/object-server.conf

Этот демон периодически вызывает сценарий. Файл, созданный этим сценарием, имеет следующий контекст SELinux.

system_u:object_r:swift_var_cache_t:s0 /var/cache/swift/object.recon

Что правильно !!

Проблема

Если я запускаю тот же скрипт (который этот демон вызывает внутри) с терминала как «root», контекст SELinux файла object.recon изменяется, как показано ниже -rw-------. swift swift unconfined_u:object_r:var_t:s0 /var/cache/swift/object.recon

И затем я начинаю видеть сообщения об ошибках в файлах журнала этого демона.

Любая идея, почему контекст меняется и как его сохранить, даже если я хочу запустить скрипт с терминала


person mittal    schedule 18.05.2016    source источник
comment
Вы не можете предотвратить это. SElinux предназначен для этого. С другой стороны, попробуйте создать для него целевую политику.   -  person alvits    schedule 18.05.2016
comment
@alvits Да, я так и думал. Что это была бы за политика? Не могли бы вы дать мне подробности   -  person mittal    schedule 18.05.2016
comment
Вот кое-что для начала.   -  person alvits    schedule 18.05.2016
comment
У нас есть правило политики типа /var/cache/swift(/.*)? regular file system_u:object_r:swift_var_cache_t:s0, но как его обеспечить. Restorecon исправляет ситуацию, но только временно, пока кто-нибудь снова не нажмет команду из терминала :(   -  person mittal    schedule 18.05.2016
comment
Является ли SElinux принудительным или разрешительным?   -  person alvits    schedule 18.05.2016
comment
Принудительный режим   -  person mittal    schedule 18.05.2016
comment
Можете ли вы запустить эту команду sesearch --allow --source swift_t --target swift_var_cache_t --class file и обновить свой пост с результатом?   -  person alvits    schedule 18.05.2016
comment
Там написано allow swift_t swift_var_cache_t : file { ioctl read write create getattr setattr lock append unlink link rename open } ;   -  person mittal    schedule 19.05.2016
comment
Мне повезло с командой runcon runcon -t swift_t -r system_r -u system_u swift-object-replicator /etc/swift/object-server.conf -ov Это сохраняет контексты   -  person mittal    schedule 19.05.2016
comment
@alvits Сейчас я изучаю правила type_transition   -  person mittal    schedule 19.05.2016
comment
Кажется, это помогло module junk1 1.0; require { type unconfined_t; type swift_exec_t; type swift_t; role unconfined_r; class process transition; } #============= TRANSITIONS ======== type_transition unconfined_t swift_exec_t:process swift_t; #============= ROLES ============== role unconfined_r types swift_t;   -  person mittal    schedule 19.05.2016


Ответы (1)


Я выяснил 2 способа сохранить контексты:

  • Используйте runcon для запуска команды с правильным контекстом

    runcon -t swift_t -r system_r swift-object-replicator /etc/swift/object-server.conf -ov
    
  • Или определите правило SELinux type_transition, чтобы пользователь с доменом unconfined_t при выполнении скрипта переходил в правильный домен.

    require {
     type unconfined_t;
     type swift_exec_t;
     type swift_t;
     role unconfined_r;
     class process transition;
    }
    
    role unconfined_r types swift_t;
    
    type_transition unconfined_t swift_exec_t:process swift_t;
    
person mittal    schedule 20.05.2016