31.3. РазгÑаниÑение пÑав Ð¼ÐµÐ¶Ð´Ñ Ð¿ÑивилегиÑованнÑми полÑзоваÑелÑми СУÐÐ
ÐонÑигÑÑаÑÐ¸Ñ Ð²ÑÐµÑ Ð¡Ð£ÐРна оÑнове PostgreSQL вклÑÑÐ°ÐµÑ ÑÐ¾Ð»Ñ ÑÑпеÑполÑзоваÑелÑ, пÑименÑемÑÑ Ð´Ð»Ñ Ð½Ð°ÑалÑной загÑÑзки Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ . Ðднако далÑнейÑее иÑполÑзование ÑÑой Ñоли Ð´Ð»Ñ ÑÑÑиннÑÑ Ð¾Ð¿ÐµÑаÑий Ñ Ð¡Ð£ÐРнеÑÑÑ Ð² Ñебе ÑиÑки Ð´Ð»Ñ Ð¸Ð½ÑоÑмаÑионной безопаÑноÑÑи. ÐоÑколÑÐºÑ ÑÑÑÑÐ½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑ ÑÑпеÑполÑзоваÑÐµÐ»Ñ Ð¾Ð±Ð»Ð°Ð´Ð°ÐµÑ ÑиÑоким набоÑом пÑав в ÑиÑÑеме, она ÑÑановиÑÑÑ Ð¼Ð¸ÑенÑÑ ÐºÐ¸Ð±ÐµÑпÑеÑÑÑпников, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к ÑÑÐ´Ñ Ð½ÐµÐ±Ð»Ð°Ð³Ð¾Ð¿ÑиÑÑнÑÑ Ð¿Ð¾ÑледÑÑвий, ÑÐ°ÐºÐ¸Ñ ÐºÐ°Ðº:
ÐеÑанкÑиониÑованнÑй доÑÑÑп к конÑиденÑиалÑной инÑоÑмаÑии.
УÑеÑка даннÑÑ .
ÐнеÑение опаÑнÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ в конÑигÑÑаÑÐ¸Ñ Ð¡Ð£ÐÐ.
Сбои в ÑабоÑе СУÐÐ.
РкаÑеÑÑве возможной меÑÑ Ð¿ÑоÑиводейÑÑÐ²Ð¸Ñ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ñм ÑгÑозам можно ÑаÑÑмоÑÑеÑÑ ÑеализаÑÐ¸Ñ Ð¿ÑинÑипа ÑазгÑаниÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»Ð½Ð¾Ð¼Ð¾Ñий Ñ ÑменÑÑением ÑиÑла опеÑаÑий, коÑоÑÑе ÑÑебÑÑÑ Ð¿ÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ñав ÑÑпеÑполÑзоваÑелÑ. ÐÑо Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾, ÑÑÐ¾Ð±Ñ Ð¸ÑклÑÑиÑÑ ÑиÑки, ÑвÑзаннÑе как Ñ Ð´Ð¾Ð²ÐµÑием к ÑÐ°Ð¼Ð¾Ð¼Ñ ÑÑпеÑполÑзоваÑелÑ, Ñак и на ÑлÑÑай доÑÑÑпа к его ÑÑÑÑной запиÑи злоÑмÑÑленника.
31.3.1. ÐбзоÑ
Postgres Professional ÑазÑабоÑала и Ñеализовала Ð¼Ð¾Ð´ÐµÐ»Ñ ÑÐ°Ð·Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¾Ð±ÑзанноÑÑей ÑÑпеÑполÑзоваÑÐµÐ»Ñ Ð¼ÐµÐ¶Ð´Ñ Ð´Ð²ÑÐ¼Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑми админиÑÑÑаÑивнÑми ÑолÑми â админиÑÑÑаÑоÑом СУÐРи админиÑÑÑаÑоÑом Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ (ÐдминиÑÑÑаÑÐ¾Ñ ÐÐ). ÐÑоме Ñого, Ð´Ð°Ð½Ð½Ð°Ñ Ð¼Ð¾Ð´ÐµÐ»Ñ ÑлÑÑÑÐ°ÐµÑ Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼Ñ Ð·Ð°ÑиÑÑ Ð¾Ñ ÑамоÑÑоÑÑелÑного повÑÑÐµÐ½Ð¸Ñ Ð¿Ñивилегий и аÑдиÑа дейÑÑвий вÑÐµÑ Ð¿Ð¾Ð»ÑзоваÑелей.
ÐдминиÑÑÑаÑÐ¾Ñ Ð¡Ð£ÐРоÑвеÑÐ°ÐµÑ Ð·Ð° ÑледÑÑÑие дейÑÑвиÑ:
УпÑавление ÑеÑвеÑом.
ÐаÑÑÑойка ÑепликаÑии даннÑÑ Ð¸ ÑезеÑвного копиÑованиÑ.
Создание баз даннÑÑ .
ÐаÑÑÑойка Ñоединений Ñ Ð±Ð°Ð·Ð¾Ð¹ даннÑÑ Postgres Pro.
ÐазнаÑение админиÑÑÑаÑоÑов ÐÐ.
ÐдминиÑÑÑаÑÐ¾Ñ ÐРоÑвеÑÐ°ÐµÑ Ð·Ð° ÑледÑÑÑие дейÑÑвиÑ:
РезеÑвное копиÑование оÑделÑной ÐÐ.
Создание ÑÐ°Ð±Ð»Ð¸Ñ Ð¸ дÑÑÐ³Ð¸Ñ Ð¾Ð±ÑекÑов в ÑÐ°Ð¼ÐºÐ°Ñ Ð¾ÑделÑной ÐÐ.
Создание полÑзоваÑелей ÐÐ.
ÐÑдаÑа полÑзоваÑелÑм пÑав доÑÑÑпа.
ÐоÑле делегиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð±Ð¾Ð»ÑÑинÑÑва ÑÑÑиннÑÑ
Ð·Ð°Ð´Ð°Ñ ÑÑпеÑполÑзоваÑÐµÐ»Ñ Ð½Ð¾Ð²Ñм конÑÑолиÑÑемÑм админиÑÑÑаÑоÑам оÑганизаÑÐ¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑказаÑÑÑÑ Ð¾Ñ Ð°ÐºÑивного иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑÑой Ñоли, неÑÑÑей болÑÑое колиÑеÑÑво ÑиÑков. ÐÐ»Ñ ÑÑого админиÑÑÑаÑоÑÑ Ð¸Ð½ÑÑаÑÑÑÑкÑÑÑÑ Ð´Ð¾ÑÑаÑоÑно внеÑÑи в Ñайл pg_hba.conf ÑÑÑоки, запÑеÑаÑÑие ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÑÑпеÑполÑзоваÑелÑ, а Ñакже заблокиÑоваÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑÑого Ñайла дÑÑгими админиÑÑÑаÑоÑами.
ÐÑли пÑивилегии ÑÑпеÑполÑзоваÑÐµÐ»Ñ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ вÑеменно веÑнÑÑÑ Ð´Ð»Ñ ÑеÑÐµÐ½Ð¸Ñ Ð½ÐµÐºÐ¾ÑоÑой Ñедкой Ñложной задаÑи, безопаÑно ÑÑо можно ÑделаÑÑ Ð² ÑÐµÑ Ð½Ð¾Ð»Ð¾Ð³Ð¸ÑеÑком Ñежиме (single mode) Ñ Ð¿ÑивлеÑением админиÑÑÑаÑоÑа инÑÑаÑÑÑÑкÑÑÑÑ. ÐÐ»Ñ Ð¿ÐµÑевода СУÐРв ÑÐµÑ Ð½Ð¾Ð»Ð¾Ð³Ð¸ÑеÑкий Ñежим ÐµÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ оÑÑановиÑÑ Ð¸ пеÑезапÑÑÑиÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹:
postgres --single -D DBMS_data_directory other_options DB_name
ÐбÑаÑиÑеÑÑ Ðº инÑÑÑÑкÑии по ÑÑÑановке дополниÑелÑно поÑÑавлÑемÑÑ Ð¼Ð¾Ð´Ñлей без ÑÑаÑÑÐ¸Ñ ÑÑпеÑполÑзоваÑÐµÐ»Ñ Ð² Разделе 16.2.
РаÑÑиÑение pg_proaudit, позволÑÑÑее ÑегиÑÑÑиÑоваÑÑ ÑазлиÑнÑе ÑобÑÑиÑ, ÑвÑзаннÑе Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑÑÑ, опиÑано в Разделе F.42.
31.3.2. Создание дополниÑелÑнÑÑ Ð°Ð´Ð¼Ð¸Ð½Ð¸ÑÑÑаÑоÑов
31.3.2.1. Создание Ñоли админиÑÑÑаÑоÑа СУÐÐ
ÐаннÑй Ñаздел опиÑÑÐ²Ð°ÐµÑ Ñоздание Ñоли и полÑзоваÑÐµÐ»Ñ PGPRO_DBMS_ADMIN Ñ ÑооÑвеÑÑÑвÑÑÑими пÑавами.
ÐаннÑй ÑкÑÐ¸Ð¿Ñ ÑоздаÑÑ ÑÐ¾Ð»Ñ PGPRO_DBMS_ADMIN и полÑзоваÑÐµÐ»Ñ Ñ ÑÑой ÑолÑÑ. Ðго запÑÑÐºÐ°ÐµÑ ÑÑпеÑполÑзоваÑÐµÐ»Ñ postgres. ÐбÑаÑиÑе внимание, ÑÑо ÑкÑÐ¸Ð¿Ñ Ð¸ÑполÑзÑÐµÑ ÑледÑÑÑие пÑедопÑеделÑннÑе Ñоли:
pg_create_tablespaceпозволÑÐµÑ Ð²ÑполнÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´ÑCREATE TABLESPACEбез пÑав ÑÑпеÑполÑзоваÑелÑ.pg_manage_profilesпозволÑÐµÑ Ð²ÑполнÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´ÑCREATE PROFILE,ALTER PROFILEиDROP PROFILEбез пÑав ÑÑпеÑполÑзоваÑелÑ.
$ psql postgres CREATE ROLE PGPRO_DBMS_ADMIN WITH CREATEDB CREATEROLE INHERIT LOGIN REPLICATION; REVOKE ALL ON DATABASE postgres FROM PUBLIC; GRANT CONNECT ON DATABASE postgres TO PGPRO_DBMS_ADMIN; CREATE USER dbms_admin WITH CREATEDB CREATEROLE INHERIT LOGIN REPLICATION; -- Ðе забÑдÑÑе ÑÑÑановиÑÑ Ð¿ÐµÑвиÑнÑй паÑÐ¾Ð»Ñ GRANT PGPRO_DBMS_ADMIN TO dbms_admin; GRANT pg_read_all_settings TO PGPRO_DBMS_ADMIN WITH ADMIN OPTION; GRANT pg_read_all_stats TO PGPRO_DBMS_ADMIN WITH ADMIN OPTION; GRANT pg_stat_scan_tables TO PGPRO_DBMS_ADMIN WITH ADMIN OPTION; GRANT pg_monitor TO PGPRO_DBMS_ADMIN WITH ADMIN OPTION; GRANT pg_signal_backend TO PGPRO_DBMS_ADMIN WITH ADMIN OPTION; GRANT pg_checkpoint TO PGPRO_DBMS_ADMIN WITH ADMIN OPTION; GRANT pg_create_tablespace TO PGPRO_DBMS_ADMIN WITH ADMIN OPTION; GRANT pg_manage_profiles TO PGPRO_DBMS_ADMIN WITH ADMIN OPTION; EXIT;
РазÑеÑение Ð´Ð»Ñ Ñоли PGPRO_DBMS_ADMIN дейÑÑвий по ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÑигÑÑаÑией, а Ñакже запиÑи в жÑÑнал и ÑезеÑвного копиÑованиÑ/воÑÑÑановление вÑдаÑÑÑÑ ÑледÑÑÑей командой Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ ÑÑпеÑполÑзоваÑÐµÐ»Ñ postgres.
$ psql postgres GRANT EXECUTE ON FUNCTION pg_reload_conf TO PGPRO_DBMS_ADMIN; GRANT EXECUTE ON FUNCTION pg_rotate_logfile TO PGPRO_DBMS_ADMIN; GRANT EXECUTE ON FUNCTION pg_create_restore_point TO PGPRO_DBMS_ADMIN; GRANT EXECUTE ON FUNCTION pg_backup_start TO PGPRO_DBMS_ADMIN; GRANT EXECUTE ON FUNCTION pg_backup_stop TO PGPRO_DBMS_ADMIN; GRANT EXECUTE ON FUNCTION pg_switch_wal TO PGPRO_DBMS_ADMIN; GRANT EXECUTE ON FUNCTION pg_promote TO PGPRO_DBMS_ADMIN; GRANT EXECUTE ON FUNCTION pg_wal_replay_pause TO PGPRO_DBMS_ADMIN; GRANT EXECUTE ON FUNCTION pg_wal_replay_resume TO PGPRO_DBMS_ADMIN; EXIT;
31.3.2.2. Создание Ñоли админиÑÑÑаÑоÑа ÐÐ
Ð ÑамкаÑ
одной Ñоли PGPRO_DB_DBNAME_ADMIN Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð¹ ÐÐ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½ÐµÑколÑко полÑзоваÑелей. Также допÑÑкаеÑÑÑ, ÑÑÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð½ полÑзоваÑÐµÐ»Ñ Ð²ÐºÐ»ÑÑалÑÑ Ð² неÑколÑко ÑазнÑÑ
Ñолей PGPRO_DB_DBNAME_ADMIN, еÑли по должноÑÑнÑм инÑÑÑÑкÑиÑм он Ð¸Ð¼ÐµÐµÑ Ð¿Ñаво админиÑÑÑиÑоваÑÑ Ð½ÐµÑколÑко ÑазнÑÑ
ÐÐ.
ÐаннÑй Ñаздел опиÑÑÐ²Ð°ÐµÑ Ñоздание Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
на пÑимеÑе ÐРпод названием DB1, Ñоли админиÑÑÑаÑоÑа ÐÐ Ð´Ð»Ñ Ð½ÐµÑ Ð¸ полÑзоваÑÐµÐ»Ñ DB1_ADMIN, наделÑнного ÑооÑвеÑÑÑвÑÑÑими пÑавами. Ðа ÑÑом ÑÑапе Ð´Ð»Ñ Ð²ÑеÑ
ÑÑиÑ
дейÑÑвий доÑÑаÑоÑно пÑав Ñанее Ñозданного полÑзоваÑÐµÐ»Ñ Ñ ÑолÑÑ PGPRO_DBMS_ADMIN.
ÐаннÑй ÑкÑÐ¸Ð¿Ñ ÑоздаÑÑ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
DB1, ÑÐ¾Ð»Ñ PGPRO_DB_1_ADMIN и полÑзоваÑÐµÐ»Ñ Ñ ÑÑой ÑолÑÑ. Ðго запÑÑÐºÐ°ÐµÑ Ð°Ð´Ð¼Ð¸Ð½Ð¸ÑÑÑаÑÐ¾Ñ Ð¡Ð£ÐÐ:
$ psql postgres -U dbms_admin SET ROLE PGPRO_DBMS_ADMIN; CREATE ROLE PGPRO_DB_1_ADMIN WITH CREATEROLE INHERIT; CREATE USER db1_admin WITH CREATEROLE INHERIT; -- Ðе забÑдÑÑе ÑÑÑановиÑÑ Ð¿ÐµÑвиÑнÑй паÑÐ¾Ð»Ñ GRANT PGPRO_DB_1_ADMIN TO db1_admin; GRANT PGPRO_DB_1_ADMIN TO PGPRO_DBMS_ADMIN; GRANT pg_read_all_settings TO PGPRO_DB_1_ADMIN; GRANT pg_read_all_stats TO PGPRO_DB_1_ADMIN; GRANT pg_stat_scan_tables TO PGPRO_DB_1_ADMIN; GRANT pg_monitor TO PGPRO_DB_1_ADMIN; CREATE DATABASE db1 OWNER PGPRO_DB_1_ADMIN; REVOKE CONNECT, TEMPORARY ON DATABASE db1 FROM PUBLIC;
31.3.3. ÐакÑÑÑие доÑÑÑпа Ð´Ð»Ñ ÑÑпеÑполÑзоваÑелÑ
ЧÑÐ¾Ð±Ñ Ð·Ð°Ð¿ÑеÑиÑÑ Ñоединение Ð´Ð»Ñ ÑÑпеÑполÑзоваÑелÑ, админиÑÑÑаÑÐ¾Ñ Ð¸Ð½ÑÑаÑÑÑÑкÑÑÑÑ Ð²Ð½Ð¾ÑÐ¸Ñ Ð² pg_hba.conf ÑледÑÑÑие ÑÑÑоки:
TYPE DATABASE USER ADDRESS METHOD local all postgres reject host all postgres 127.0.0.1/32 reject host all postgres ::1/128 reject
ÐдминиÑÑÑаÑÐ¾Ñ Ð¸Ð½ÑÑаÑÑÑÑкÑÑÑÑ root запÑеÑÐ°ÐµÑ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ postgres изменÑÑÑ Ñайл pg_hba.conf:
# chown root pg_hba.conf # chmod 640 pg_hba.conf
Ð ÑезÑлÑÑаÑе полÑзоваÑÐµÐ»Ñ postgres не Ð¼Ð¾Ð¶ÐµÑ ÑамоÑÑоÑÑелÑно веÑнÑÑÑ Ñебе возможноÑÑÑ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ Ð¡Ð£ÐÐ:
# ls -lh pg_hba.conf -rw-r----- 1 root postgres .......... pg_hba.conf
ЧÑÐ¾Ð±Ñ Ð½Ð¾Ð²Ñе огÑаниÑÐµÐ½Ð¸Ñ Ð²ÑÑÑпили в ÑилÑ, ÑÑебÑеÑÑÑ Ð¿ÐµÑезапÑÑк ÑеÑвеÑа СУÐÐ:
# pg_ctl restart