F.38. sepgsql â пÑовеÑка безопаÑноÑÑи на базе полиÑик SELinux Ð´Ð»Ñ Ð¼Ð°Ð½Ð´Ð°Ñного ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð¾ÑÑÑпом (MAC, Mandatory Access Control) Ñ Ð¼ÐµÑками #
ÐагÑÑжаемÑй модÑÐ»Ñ sepgsql поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð¼Ð°Ð½Ð´Ð°Ñное ÑпÑавление доÑÑÑпом (MAC, Mandatory Access Control) Ñ Ð¼ÐµÑками, поÑÑÑоенное на базе полиÑик безопаÑноÑÑи SELinux.
ÐÑедÑпÑеждение
ТекÑÑÐ°Ñ ÑеализаÑÐ¸Ñ Ð¸Ð¼ÐµÐµÑ ÑÑÑеÑÑвеннÑе огÑаниÑÐµÐ½Ð¸Ñ Ð¸ конÑÑолиÑÑÐµÑ Ð½Ðµ вÑе дейÑÑвиÑ. См. ÐодÑаздел F.38.7.
F.38.1. ÐÐ±Ð·Ð¾Ñ #
ÐÑÐ¾Ñ Ð¼Ð¾Ð´ÑÐ»Ñ Ð¸Ð½ÑегÑиÑÑеÑÑÑ Ð² SELinux и обеÑпеÑÐ¸Ð²Ð°ÐµÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑй ÑÑÐ¾Ð²ÐµÐ½Ñ Ð¿ÑовеÑок безопаÑноÑÑи, ÑаÑÑиÑÑÑÑий и дополнÑÑÑий обÑÑнÑе ÑÑедÑÑва PostgreSQL. С ÑоÑки зÑÐµÐ½Ð¸Ñ SELinux, даннÑй модÑÐ»Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ PostgreSQL вÑполнÑÑÑ ÑÐ¾Ð»Ñ Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑа обÑекÑов в пÑоÑÑÑанÑÑве полÑзоваÑелÑ. ÐÑи вÑполнении запÑоÑа DML обÑаÑение к каждой ÑаблиÑе или ÑÑнкÑии в нÑм бÑÐ´ÐµÑ ÐºÐ¾Ð½ÑÑолиÑоваÑÑÑÑ ÑоглаÑно ÑиÑÑемной полиÑике безопаÑноÑÑи. ÐÑа пÑовеÑка дополнÑÐµÑ ÑÑаÑнÑÑ Ð¿ÑовеÑÐºÑ ÑазÑеÑений SQL, коÑоÑÑÑ Ð¿ÑÐ¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ PostgreSQL.
ÐеÑ
анизм SELinux пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑеÑÐµÐ½Ð¸Ñ Ð¾ ÑазÑеÑении доÑÑÑпа на оÑнове меÑок безопаÑноÑÑи, пÑедÑÑавлÑемÑÑ
ÑÑÑоками вида system_u:object_r:sepgsql_table_t:s0. Ркаждом ÑеÑении ÑÑиÑÑваÑÑÑÑ Ð´Ð²Ðµ меÑки: меÑка ÑÑбÑекÑа, пÑÑаÑÑегоÑÑ Ð²ÑполниÑÑ Ð´ÐµÐ¹ÑÑвие, и меÑка обÑекÑа, над коÑоÑÑм должно ÑовеÑÑаÑÑÑÑ ÑÑо дейÑÑвие. Так как ÑÑи меÑки могÑÑ Ð¿ÑименÑÑÑÑÑ Ðº обÑекÑÑ Ð»Ñбого вида, ÑеÑÐµÐ½Ð¸Ñ Ð¾ ÑазÑеÑении доÑÑÑпа к обÑекÑам внÑÑÑи Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
могÑÑ Ð¿Ð¾Ð´ÑинÑÑÑÑÑ (и Ñ ÑÑим модÑлем ÑакÑиÑеÑки подÑинÑÑÑÑÑ) обÑим кÑиÑеÑиÑм, пÑименÑемÑм к обÑекÑам лÑбого дÑÑгого Ñипа, напÑимеÑ, к Ñайлам. ÐÑа ÑÑ
ема позволÑÐµÑ Ð¾ÑганизоваÑÑ ÑенÑÑализованнÑÑ Ð¿Ð¾Ð»Ð¸ÑÐ¸ÐºÑ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи Ð´Ð»Ñ Ð·Ð°ÑиÑÑ Ð¸Ð½ÑоÑмаÑионнÑÑ
акÑивов, не завиÑÑÑÑÑ Ð¾Ñ Ñого, как именно Ñ
ÑанÑÑÑÑ ÑÑи акÑивÑ.
ÐазнаÑиÑÑ Ð¼ÐµÑÐºÑ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи обÑекÑÑ Ð±Ð°Ð· даннÑÑ
позволÑÐµÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° SECURITY LABEL.
F.38.2. УÑÑановка #
ÐодÑÐ»Ñ sepgsql Ð¼Ð¾Ð¶ÐµÑ ÑабоÑаÑÑ ÑолÑко в Linux 2.6.28 и новее Ñ Ð²ÐºÐ»ÑÑÑннÑм SELinux. Ðа оÑÑалÑнÑÑ
плаÑÑоÑмаÑ
он не поддеÑживаеÑÑÑ. Ðам Ñакже понадобиÑÑÑ libselinux 2.1.10 или новее и selinux-policy 3.9.13 или новее (Ñ
оÑÑ Ð² некоÑоÑÑÑ
диÑÑÑибÑÑиваÑ
необÑ
одимÑе пÑавила могÑÑ Ð±ÑÑÑ Ð°Ð´Ð°Ð¿ÑиÑÐ¾Ð²Ð°Ð½Ñ Ðº полиÑике ÑÑаÑой веÑÑии).
Ðоманда sestatus позволÑÐµÑ Ð¿ÑовеÑиÑÑ ÑоÑÑоÑние SELinux. ТипиÑнÑй ÐµÑ Ð²Ñвод вÑглÑÐ´Ð¸Ñ Ñак:
$ sestatus SELinux status: enabled SELinuxfs mount: /selinux Current mode: enforcing Mode from config file: enforcing Policy version: 24 Policy from config file: targeted
ÐÑли SELinux оÑклÑÑÑн или не ÑÑÑановлен, его Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ пÑивеÑÑи в ÑабоÑее ÑоÑÑоÑние, пÑежде Ñем ÑÑÑанавливаÑÑ ÑÑÐ¾Ñ Ð¼Ð¾Ð´ÑлÑ.
ЧÑÐ¾Ð±Ñ ÑобÑаÑÑ ÑÑÐ¾Ñ Ð¼Ð¾Ð´ÑлÑ, ÑкажиÑе паÑамеÑÑ --with-selinux (еÑли иÑполÑзÑеÑе Make и Autoconf ) или -Dselinux={ auto | enabled | disabled } (еÑли иÑполÑзÑеÑе Meson). УбедиÑеÑÑ, ÑÑо в Ð¼Ð¾Ð¼ÐµÐ½Ñ ÑбоÑки ÑÑÑановлен RPM-Ð¿Ð°ÐºÐµÑ libselinux-devel.
ЧÑÐ¾Ð±Ñ Ð¸ÑполÑзоваÑÑ ÑÑÐ¾Ñ Ð¼Ð¾Ð´ÑлÑ, Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²ÐºÐ»ÑÑиÑÑ sepgsql в shared_preload_libraries в postgresql.conf. ÐÑÐ¾Ñ Ð¼Ð¾Ð´ÑÐ»Ñ Ð½Ðµ бÑÐ´ÐµÑ ÐºÐ¾ÑÑекÑно ÑабоÑаÑÑ, еÑли загÑÑзиÑÑ ÐµÐ³Ð¾ каким-либо дÑÑгим ÑпоÑобом. ÐагÑÑзив его, нÑжно вÑполниÑÑ sepgsql.sql в каждой базе даннÑÑ
. ÐÑÐ¾Ñ ÑкÑÐ¸Ð¿Ñ ÑÑÑÐ°Ð½Ð¾Ð²Ð¸Ñ ÑÑнкÑии, необÑ
одимÑе Ð´Ð»Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¼ÐµÑками безопаÑноÑÑи, и назнаÑÐ¸Ñ Ð½Ð°ÑалÑнÑе меÑки безопаÑноÑÑи.
СледÑÑÑий пÑÐ¸Ð¼ÐµÑ Ð¿Ð¾ÐºÐ°Ð·ÑваеÑ, как иниÑиализиÑоваÑÑ Ð½Ð¾Ð²Ñй клаÑÑÐµÑ Ð±Ð°Ð· даннÑÑ
и ÑÑÑановиÑÑ Ð² него ÑÑнкÑии и меÑки безопаÑноÑÑи sepgsql. ÐзмениÑе пÑÑи в ÑооÑвеÑÑÑвии Ñ ÑазмеÑением ваÑей инÑÑаллÑÑии:
$ export PGDATA=/path/to/data/directory
$ initdb
$ vi $PGDATA/postgresql.conf
измениÑÑ
#shared_preload_libraries = '' # (поÑле Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑÑебÑеÑÑÑ Ð¿ÐµÑезапÑÑк)
на
shared_preload_libraries = 'sepgsql' # (поÑле Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑÑебÑеÑÑÑ Ð¿ÐµÑезапÑÑк)
$ for DBNAME in template0 template1 postgres; do
postgres --single -F -c exit_on_error=true $DBNAME \
</usr/local/pgsql/share/contrib/sepgsql.sql >/dev/null
doneÐамеÑÑÑе, ÑÑо Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑвидеÑÑ ÑледÑÑÑие ÑведомлениÑ, в завиÑимоÑÑи Ð¾Ñ ÐºÐ¾Ð½ÐºÑеÑнÑÑ ÑÑÑановленнÑÑ Ð²ÐµÑÑий libselinux и selinux-policy:
/etc/selinux/targeted/contexts/sepgsql_contexts: line 33 has invalid object type db_blobs /etc/selinux/targeted/contexts/sepgsql_contexts: line 36 has invalid object type db_language /etc/selinux/targeted/contexts/sepgsql_contexts: line 37 has invalid object type db_language /etc/selinux/targeted/contexts/sepgsql_contexts: line 38 has invalid object type db_language /etc/selinux/targeted/contexts/sepgsql_contexts: line 39 has invalid object type db_language /etc/selinux/targeted/contexts/sepgsql_contexts: line 40 has invalid object type db_language
ÐÑи ÑообÑÐµÐ½Ð¸Ñ Ð½Ðµ кÑиÑиÑÐ½Ñ Ð¸ Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ игноÑиÑоваÑÑ.
ÐÑли пÑоÑеÑÑ ÑÑÑановки завеÑÑаеÑÑÑ Ð±ÐµÐ· оÑибок, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе запÑÑÑиÑÑ ÑеÑÐ²ÐµÑ Ð¾Ð±ÑÑнÑм обÑазом.
F.38.3. РегÑеÑÑионнÑе ÑеÑÑÑ #
ÐÑиÑода SELinux Ñакова, ÑÑо Ð´Ð»Ñ Ð¿ÑÐ¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ ÑегÑеÑÑионнÑÑ
ÑеÑÑов sepgsql ÑÑебÑÑÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе дейÑÑÐ²Ð¸Ñ Ð¿Ð¾ наÑÑÑойке и некоÑоÑÑе из ниÑ
должен вÑполнÑÑÑ root. РегÑеÑÑионнÑе ÑеÑÑÑ Ð½Ðµ бÑдÑÑ Ð·Ð°Ð¿ÑÑкаÑÑÑÑ Ð¾Ð±ÑÑной командой make check или make installcheck; Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð½Ð°ÑÑÑоиÑÑ ÐºÐ¾Ð½ÑигÑÑаÑÐ¸Ñ Ð¸ заÑем вÑзваÑÑ ÑеÑÑовÑй ÑкÑÐ¸Ð¿Ñ Ð²ÑÑÑнÑÑ. ТеÑÑÑ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð·Ð°Ð¿ÑÑкаÑÑÑÑ Ð² каÑалоге contrib/sepgsql наÑÑÑоенного деÑева ÑбоÑки PostgreSQL. ХоÑÑ Ð¸Ð¼ ÑÑебÑеÑÑÑ Ð´ÐµÑево ÑбоÑки, ÑÑи ÑеÑÑÑ ÑаÑÑÑиÑÐ°Ð½Ñ Ð½Ð° иÑполÑзование ÑÑÑановленного ÑеÑвеÑа, Ñо еÑÑÑ Ð¾Ð½Ð¸ пÑимеÑно ÑооÑвеÑÑÑвÑÑÑ make installcheck, но не make check.
СнаÑала ÑÑÑановиÑе sepgsql в ÑабоÑÑÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
по инÑÑÑÑкÑиÑм, пÑиведÑннÑм в ÐодÑазделе F.38.2. ÐамеÑÑÑе, ÑÑо Ð´Ð»Ñ ÑÑого ÑекÑÑий полÑзоваÑÐµÐ»Ñ Ð¾Ð¿ÐµÑаÑионной ÑиÑÑÐµÐ¼Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ подклÑÑаÑÑÑÑ Ðº базе даннÑÑ
как ÑÑпеÑполÑзоваÑÐµÐ»Ñ Ð±ÐµÐ· аÑÑенÑиÑикаÑии по паÑолÑ.
Ðа вÑоÑом Ñаге ÑобеÑиÑе и ÑÑÑановиÑе Ð¿Ð°ÐºÐµÑ Ð¿Ð¾Ð»Ð¸Ñики Ð´Ð»Ñ ÑегÑеÑÑионного ÑеÑÑа. ÐолиÑика sepgsql-regtest пÑедÑÑавлÑÐµÑ Ñобой полиÑÐ¸ÐºÑ Ð¾Ñобого назнаÑениÑ, пÑедоÑÑавлÑÑÑÑÑ Ð½Ð°Ð±Ð¾Ñ Ð¿Ñавил, вклÑÑаемÑÑ
во вÑÐµÐ¼Ñ ÑегÑеÑÑионнÑÑ
ÑеÑÑов. ÐÑ ÑледÑÐµÑ ÑкомпилиÑоваÑÑ Ð¸Ð· иÑÑ
одного Ñайла sepgsql-regtest.te, ÑÑо можно ÑделаÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ make Ñо ÑкÑипÑом Makefile, поÑÑавлÑемÑм Ñ SELinux. Ðам нÑжно бÑÐ´ÐµÑ Ð½Ð°Ð¹Ñи нÑжнÑй Makefile в Ñвоей ÑиÑÑеме; пÑÑÑ, показаннÑй ниже, пÑиведÑн ÑолÑко в каÑеÑÑве пÑимеÑа. (ÐÑÐ¾Ñ Makefile обÑÑно ÑаÑпÑоÑÑÑанÑеÑÑÑ Ð² RPM-пакеÑе selinux-policy-devel или selinux-policy.) СкомпилиÑовав Ð¿Ð°ÐºÐµÑ Ð¿Ð¾Ð»Ð¸Ñики, его нÑжно ÑÑÑановиÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ semodule, коÑоÑÐ°Ñ Ð·Ð°Ð³ÑÑÐ¶Ð°ÐµÑ Ð¿ÐµÑеданнÑе ей пакеÑÑ Ð² ÑдÑо. ÐÑли Ð¿Ð°ÐºÐµÑ ÑÑÑановлен коÑÑекÑно, команда должна вÑвеÑÑи semodule -lsepgsql-regtest в ÑпиÑке доÑÑÑпнÑÑ
пакеÑов полиÑик:
$ cd .../contrib/sepgsql $ make -f /usr/share/selinux/devel/Makefile $ sudo semodule -u sepgsql-regtest.pp $ sudo semodule -l | grep sepgsql sepgsql-regtest 1.07
Ðа ÑÑеÑÑем Ñаге вклÑÑиÑе паÑамеÑÑ sepgsql_regression_test_mode. Ðо ÑообÑажениÑм безопаÑноÑÑи, пÑавила в sepgsql-regtest по ÑмолÑÐ°Ð½Ð¸Ñ Ð½ÐµÐ°ÐºÑивнÑ; паÑамеÑÑ sepgsql_regression_test_mode акÑивиÑÑÐµÑ Ð¿Ñавила, необÑ
одимÑе Ð´Ð»Ñ Ð¿ÑÐ¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ ÑегÑеÑÑионнÑÑ
ÑеÑÑов. ÐклÑÑиÑÑ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ командой setsebool:
$ sudo setsebool sepgsql_regression_test_mode on $ getsebool sepgsql_regression_test_mode sepgsql_regression_test_mode --> on
Ðа ÑеÑвÑÑÑом Ñаге ÑбедиÑеÑÑ Ð² Ñом, ÑÑо ваÑа оболоÑка ÑабоÑÐ°ÐµÑ Ð² домене unconfined_t:
$ id -Z unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
ÐÑли Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ ÑмениÑÑ ÑабоÑий домен, в подÑобноÑÑÑÑ ÑÑо опиÑÑваеÑÑÑ Ð² ÐодÑазделе F.38.8.
ÐаконеÑ, запÑÑÑиÑе ÑкÑÐ¸Ð¿Ñ ÑегÑеÑÑионного ÑеÑÑа:
$ ./test_sepgsql
ÐÑÐ¾Ñ ÑкÑÐ¸Ð¿Ñ Ð¿Ð¾Ð¿ÑÑаеÑÑÑ Ð¿ÑовеÑиÑÑ, вÑе ли Ñаги по наÑÑÑойке конÑигÑÑаÑии вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ñ ÐºÐ¾ÑÑекÑно, а заÑем запÑÑÑÐ¸Ñ ÑегÑеÑÑионнÑе ÑеÑÑÑ Ð´Ð»Ñ Ð¼Ð¾Ð´ÑÐ»Ñ sepgsql.
ÐавеÑÑив ÑеÑÑÑ, ÑекомендÑеÑÑÑ Ð¾ÑклÑÑиÑÑ Ð¿Ð°ÑамеÑÑ sepgsql_regression_test_mode:
$ sudo setsebool sepgsql_regression_test_mode off
ÐÑÑгой, возможно, более пÑедпоÑÑиÑелÑнÑй ваÑÐ¸Ð°Ð½Ñ â ÑдалиÑÑ Ð¿Ð¾Ð»Ð¸ÑÐ¸ÐºÑ sepgsql-regtest полноÑÑÑÑ:
$ sudo semodule -r sepgsql-regtest
F.38.4. ÐаÑамеÑÑÑ GUC #
sepgsql.permissive(boolean) #ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¿ÐµÑеводиÑ
sepgsqlв ÑазÑеÑиÑелÑнÑй Ñежим, вне завиÑимоÑÑи Ð¾Ñ Ñежима ÑиÑÑемÑ. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¾Ð½ Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение off (оÑклÑÑÑн). ÐадаÑÑ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ ÑолÑко вpostgresql.confили в командной ÑÑÑоке пÑи запÑÑке ÑеÑвеÑа.Ðогда ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð²ÐºÐ»ÑÑÑн,
sepgsqlдейÑÑвÑÐµÑ Ð² ÑазÑеÑиÑелÑном Ñежиме, даже еÑли SELinux в Ñелом Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð² огÑаниÑиÑелÑном Ñежиме. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¿Ð¾Ð»ÐµÐ·ÐµÐ½ в пеÑвÑÑ Ð¾ÑеÑÐµÐ´Ñ Ð´Ð»Ñ ÑеÑÑиÑованиÑ.sepgsql.debug_audit(boolean) #ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð²ÐºÐ»ÑÑÐ°ÐµÑ Ð²Ñвод ÑообÑений аÑдиÑа вне завиÑимоÑÑи Ð¾Ñ Ð¿Ð°ÑамеÑÑов ÑиÑÑемной полиÑики. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¾Ð½ оÑклÑÑÑн (Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение off), ÑÑо ознаÑаеÑ, ÑÑо ÑообÑÐµÐ½Ð¸Ñ Ð±ÑдÑÑ Ð²ÑводиÑÑÑÑ ÑоглаÑно паÑамеÑÑам ÑиÑÑемÑ.
ÐолиÑики безопаÑноÑÑи SELinux Ñакже ÑодеÑÐ¶Ð¸Ñ Ð¿Ñавила, опÑеделÑÑÑие, бÑдÑÑ Ð»Ð¸ ÑикÑиÑоваÑÑÑÑ Ð² жÑÑнале опÑеделÑннÑе ÑобÑÑиÑ. Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÑикÑиÑÑÑÑÑÑ Ð½Ð°ÑÑÑÐµÐ½Ð¸Ñ Ð´Ð¾ÑÑÑпа, а ÑÑпеÑнÑй доÑÑÑп â неÑ.
ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¿ÑинÑдиÑелÑно вклÑÑÐ°ÐµÑ ÑикÑиÑование в жÑÑнале вÑÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½ÑÑ ÑобÑÑий, вне завиÑимоÑÑи Ð¾Ñ ÑиÑÑемной полиÑики.
F.38.5. ФÑнкÑионалÑнÑе возможноÑÑи #
F.38.5.1. УпÑавлÑемÑе клаÑÑÑ Ð¾Ð±ÑекÑов #
ÐÐ¾Ð´ÐµÐ»Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи SELinux опиÑÑÐ²Ð°ÐµÑ Ð²Ñе пÑавила доÑÑÑпа в виде оÑноÑений Ð¼ÐµÐ¶Ð´Ñ ÑÑÑноÑÑÑÑ ÑÑбÑекÑа (обÑÑно, ÑÑо ÐºÐ»Ð¸ÐµÐ½Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
) и ÑÑÑноÑÑÑÑ Ð¾Ð±ÑекÑа (напÑимеÑ, обÑекÑом Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
), ÐºÐ°Ð¶Ð´Ð°Ñ Ð¸Ð· коÑоÑÑÑ
опÑеделÑеÑÑÑ Ð¼ÐµÑкой безопаÑноÑÑи. ÐÑли оÑÑÑеÑÑвлÑеÑÑÑ Ð¿Ð¾Ð¿ÑÑка доÑÑÑпа к непомеÑÐµÐ½Ð½Ð¾Ð¼Ñ Ð¾Ð±ÑекÑÑ, он обÑабаÑÑваеÑÑÑ ÐºÐ°Ðº обÑекÑ, имеÑÑий меÑÐºÑ unlabeled_t.
РнаÑÑоÑÑее вÑÐµÐ¼Ñ sepgsql позволÑÐµÑ Ð½Ð°Ð·Ð½Ð°ÑаÑÑ Ð¼ÐµÑки безопаÑноÑÑи ÑÑ
емам, ÑаблиÑам, ÑÑолбÑам, поÑледоваÑелÑноÑÑÑм, пÑедÑÑавлениÑм и ÑÑнкÑиÑм. Ðогда sepgsql акÑивен, меÑки безопаÑноÑÑи авÑомаÑиÑеÑки назнаÑаÑÑÑÑ Ð¿Ð¾Ð´Ð´ÐµÑживаемÑм обÑекÑам Ð±Ð°Ð·Ñ Ð² Ð¼Ð¾Ð¼ÐµÐ½Ñ ÑозданиÑ. Ð¢Ð°ÐºÐ°Ñ Ð¼ÐµÑка назÑваеÑÑÑ Ð¼ÐµÑкой безопаÑноÑÑи по ÑмолÑÐ°Ð½Ð¸Ñ Ð¸ ÑÑÑанавливаеÑÑÑ ÑоглаÑно полиÑике безопаÑноÑÑи ÑиÑÑемÑ, коÑоÑÐ°Ñ ÑÑиÑÑÐ²Ð°ÐµÑ Ð¼ÐµÑÐºÑ ÑоздаÑелÑ, меÑкÑ, назнаÑеннÑÑ ÑодиÑелÑÑÐºÐ¾Ð¼Ñ Ð¾Ð±ÑекÑÑ Ñоздаваемого обÑекÑа и, возможно, Ð¸Ð¼Ñ Ñоздаваемого обÑекÑа.
ÐовÑй обÑÐµÐºÑ Ð±Ð°Ð·Ñ, как пÑавило, наÑледÑÐµÑ Ð¼ÐµÑÐºÑ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи, назнаÑеннÑÑ ÑодиÑелÑÑÐºÐ¾Ð¼Ñ Ð¾Ð±ÑекÑÑ, еÑли ÑолÑко в полиÑике безопаÑноÑÑи не Ð·Ð°Ð´Ð°Ð½Ñ ÑпеÑиалÑнÑе пÑавила, назÑваемÑе пÑавилами пеÑÐµÑ Ð¾Ð´Ð° Ñипов (в ÑÑом ÑлÑÑае Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½Ð°Ð·Ð½Ð°Ñена дÑÑÐ³Ð°Ñ Ð¼ÐµÑка). ÐÐ»Ñ ÑÑ ÐµÐ¼ ÑодиÑелÑÑким обÑекÑом ÑвлÑеÑÑÑ ÑекÑÑÐ°Ñ Ð±Ð°Ð·Ð° даннÑÑ ; Ð´Ð»Ñ ÑаблиÑ, поÑледоваÑелÑноÑÑей, пÑедÑÑавлений и ÑÑнкÑий â ÑÑ ÐµÐ¼Ð°, ÑодеÑжаÑÐ°Ñ ÑÑи обÑекÑÑ; Ð´Ð»Ñ ÑÑолбÑов â ÑаблиÑа.
F.38.5.2. РазÑеÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ DML #
ÐÐ»Ñ ÑаблиÑ, задейÑÑвованнÑÑ
в запÑоÑе в каÑеÑÑве ÑелевÑÑ
, пÑовеÑÑÑÑÑÑ ÑазÑеÑÐµÐ½Ð¸Ñ db_table:select, db_table:insert, db_table:update или db_table:delete в завиÑимоÑÑи Ð¾Ñ Ñипа опеÑаÑоÑа; кÑоме Ñого, Ð´Ð»Ñ Ð²ÑеÑ
ÑаблиÑ, ÑодеÑжаÑиÑ
ÑÑолбÑÑ, ÑигÑÑиÑÑÑÑие в пÑедложении WHERE или RETURNING, или ÑлÑжаÑиÑ
иÑÑоÑником даннÑÑ
Ð´Ð»Ñ UPDATE и Ñ. п., Ñакже пÑовеÑÑеÑÑÑ ÑазÑеÑение db_table:select.
ÐÐ»Ñ Ð²ÑеÑ
задейÑÑвованнÑÑ
ÑÑолбÑов Ñакже пÑовеÑÑÑÑÑÑ ÑазÑеÑÐµÐ½Ð¸Ñ Ð½Ð° ÑÑовне ÑÑолбÑов. РазÑеÑение db_column:select пÑовеÑÑеÑÑÑ Ð½Ðµ ÑолÑко Ð´Ð»Ñ ÑÑолбÑов, коÑоÑÑе ÑÑиÑÑваÑÑÑÑ Ð¾Ð¿ÐµÑаÑоÑом SELECT, но и Ð´Ð»Ñ ÑеÑ
, к коÑоÑÑм обÑаÑаÑÑÑÑ Ð´ÑÑгие опеÑаÑоÑÑ DML; db_column:update или db_column:insert Ñакже пÑовеÑÑеÑÑÑ Ð´Ð»Ñ ÑÑолбÑов, изменÑемÑÑ
опеÑаÑоÑами UPDATE или INSERT.
ÐапÑимеÑ, ÑаÑÑмоÑÑим запÑоÑ:
UPDATE t1 SET x = 2, y = func1(y) WHERE z = 100;
Рданном ÑлÑÑае db_column:update бÑÐ´ÐµÑ Ð¿ÑовеÑÑÑÑÑÑ Ð´Ð»Ñ ÑÑолбÑа t1.x, Ñак как он изменÑеÑÑÑ, db_column:{select update} бÑÐ´ÐµÑ Ð¿ÑовеÑÑÑÑÑÑ Ð´Ð»Ñ t1.y, Ñак как он и ÑÑиÑÑваеÑÑÑ, и изменÑеÑÑÑ, а db_column:select â Ð´Ð»Ñ ÑÑолбÑа t1.z, Ñак как он ÑолÑко ÑÑиÑÑваеÑÑÑ. Ðа ÑÑовне ÑаблиÑÑ Ñакже бÑÐ´ÐµÑ Ð¿ÑовеÑÑÑÑÑÑ ÑазÑеÑение db_table:{select update}.
ÐÐ»Ñ Ð¿Ð¾ÑледоваÑелÑноÑÑей пÑовеÑÑеÑÑÑ ÑазÑеÑение db_sequence:get_value, когда Ð¸Ð¼ÐµÐµÑ Ð¼ÐµÑÑо обÑаÑение к обÑекÑÑ Ð¿Ð¾ÑледоваÑелÑноÑÑи в SELECT; замеÑÑÑе, однако, ÑÑо в наÑÑоÑÑее вÑÐµÐ¼Ñ ÑазÑеÑÐµÐ½Ð¸Ñ Ð½Ð° вÑполнение ÑвÑзаннÑÑ
ÑÑнкÑий, ÑакиÑ
как, lastval(), не пÑовеÑÑÑÑÑÑ.
ÐÐ»Ñ Ð¿ÑедÑÑавлений пÑовеÑÑеÑÑÑ db_view:expand, а заÑем вÑе дÑÑгие ÑооÑвеÑÑÑвÑÑÑие ÑазÑеÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¾Ð±ÑекÑов, ÑазвÑÑнÑÑÑÑ
из опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿ÑедÑÑавлениÑ, в индивидÑалÑном поÑÑдке.
ÐÐ»Ñ ÑÑнкÑий пÑовеÑÑеÑÑÑ db_procedure:{execute}, когда полÑзоваÑÐµÐ»Ñ Ð¿ÑÑаеÑÑÑ Ð²ÑполниÑÑ ÑÑнкÑÐ¸Ñ Ð² ÑоÑÑаве запÑоÑа, либо пÑи вÑзове по бÑÑÑÑÐ¾Ð¼Ñ Ð¿ÑÑи. ÐÑли ÑÑа ÑÑнкÑÐ¸Ñ ÑвлÑеÑÑÑ Ð´Ð¾Ð²ÐµÑенной пÑоÑедÑÑой, Ñакже пÑовеÑÑеÑÑÑ ÑазÑеÑение db_procedure:{entrypoint}, ÑÑÐ¾Ð±Ñ ÑдоÑÑовеÑиÑÑÑÑ, ÑÑо ÑÑа ÑÑнкÑÐ¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑоÑкой вÑ
ода в довеÑеннÑÑ Ð¿ÑоÑедÑÑÑ.
ÐÑи обÑаÑении к лÑÐ±Ð¾Ð¼Ñ Ð¾Ð±ÑекÑÑ ÑÑ
ÐµÐ¼Ñ Ð½ÐµÐ¾Ð±Ñ
одимо имеÑÑ ÑазÑеÑение db_schema:search Ð´Ð»Ñ ÑодеÑжаÑей его ÑÑ
емÑ. Ðогда Ð¸Ð¼Ñ Ñелевого обÑекÑа не дополнÑеÑÑÑ ÑÑ
емой, ÑÑ
емÑ, Ð´Ð»Ñ ÐºÐ¾ÑоÑÑÑ
данное ÑазÑеÑение оÑÑÑÑÑÑвÑеÑ, не бÑдÑÑ Ð¿ÑоÑмаÑÑиваÑÑÑÑ (Ñо же пÑоиÑÑ
одиÑ, еÑли Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð½ÐµÑ Ð¿Ñава USAGE Ð´Ð»Ñ ÑÑой ÑÑ
емÑ). Ðогда ÑÑ
ема ÑказÑваеÑÑÑ Ñвно, полÑзоваÑÐµÐ»Ñ Ð¿Ð¾Ð»ÑÑÐ¸Ñ Ð¾ÑибкÑ, еÑли он не Ð¸Ð¼ÐµÐµÑ ÑÑебÑемого ÑазÑеÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð´Ð¾ÑÑÑпа к Ñказанной ÑÑ
еме.
ÐлиенÑÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ бÑÑÑ ÑазÑеÑÑн доÑÑÑп ко вÑем задейÑÑвованнÑм в запÑоÑе ÑаблиÑам и ÑÑолбÑам, даже еÑли они пÑоÑвилиÑÑ Ð² нÑм в ÑезÑлÑÑаÑе ÑазвоÑаÑÐ¸Ð²Ð°Ð½Ð¸Ñ Ð¿ÑедÑÑавлений, Ñак ÑÑо пÑавила пÑименÑÑÑÑÑ ÑоглаÑованно вне завиÑимоÑÑи Ð¾Ñ Ð²Ð°ÑианÑа обÑаÑÐµÐ½Ð¸Ñ Ðº ÑодеÑÐ¶Ð¸Ð¼Ð¾Ð¼Ñ ÑаблиÑ.
СÑандаÑÑÐ½Ð°Ñ ÑиÑÑема пÑивилегий позволÑÐµÑ ÑÑпеÑполÑзоваÑелÑм баз даннÑÑ
изменÑÑÑ ÑиÑÑемнÑе каÑалоги Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´ DML и обÑаÑаÑÑÑÑ Ðº ÑаблиÑам TOAST или модиÑиÑиÑоваÑÑ Ð¸Ñ
. Ðогда модÑÐ»Ñ sepgsql акÑивен, ÑÑи опеÑаÑии запÑеÑаÑÑÑÑ.
F.38.5.3. РазÑеÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ DDL #
SELinux опÑеделÑÐµÑ Ð½Ð°Ð±Ð¾Ñ ÑазÑеÑений Ð´Ð»Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑÑандаÑÑнÑми опеÑаÑиÑми Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ Ñипа обÑекÑа: Ñоздание, изменение опÑеделениÑ, Ñдаление и Ñмена меÑки безопаÑноÑÑи. Рдополнение к ним Ð´Ð»Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ Ñипов обÑекÑов пÑедÑÑмоÑÑÐµÐ½Ñ ÑпеÑиалÑнÑе ÑазÑеÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ñ ÑпеÑиÑиÑеÑкими опеÑаÑиÑми, напÑимеÑ, добавление или Ñдаление обÑекÑов в опÑеделÑнной ÑÑ ÐµÐ¼Ðµ.
ÐÐ»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ обÑекÑа Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
ÑÑебÑеÑÑÑ ÑазÑеÑение create. SELinux ÑазÑеÑÐ°ÐµÑ Ð¸Ð»Ð¸ запÑеÑÐ°ÐµÑ Ð²Ñполнение ÑÑой опеÑаÑии в завиÑимоÑÑи Ð¾Ñ Ð¼ÐµÑки безопаÑноÑÑи клиенÑа и пÑедполагаемой меÑки безопаÑноÑÑи нового обÑекÑа. РнекоÑоÑÑÑ
ÑлÑÑаÑÑ
ÑÑебÑÑÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе ÑазÑеÑениÑ:
CREATE DATABASEдополниÑелÑно ÑÑебÑÐµÑ ÑазÑеÑениÑgetattrв иÑÑ Ð¾Ð´Ð½Ð¾Ð¹ или Ñаблонной базе даннÑÑ .Создание обÑекÑа ÑÑ ÐµÐ¼Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑно ÑÑебÑÐµÑ ÑазÑеÑениÑ
add_nameв ÑодиÑелÑÑкой ÑÑ ÐµÐ¼Ðµ.Создание ÑаблиÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑно ÑÑебÑÐµÑ ÑазÑеÑÐµÐ½Ð¸Ñ Ð½Ð° Ñоздание каждой оÑделÑного ÑÑолбÑа ÑаблиÑÑ, как еÑли Ð±Ñ ÐºÐ°Ð¶Ð´Ñй ÑÑÐ¾Ð»Ð±ÐµÑ ÑаблиÑÑ Ð±Ñл оÑделÑнÑм обÑекÑом веÑÑ Ð½ÐµÐ³Ð¾ ÑÑовнÑ.
Создание ÑÑнкÑии Ñ Ð°ÑÑибÑÑом
LEAKPROOFдополниÑелÑно ÑÑебÑÐµÑ ÑазÑеÑениÑinstall. (ÐÑо ÑазÑеÑение Ñакже пÑовеÑÑеÑÑÑ, когда аÑÑибÑÑLEAKPROOFÑÑÑанавливаеÑÑÑ Ð´Ð»Ñ ÑÑÑеÑÑвÑÑÑей ÑÑнкÑии.)
Ðогда вÑполнÑеÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° DROP, Ð´Ð»Ñ ÑдалÑемого обÑекÑа бÑÐ´ÐµÑ Ð¿ÑовеÑÑÑÑÑÑ ÑазÑеÑение drop. РазÑеÑÐµÐ½Ð¸Ñ Ð±ÑдÑÑ Ñакже пÑовеÑÑÑÑÑÑ Ð¸ Ð´Ð»Ñ Ð¾Ð±ÑекÑов, ÑдалÑемÑÑ
коÑвенно, вÑледÑÑвие ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ CASCADE. ÐÐ»Ñ ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¾Ð±ÑекÑов, ÑодеÑжаÑиÑ
ÑÑ Ð² опÑеделÑнной ÑÑ
еме, (ÑаблиÑ, пÑедÑÑавлениÑ, поÑледоваÑелÑноÑÑей и пÑоÑедÑÑ) дополниÑелÑно нÑжно имеÑÑ ÑазÑеÑение remove_name в ÑÑой ÑÑ
еме.
Ðогда вÑполнÑеÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° ALTER, Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ модиÑиÑиÑÑемого обÑекÑа пÑовеÑÑеÑÑÑ ÑазÑеÑение setattr, кÑоме подÑинÑннÑÑ
обÑекÑов, ÑакиÑ
как индекÑÑ Ð¸Ð»Ð¸ ÑÑиггеÑÑ ÑÐ°Ð±Ð»Ð¸Ñ (на ниÑ
ÑаÑпÑоÑÑÑанÑÑÑÑÑ ÑазÑеÑÐµÐ½Ð¸Ñ ÑодиÑелÑÑкого обÑекÑа). РнекоÑоÑÑÑ
ÑлÑÑаÑÑ
ÑÑебÑÑÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе ÑазÑеÑениÑ:
ÐÑи пеÑемеÑении обÑекÑа в новÑÑ ÑÑ ÐµÐ¼Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑно ÑÑебÑеÑÑÑ ÑазÑеÑение
remove_nameв ÑÑаÑой ÑÑ ÐµÐ¼Ðµ иadd_nameв новой.ÐÐ»Ñ ÑÑÑановки аÑÑибÑÑа
LEAKPROOFÐ´Ð»Ñ ÑÑнкÑии ÑÑебÑеÑÑÑ ÑазÑеÑениеinstall.ÐÐ»Ñ Ð¸ÑполÑзованиÑ
SECURITY LABELдополниÑелÑно ÑÑебÑеÑÑÑ ÑазÑеÑениеrelabelfromÐ´Ð»Ñ Ð¾Ð±ÑекÑа Ñ ÐµÐ³Ð¾ ÑÑаÑой меÑкой безопаÑноÑÑи иrelabeltoÐ´Ð»Ñ ÑÑого обÑекÑа Ñ Ð½Ð¾Ð²Ð¾Ð¹ меÑкой безопаÑноÑÑи. (Ð ÑлÑÑаÑÑ , когда ÑÑÑановлено неÑколÑко поÑÑавÑиков меÑок и полÑзоваÑÐµÐ»Ñ Ð¿ÑÑаеÑÑÑ Ð·Ð°Ð´Ð°ÑÑ Ð¼ÐµÑкÑ, неподконÑÑолÑнÑÑ SELinux, должно пÑовеÑÑÑÑÑÑ ÑолÑко ÑазÑеÑениеsetattr. РнаÑÑоÑÑее вÑÐµÐ¼Ñ ÑÑого не пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð¸Ð·-за огÑаниÑений ÑеализаÑии.)
F.38.5.4. ÐовеÑеннÑе пÑоÑедÑÑÑ #
ÐовеÑеннÑе пÑоÑедÑÑÑ Ð¿Ð¾Ñ Ð¾Ð¶Ð¸ на ÑÑнкÑии, опÑеделÑÑÑие конÑекÑÑ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи, или ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ setuid. Ð SELinux Ñеализована возможноÑÑÑ Ð·Ð°Ð¿ÑÑкаÑÑ Ð´Ð¾Ð²ÐµÑеннÑй код Ñ Ð¼ÐµÑкой безопаÑноÑÑи, оÑлиÑной Ð¾Ñ Ð¼ÐµÑки клиенÑа, как пÑавило, Ð´Ð»Ñ Ð¿ÑедоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑÑÑко конÑÑолиÑÑемого доÑÑÑпа к важнÑм даннÑм (пÑи ÑÑом напÑимеÑ, могÑÑ Ð¾ÑÑеиваÑÑÑÑ ÑÑÑоки или Ñ ÑанимÑе знаÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð²ÑводиÑÑÑÑ Ñ Ð¼ÐµÐ½ÑÑей ÑоÑноÑÑÑÑ). ÐÑÐ´ÐµÑ Ð»Ð¸ ÑÑнкÑÐ¸Ñ Ð²ÑзÑваÑÑÑÑ ÐºÐ°Ðº довеÑÐµÐ½Ð½Ð°Ñ Ð¿ÑоÑедÑÑа, опÑеделÑеÑÑÑ ÐµÑ Ð¼ÐµÑкой безопаÑноÑÑи и полиÑикой опеÑаÑионной ÑиÑÑемÑ. ÐапÑимеÑ:
postgres=# CREATE TABLE customer (
cid int primary key,
cname text,
credit text
);
CREATE TABLE
postgres=# SECURITY LABEL ON COLUMN customer.credit
IS 'system_u:object_r:sepgsql_secret_table_t:s0';
SECURITY LABEL
postgres=# CREATE FUNCTION show_credit(int) RETURNS text
AS 'SELECT regexp_replace(credit, ''-[0-9]+$'', ''-xxxx'', ''g'')
FROM customer WHERE cid = $1'
LANGUAGE sql;
CREATE FUNCTION
postgres=# SECURITY LABEL ON FUNCTION show_credit(int)
IS 'system_u:object_r:sepgsql_trusted_proc_exec_t:s0';
SECURITY LABELÐоказаннÑе вÑÑе опеÑаÑии должен вÑполнÑÑÑ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ñ Ð¿Ñавами админиÑÑÑаÑоÑа.
postgres=# SELECT * FROM customer; ERROR: SELinux: security policy violation postgres=# SELECT cid, cname, show_credit(cid) FROM customer; cid | cname | show_credit -----+--------+--------------------- 1 | taro | 1111-2222-3333-xxxx 2 | hanako | 5555-6666-7777-xxxx (2 rows)
Рданном ÑлÑÑае обÑÑнÑй полÑзоваÑÐµÐ»Ñ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð±ÑаÑаÑÑÑÑ Ðº customer.credit напÑÑмÑÑ, но довеÑÐµÐ½Ð½Ð°Ñ Ð¿ÑоÑедÑÑа show_credit позволÑÐµÑ ÐµÐ¼Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð½Ð¾Ð¼ÐµÑа кÑедиÑнÑÑ
каÑÑ ÐºÐ»Ð¸ÐµÐ½Ñов, в коÑоÑÑÑ
бÑдÑÑ ÑкÑÑÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе ÑиÑÑÑ.
F.38.5.5. ÐинамиÑеÑкие пеÑеклÑÑÐµÐ½Ð¸Ñ Ð´Ð¾Ð¼ÐµÐ½Ð° #
ÐозможноÑÑÑ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÑеÑкого пеÑеÑ
ода из домена в домен SELinux позволÑÐµÑ Ð¿ÐµÑеводиÑÑ Ð¼ÐµÑÐºÑ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи клиенÑÑкого пÑоÑеÑÑа, клиенÑÑкий домен в новÑй конÑекÑÑ, еÑли ÑÑо допÑÑкаеÑÑÑ Ð¿Ð¾Ð»Ð¸Ñикой безопаÑноÑÑи. ÐÐ»Ñ ÑÑого ÐºÐ»Ð¸ÐµÐ½Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ имеÑÑ ÑазÑеÑение setcurrent, а Ñакже ÑазÑеÑение dyntransition Ð´Ð»Ñ Ð¿ÐµÑеÑ
ода из ÑÑаÑого в новÑй домен.
ÐинамиÑеÑкие пеÑеклÑÑÐµÐ½Ð¸Ñ Ð´Ð¾Ð¼ÐµÐ½Ð° ÑледÑÐµÑ ÑÑаÑелÑно пÑодÑмÑваÑÑ, Ñак как Ñаким обÑазом полÑзоваÑели могÑÑ Ð¼ÐµÐ½ÑÑÑ Ñвои меÑки, а знаÑÐ¸Ñ Ð¸ пÑивилегии, по ÑобÑÑÐ²ÐµÐ½Ð½Ð¾Ð¼Ñ Ð¶ÐµÐ»Ð°Ð½Ð¸Ñ, а не (как в ÑлÑÑае Ñ Ð´Ð¾Ð²ÐµÑеннÑми пÑоÑедÑÑами) по пÑавилам, дикÑÑемÑм ÑиÑÑемой. Таким обÑазом, ÑазÑеÑение dyntransition ÑÑиÑаеÑÑÑ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑнÑм, ÑолÑко когда пÑименÑеÑÑÑ Ð´Ð»Ñ Ð¿ÐµÑеклÑÑÐµÐ½Ð¸Ñ Ð² домен Ñ Ð±Ð¾Ð»ÐµÐµ огÑаниÑеннÑм набоÑом пÑивилегий, Ñем ÑекÑÑий. ÐапÑимеÑ:
regression=# select sepgsql_getcon();
sepgsql_getcon
-------------------------------------------------------
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
(1 row)
regression=# SELECT sepgsql_setcon('unconfined_u:unconfined_r:unconfined_t:s0-s0:c1.c4');
sepgsql_setcon
----------------
t
(1 row)
regression=# SELECT sepgsql_setcon('unconfined_u:unconfined_r:unconfined_t:s0-s0:c1.c1023');
ERROR: SELinux: security policy violationРпоказанном вÑÑе пÑимеÑе Ð¼Ñ Ñмогли пеÑеклÑÑиÑÑÑÑ Ð¸Ð· более ÑиÑокого диапазона MCS c1.c1023 в более Ñзкий c1.c4, но пеÑеклÑÑение в обÑаÑнÑÑ ÑÑоÑÐ¾Ð½Ñ Ð±Ñло запÑеÑено.
СоÑеÑание динамиÑеÑкого пеÑеклÑÑÐµÐ½Ð¸Ñ Ð´Ð¾Ð¼ÐµÐ½Ð° Ñ Ð´Ð¾Ð²ÐµÑеннÑми пÑоÑедÑÑами позволÑÐµÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¸Ð½ÑеÑеÑное ÑеÑение, подÑ
одÑÑее Ð´Ð»Ñ ÑеализаÑии жизненного Ñикла пÑоÑеÑÑов Ñ Ð¿Ñлом Ñоединений. Ðаже еÑли ваÑÐµÐ¼Ñ Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑÑ Ð¿Ñла Ñоединений не ÑазÑеÑаеÑÑÑ Ð·Ð°Ð¿ÑÑкаÑÑ Ð¼Ð½Ð¾Ð³Ð¸Ðµ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ SQL, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑазÑеÑиÑÑ ÐµÐ¼Ñ ÑмениÑÑ Ð¼ÐµÑÐºÑ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи клиенÑа, вÑзвав ÑÑнкÑÐ¸Ñ sepgsql_setcon() из довеÑенной пÑоÑедÑÑÑ; Ð´Ð»Ñ ÑÑого Ð¼Ð¾Ð¶ÐµÑ Ð¿ÐµÑедаваÑÑÑÑ ÑдоÑÑовеÑение Ð´Ð»Ñ Ð°Ð²ÑоÑизаÑии запÑоÑа на ÑÐ¼ÐµÐ½Ñ Ð¼ÐµÑки клиенÑа. ÐоÑле ÑÑого ÑÐµÐ°Ð½Ñ Ð¿Ð¾Ð»ÑÑÐ¸Ñ Ð¿Ñивилегии Ñелевого полÑзоваÑелÑ, а не полÑзоваÑÐµÐ»Ñ Ð¿Ñла Ñоединений. Ðозднее Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ Ð¿Ñла Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑмениÑÑ ÑÐ¼ÐµÐ½Ñ ÐºÐ¾Ð½ÑекÑÑа безопаÑноÑÑи, вÑзвав sepgsql_setcon() Ñ Ð°ÑгÑменÑом NULL, Ñак же из довеÑенной пÑоÑедÑÑÑ Ñ Ð½ÐµÐ¾Ð±Ñ
одимÑми пÑовеÑками ÑазÑеÑений. ÐÐ´ÐµÑ ÑÑого подÑ
ода в Ñом, ÑÑо ÑолÑко ÑÑой довеÑенной пÑоÑедÑÑе бÑÐ´ÐµÑ ÑазÑеÑено менÑÑÑ Ð´ÐµÐ¹ÑÑвÑÑÑÑÑ Ð¼ÐµÑÐºÑ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи и ÑолÑко в Ñом ÑлÑÑае, когда ей пеÑедаÑÑÑÑ Ð¿ÑавилÑное ÑдоÑÑовеÑение. РазÑмееÑÑÑ, ÑÑÐ¾Ð±Ñ ÑÑо ÑеÑение бÑло безопаÑнÑм, Ñ
ÑанилиÑе ÑдоÑÑовеÑений (ÑаблиÑа, опÑеделение пÑоÑедÑÑÑ Ð¸Ð»Ð¸ ÑÑо-Ñо дÑÑгое) не должно бÑÑÑ Ð¾Ð±ÑедоÑÑÑпнÑм.
F.38.6. ФÑнкÑии sepgsql #
РТаблиÑе F.30 пеÑеÑиÑÐ»ÐµÐ½Ñ Ð²Ñе доÑÑÑпнÑе ÑÑнкÑии.
ТаблиÑа F.30. ФÑнкÑии sepgsql
ФÑнкÑÐ¸Ñ ÐпиÑание |
|---|
ÐозвÑаÑÐ°ÐµÑ ÐºÐ»Ð¸ÐµÐ½ÑÑкий домен, ÑекÑÑÑÑ Ð¼ÐµÑÐºÑ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи клиенÑа. |
ÐеÑеклÑÑÐ°ÐµÑ Ð´Ð¾Ð¼ÐµÐ½ клиенÑа ÑекÑÑего ÑеанÑа в новÑй домен, еÑли ÑÑо допÑÑÐºÐ°ÐµÑ Ð¿Ð¾Ð»Ð¸Ñика безопаÑноÑÑи. ÐÑа ÑÑнкÑÐ¸Ñ Ñакже пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð² аÑгÑменÑе |
ÐеÑÐµÐ²Ð¾Ð´Ð¸Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñй диапазон MLS/MCS из полной запиÑи в низкоÑÑовневÑй ÑоÑмаÑ, еÑли ÑабоÑÐ°ÐµÑ Ð´ÐµÐ¼Ð¾Ð½ mcstrans. |
ÐеÑÐµÐ²Ð¾Ð´Ð¸Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñй диапазон MLS/MCS из низкоÑÑовневого ÑоÑмаÑа в полнÑÑ Ð·Ð°Ð¿Ð¸ÑÑ, еÑли ÑабоÑÐ°ÐµÑ Ð´ÐµÐ¼Ð¾Ð½ mcstrans. |
УÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð½Ð°ÑалÑнÑе меÑки безопаÑноÑÑи Ð´Ð»Ñ Ð²ÑеÑ
обÑекÑов в ÑекÑÑей базе даннÑÑ
. РаÑгÑменÑе Ð¼Ð¾Ð¶ÐµÑ Ð¿ÐµÑедаваÑÑÑÑ |
F.38.7. ÐгÑаниÑÐµÐ½Ð¸Ñ #
- РазÑеÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÑзÑка опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ (DDL, Data Definition Language)
ÐÑледÑÑвие огÑаниÑений ÑеализаÑии, Ð´Ð»Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ Ð¾Ð¿ÐµÑаÑий DDL ÑазÑеÑÐµÐ½Ð¸Ñ Ð½Ðµ пÑовеÑÑÑÑÑÑ.
- РазÑеÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÑзÑка ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ñми (DCL, Data Control Language)
ÐÑледÑÑвие огÑаниÑений ÑеализаÑии, Ð´Ð»Ñ Ð¾Ð¿ÐµÑаÑий DCL ÑазÑеÑÐµÐ½Ð¸Ñ Ð½Ðµ пÑовеÑÑÑÑÑÑ.
- УпÑавление доÑÑÑпом на ÑÑовне ÑÑÑок
PostgreSQL поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð¾Ð³ÑаниÑение доÑÑÑпа на ÑÑовне ÑÑÑок, а
sepgsqlâ неÑ.- СкÑÑÑÑе каналÑ
ÐодÑлÑ
sepgsqlне пÑÑаеÑÑÑ ÑкÑÑÑÑ ÑÑÑеÑÑвование опÑеделÑнного обÑекÑа, даже еÑли полÑзоваÑÐµÐ»Ñ Ð½Ðµ ÑазÑеÑено обÑаÑаÑÑÑÑ Ðº немÑ. ÐапÑимеÑ, возможно догадаÑÑÑÑ Ð¾ ÑÑÑеÑÑвовании невидимого обÑекÑа по конÑликÑам пеÑвиÑного клÑÑа, наÑÑÑениÑм внеÑÐ½Ð¸Ñ ÐºÐ»ÑÑей и Ñ. д., даже когда нелÑÐ·Ñ Ð¿Ð¾Ð»ÑÑиÑÑ ÑодеÑжимое ÑÑого обÑекÑа. СÑÑеÑÑвование ÑовеÑÑенно ÑекÑеÑной ÑаблиÑÑ Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ ÑкÑÑÑÑ; надеÑÑÑÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ ÑолÑко на Ñо, ÑÑо бÑÐ´ÐµÑ Ð·Ð°ÑиÑено ÐµÑ ÑодеÑжимое.
F.38.8. ÐнеÑние ÑеÑÑÑÑÑ #
- SE-PostgreSQL Introduction, Ðведение в SE-PostgreSQL
Ðа ÑÑой вики-ÑÑÑаниÑе даÑÑÑÑ ÐºÑаÑкий Ð¾Ð±Ð·Ð¾Ñ ÑÑого ÑеÑÐµÐ½Ð¸Ñ Ð¸ ÑаÑÑказÑваеÑÑÑ Ð¾Ð± аÑÑ Ð¸ÑекÑÑÑе и конÑÑÑÑкÑии безопаÑноÑÑи, админиÑÑÑиÑовании и ожидаемÑÑ Ð² бÑдÑÑем возможноÑÑÑÑ .
- SELinux User's and Administrator's Guide, Ð ÑководÑÑво полÑзоваÑÐµÐ»Ñ Ð¸ админиÑÑÑаÑоÑа SELinux
Ð ÑÑом докÑменÑе пÑедÑÑавлен ÑиÑокий ÑпекÑÑ Ð·Ð½Ð°Ð½Ð¸Ð¹ по админиÑÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ SELinux в ÐС. РпеÑвÑÑ Ð¾ÑеÑÐµÐ´Ñ Ð¾Ð½ оÑиенÑиÑован на ÑиÑÑÐµÐ¼Ñ Red Hat, но его облаÑÑÑ Ð¿ÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½Ðµ огÑаниÑена ими.
- Fedora SELinux FAQ, ЧаÑÑо задаваемÑе вопÑоÑÑ Ð¿Ð¾ SELinux в ÐС Fedora
Ð ÑÑом докÑменÑе даÑÑÑÑ Ð¾ÑвеÑÑ Ð½Ð° ÑаÑÑо задаваемÑе вопÑоÑÑ Ð¿Ð¾ SELinux. РпеÑвÑÑ Ð¾ÑеÑÐµÐ´Ñ Ð¾Ð½ оÑиенÑиÑован на ÐС Fedora, но его облаÑÑÑ Ð¿ÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½Ðµ огÑаниÑена ей.
F.38.9. ÐвÑÐ¾Ñ #
ÐайÐай ÐоÑ
Ñй <[email protected]>