Это контекст по умолчанию
[root@server ftp]# ll -Zd upload/
drwxr-xr-x. root root unconfined_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-x. root root unconfined_u:object_r:public_content_t:s0 upload/
[root@server ftp]# restorecon -R -v upload
[root@server ftp]# ll -Zd upload/
drwxr-xr-x. root root unconfined_u:object_r:public_content_t:s0 upload/
Это не работает, но эта команда запишет контекст в файл /etc/selinux/targeted/contexts/files/file_contexts.local
посмотреть здесь
# This file is auto-generated by libsemanage
# Do not edit directly.
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
restorecon reset /var/ftp/upload context unconfined_u:object_r:public_content_t:s0->unconfined_u:object_r:public_content_rw_t:s0
Now context is changed.
[root@server ftp]# ll -Zd upload/
drwxr-xr-x. root root unconfined_u:object_r:public_content_rw_t:s0 upload/
Но я действительно не знаю, почему это работает, вижу разницу в команде.
Я получил ответ на справочной странице man ftpd_selinux
semanage fcontext -a -t public_content_rw_t "/var/ftpd/incoming(/.*)?"