From: Andy Warner <warner@rubix.com>
To: KaiGai Kohei <kaigai@kaigai.gr.jp>
Cc: KaiGai Kohei <kaigai@ak.jp.nec.com>,
cpebenito@tresys.com, selinux <selinux@tycho.nsa.gov>,
refpolicy@oss.tresys.com
Subject: Re: [PATCH] Policy rework for SE-PostgreSQL (Re: Some ideas in SE-PostgreSQL enhancement)
Date: Fri, 27 Mar 2009 12:45:22 +0100 [thread overview]
Message-ID: <49CCBC52.7000503@rubix.com> (raw)
In-Reply-To: <49CCB678.4090209@kaigai.gr.jp>
[-- Attachment #1: Type: text/plain, Size: 8457 bytes --]
KaiGai Kohei wrote:
> Andy Warner wrote:
>
>> KaiGai Kohei wrote:
>>
>>> The attached patch is the first one in the series of reworks for
>>> the SE-PostgreSQL security policy.
>>>
>>> It updates the following items.
>>>
>>> * Changes in the definition of object classes
>>>
>>> This patch add new three object classes and modifies the definition
>>> of a few object classes.
>>> - db_database:{get_param set_param} is removed due to nonsense.
>>> - db_database:{superuser} is added to restrict privileges of
>>> database superuser.
>>> - db_table/db_column/db_tuple:{use} is removed due to nonsense.
>>> - New object classes: db_catalog, db_schema and db_sequence are added.
>>>
I guess I should have asked before, is there is any proposed permission
set for the three new object classes mentioned above?
>>>
>>>
>> In the RUBIX policy I used the db_table use permission (could be called
>> open) to have a simple way to control access to the table as a whole,
>> much like a file open permission. While not absolutely necessary, I
>> think it is valuable. The other uses of the use permission I did not
>> use. Also, see my related comment below on the catalog/schema object
>> permissions.
>>
>
> It is incorrect use of use permission.
> The use permission was used when we refer the table, but its contents
> were not read directly, like:
>
> SELECT count(*) FROM t WHERE x > 0;
>
> This query refers the table t and column t.x, but its contents are
> consumed by backend internally. But it was pointed out such kind of
> discrimination is nonsense in pgsql-hackers.
>
> If you need something like "open" permission on the db_table class,
> what you should do is submitting a proposition for a new permission.
> It is not a right way to apply existing one for another purpose.
>
> If SE-PostgreSQL does not care about, it simply ignore the permission
> like as db_catalog class.
>
I understand now and then the intent of the use permission. If I need
functionality from the database object classes that is not provided,
then I have little option other than use something in a way that is not
"correct". Such as my use of the dir object class to account for not
having object classes for schemata and catalog. And, from a user's point
of view, a permission called "use" works well with being to (or not) use
a table. So, I think it was quite reasonable to use it for my purposes.
I'm not sure what the official means of proposing a new permission is,
but I thought this thread was a discussion of any changes that may need
to made to the database policy, and since you are removing the use
permission, I thought it relevant. Call the permission "use" or call if
"open", the intent of my comment was to suggest that policy support for
the semantics of how I used the use permission would be good.
>
>>> In the previous design, we have the following object hierarchy:
>>> [db_database]
>>> + [db_table]
>>> | + [db_column]
>>> | + [db_tuple]
>>> + [db_procedure]
>>> + [db_blob]
>>>
>>> The newly added db_schema should be placed between the db_database and
>>> the db_table and others. TYPE_TRANSITION rules follows the revised design.
>>>
>>> [db_database]
>>> + [db_schema]
>>> | + [db_table]
>>> | | + [db_column]
>>> | | + [db_tuple]
>>> | + [db_procedure]
>>> | + [db_sequence] (newly added object class)
>>> + [db_blob]
>>>
>>> (*) Unfortunatelly, PostgreSQL handles large object quite ad-hoc,
>>> although it can be used to communicate channel between multiple
>>> domains. So, it needs to be placed under the database.
>>>
>>> Currently, SE-PostgreSQL does not use db_catalog class, but it can be
>>> used for other DBMS's.
>>>
>>> In addition, this patch changes something.
>>>
>>> o The trusted procedure (sepgsql_trusted_proc_t) lost the
>>> db_database:{superuser} privilege, because it is invoked by
>>> unprived users to over the MAC restriction for a certain
>>> purpose, but it does not need to allow superpower in DAC.
>>>
>>>
>> Is it intended that the superuser privilege give only DAC override or
>> both MAC and DAC? Specifically, is it intended to override MLS or Type
>> enforcement?
>>
>
> If the client does not have db_database:{superuser} privilege,
> he cannot perform as database superuser, even if the DAC policy
> allows. Please note that MAC stuff does not have a concept of
> superuser. All the player need to be checked by the reference
> monitor and its security policy.
>
>
>>> o The trusted procedure (sepgsql_trusted_proc_exec_t) lost the
>>> db_procedure:{install} privilege, because once installed procedure
>>> as a system internal entity can be invoked implicitly.
>>> We should not install trusted procedures for the purpose.
>>>
>>> o The db_schema:{add_object remove_object} newly added are controled
>>> via the "sepgsql_enable_users_ddl" boolean.
>>> Now we control user's DDLs on uncategorized objects as row-level
>>> checks on sepgsql_sysobj_t, but it can be revised with adding
>>> db_schema object class.
>>>
>>>
>> I think this also needs the equivalent of a "search" permission (or
>> open, or use). This gives a nice way to control some access to an entire
>> schema. That is, we want to use the schema (and catalog) as a mechanism
>> to cut off users from entire subtrees. This helps to ensure that a user
>> does not gain access to a newly created subordinate object. So, if a
>> user does not have search for a schema (or catalog), there is no way
>> they can access any present or future object in that schema (or
>> catalog). Analogous to a directory. Without this search control I would
>> continue to use the dir object class.
>>
>
> This boolean controls the capability of DDL statement from unpriv
> users. They should access existing objects via DML, even if they
> cannot modify the definition of tables and so on.
> I don't think your suggestion is correct one.
>
I think you misunderstood me. I was not commenting on the boolean at
all. I was commenting on the reference to "db_schema:{add_object
remove_object}" thinking (assuming) that add_object and remove_object
were the only two permission given to the db_schema object class. Is
this the intent? I did not see anywhere in the email that defined the
set of permissions the db_schema (or db_catalog) would have.
>
>>> o type_transition for user_sepgsql_XXXX_t is moved to outside of
>>> tunable_policy(`...'). IIRC, I said these should be inside of
>>> the tunable, but unprive ones cannot create/drop tables labeled
>>> as sepgsql_XXX_t anyway when the boolean is disabled.
>>> So, I reconsidered it should be placed out of the tunable.
>>>
>>> o {create drop setattr} permission for user_sepgsql_XXX is moved
>>> to inside of the tunable_policy, even if it is db_procedure
>>> class. I wonder why we didn't control CREATE FUNCTION statement
>>> by unpriv domains.
>>>
>>> o db_blob:{import export} on user_sepgsql_blob_t is allowed to
>>> unpriv domains. It seems to me a strange behavior that it is
>>> not allowed on the object created by unpriv domain itself.
>>>
>>> * Remaining items
>>> o When we allows an unpriv domain to access SE-PostgreSQL using
>>> postgresql_unpriv_client(), its default labeling behavior is
>>> same as unconfined domains. For example, functions created by
>>> them are labeled as "sepgsql_proc_t".
>>> Now I'm considering it should be user_sepgsql_XXXX_t, because
>>> I would like to handle unprefixed types as an object created
>>> by database administrator (unconfined domains).
>>> It helps correctness of db_procedure:{install} permission.
>>>
>>> o Because of db_schema object class, we can control user's DDLs
>>> without ad-hoc using row-level security on sepgsql_sysobj_t
>>> class. Now I think its purpose should be changed to prevent
>>> users accesses system catalogs directly.
>>>
>>>
>> Are you implying here the need for something like a search or open
>> permissions as I suggested above? If so, please disregard my previous
>> comment:-)
>>
>>> Thanks,
>>>
>>>
>> --
>> This message was distributed to subscribers of the selinux mailing list.
>> If you no longer wish to subscribe, send mail to majordomo@tycho.nsa.gov with
>> the words "unsubscribe selinux" without quotes as the message.
>>
>>
>
>
>
[-- Attachment #2: Type: text/html, Size: 9520 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: warner@rubix.com (Andy Warner)
To: refpolicy@oss.tresys.com
Subject: [refpolicy] [PATCH] Policy rework for SE-PostgreSQL (Re: Some ideas in SE-PostgreSQL enhancement)
Date: Fri, 27 Mar 2009 12:45:22 +0100 [thread overview]
Message-ID: <49CCBC52.7000503@rubix.com> (raw)
In-Reply-To: <49CCB678.4090209@kaigai.gr.jp>
KaiGai Kohei wrote:
> Andy Warner wrote:
>
>> KaiGai Kohei wrote:
>>
>>> The attached patch is the first one in the series of reworks for
>>> the SE-PostgreSQL security policy.
>>>
>>> It updates the following items.
>>>
>>> * Changes in the definition of object classes
>>>
>>> This patch add new three object classes and modifies the definition
>>> of a few object classes.
>>> - db_database:{get_param set_param} is removed due to nonsense.
>>> - db_database:{superuser} is added to restrict privileges of
>>> database superuser.
>>> - db_table/db_column/db_tuple:{use} is removed due to nonsense.
>>> - New object classes: db_catalog, db_schema and db_sequence are added.
>>>
I guess I should have asked before, is there is any proposed permission
set for the three new object classes mentioned above?
>>>
>>>
>> In the RUBIX policy I used the db_table use permission (could be called
>> open) to have a simple way to control access to the table as a whole,
>> much like a file open permission. While not absolutely necessary, I
>> think it is valuable. The other uses of the use permission I did not
>> use. Also, see my related comment below on the catalog/schema object
>> permissions.
>>
>
> It is incorrect use of use permission.
> The use permission was used when we refer the table, but its contents
> were not read directly, like:
>
> SELECT count(*) FROM t WHERE x > 0;
>
> This query refers the table t and column t.x, but its contents are
> consumed by backend internally. But it was pointed out such kind of
> discrimination is nonsense in pgsql-hackers.
>
> If you need something like "open" permission on the db_table class,
> what you should do is submitting a proposition for a new permission.
> It is not a right way to apply existing one for another purpose.
>
> If SE-PostgreSQL does not care about, it simply ignore the permission
> like as db_catalog class.
>
I understand now and then the intent of the use permission. If I need
functionality from the database object classes that is not provided,
then I have little option other than use something in a way that is not
"correct". Such as my use of the dir object class to account for not
having object classes for schemata and catalog. And, from a user's point
of view, a permission called "use" works well with being to (or not) use
a table. So, I think it was quite reasonable to use it for my purposes.
I'm not sure what the official means of proposing a new permission is,
but I thought this thread was a discussion of any changes that may need
to made to the database policy, and since you are removing the use
permission, I thought it relevant. Call the permission "use" or call if
"open", the intent of my comment was to suggest that policy support for
the semantics of how I used the use permission would be good.
>
>>> In the previous design, we have the following object hierarchy:
>>> [db_database]
>>> + [db_table]
>>> | + [db_column]
>>> | + [db_tuple]
>>> + [db_procedure]
>>> + [db_blob]
>>>
>>> The newly added db_schema should be placed between the db_database and
>>> the db_table and others. TYPE_TRANSITION rules follows the revised design.
>>>
>>> [db_database]
>>> + [db_schema]
>>> | + [db_table]
>>> | | + [db_column]
>>> | | + [db_tuple]
>>> | + [db_procedure]
>>> | + [db_sequence] (newly added object class)
>>> + [db_blob]
>>>
>>> (*) Unfortunatelly, PostgreSQL handles large object quite ad-hoc,
>>> although it can be used to communicate channel between multiple
>>> domains. So, it needs to be placed under the database.
>>>
>>> Currently, SE-PostgreSQL does not use db_catalog class, but it can be
>>> used for other DBMS's.
>>>
>>> In addition, this patch changes something.
>>>
>>> o The trusted procedure (sepgsql_trusted_proc_t) lost the
>>> db_database:{superuser} privilege, because it is invoked by
>>> unprived users to over the MAC restriction for a certain
>>> purpose, but it does not need to allow superpower in DAC.
>>>
>>>
>> Is it intended that the superuser privilege give only DAC override or
>> both MAC and DAC? Specifically, is it intended to override MLS or Type
>> enforcement?
>>
>
> If the client does not have db_database:{superuser} privilege,
> he cannot perform as database superuser, even if the DAC policy
> allows. Please note that MAC stuff does not have a concept of
> superuser. All the player need to be checked by the reference
> monitor and its security policy.
>
>
>>> o The trusted procedure (sepgsql_trusted_proc_exec_t) lost the
>>> db_procedure:{install} privilege, because once installed procedure
>>> as a system internal entity can be invoked implicitly.
>>> We should not install trusted procedures for the purpose.
>>>
>>> o The db_schema:{add_object remove_object} newly added are controled
>>> via the "sepgsql_enable_users_ddl" boolean.
>>> Now we control user's DDLs on uncategorized objects as row-level
>>> checks on sepgsql_sysobj_t, but it can be revised with adding
>>> db_schema object class.
>>>
>>>
>> I think this also needs the equivalent of a "search" permission (or
>> open, or use). This gives a nice way to control some access to an entire
>> schema. That is, we want to use the schema (and catalog) as a mechanism
>> to cut off users from entire subtrees. This helps to ensure that a user
>> does not gain access to a newly created subordinate object. So, if a
>> user does not have search for a schema (or catalog), there is no way
>> they can access any present or future object in that schema (or
>> catalog). Analogous to a directory. Without this search control I would
>> continue to use the dir object class.
>>
>
> This boolean controls the capability of DDL statement from unpriv
> users. They should access existing objects via DML, even if they
> cannot modify the definition of tables and so on.
> I don't think your suggestion is correct one.
>
I think you misunderstood me. I was not commenting on the boolean at
all. I was commenting on the reference to "db_schema:{add_object
remove_object}" thinking (assuming) that add_object and remove_object
were the only two permission given to the db_schema object class. Is
this the intent? I did not see anywhere in the email that defined the
set of permissions the db_schema (or db_catalog) would have.
>
>>> o type_transition for user_sepgsql_XXXX_t is moved to outside of
>>> tunable_policy(`...'). IIRC, I said these should be inside of
>>> the tunable, but unprive ones cannot create/drop tables labeled
>>> as sepgsql_XXX_t anyway when the boolean is disabled.
>>> So, I reconsidered it should be placed out of the tunable.
>>>
>>> o {create drop setattr} permission for user_sepgsql_XXX is moved
>>> to inside of the tunable_policy, even if it is db_procedure
>>> class. I wonder why we didn't control CREATE FUNCTION statement
>>> by unpriv domains.
>>>
>>> o db_blob:{import export} on user_sepgsql_blob_t is allowed to
>>> unpriv domains. It seems to me a strange behavior that it is
>>> not allowed on the object created by unpriv domain itself.
>>>
>>> * Remaining items
>>> o When we allows an unpriv domain to access SE-PostgreSQL using
>>> postgresql_unpriv_client(), its default labeling behavior is
>>> same as unconfined domains. For example, functions created by
>>> them are labeled as "sepgsql_proc_t".
>>> Now I'm considering it should be user_sepgsql_XXXX_t, because
>>> I would like to handle unprefixed types as an object created
>>> by database administrator (unconfined domains).
>>> It helps correctness of db_procedure:{install} permission.
>>>
>>> o Because of db_schema object class, we can control user's DDLs
>>> without ad-hoc using row-level security on sepgsql_sysobj_t
>>> class. Now I think its purpose should be changed to prevent
>>> users accesses system catalogs directly.
>>>
>>>
>> Are you implying here the need for something like a search or open
>> permissions as I suggested above? If so, please disregard my previous
>> comment:-)
>>
>>> Thanks,
>>>
>>>
>> --
>> This message was distributed to subscribers of the selinux mailing list.
>> If you no longer wish to subscribe, send mail to majordomo at tycho.nsa.gov with
>> the words "unsubscribe selinux" without quotes as the message.
>>
>>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://oss.tresys.com/pipermail/refpolicy/attachments/20090327/823bbafa/attachment.html
next prev parent reply other threads:[~2009-03-27 11:46 UTC|newest]
Thread overview: 75+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-03-23 10:37 The status of SE-PostgreSQL KaiGai Kohei
2009-03-23 10:37 ` [refpolicy] " KaiGai Kohei
2009-03-23 14:56 ` Shaz
2009-03-23 14:57 ` Shaz
2009-03-23 15:19 ` Andy Warner
2009-03-24 2:14 ` KaiGai Kohei
2009-03-24 2:14 ` [refpolicy] " KaiGai Kohei
2009-03-25 6:54 ` Some ideas in SE-PostgreSQL enhancement (Re: The status of SE-PostgreSQL) KaiGai Kohei
2009-03-25 6:54 ` [refpolicy] " KaiGai Kohei
2009-03-25 7:45 ` Andy Warner
2009-03-25 8:20 ` KaiGai Kohei
2009-03-25 8:59 ` Andy Warner
2009-03-25 12:00 ` KaiGai Kohei
2009-03-25 17:02 ` Andy Warner
2009-03-26 0:13 ` KaiGai Kohei
2009-03-25 17:43 ` Joshua Brindle
2009-03-25 19:42 ` Andy Warner
2009-03-27 15:43 ` Joshua Brindle
2009-03-27 16:25 ` Andy Warner
2009-03-27 17:15 ` Joshua Brindle
2009-03-27 17:54 ` Andy Warner
2009-03-27 18:12 ` Joshua Brindle
2009-03-27 18:48 ` Andy Warner
2009-03-27 19:53 ` Joshua Brindle
2009-03-27 20:04 ` Andy Warner
2009-03-27 23:59 ` KaiGai Kohei
2009-03-28 7:17 ` Andy Warner
2009-03-30 0:56 ` KaiGai Kohei
2009-03-30 8:21 ` KaiGai Kohei
2009-03-30 9:58 ` Andy Warner
2009-03-30 13:22 ` KaiGai Kohei
2009-04-22 0:08 ` Eamon Walsh
2009-04-22 3:59 ` KaiGai Kohei
2009-05-01 4:54 ` Eamon Walsh
2009-05-07 1:34 ` KaiGai Kohei
2009-05-07 7:24 ` KaiGai Kohei
2009-03-30 9:49 ` Andy Warner
2009-03-26 5:50 ` [PATCH] Expose avc_netlink_loop() for applications (Re: Some ideas in SE-PostgreSQL enhancement) KaiGai Kohei
2009-03-26 23:28 ` Eamon Walsh
2009-03-26 23:41 ` Eamon Walsh
2009-03-27 0:35 ` KaiGai Kohei
2009-03-28 0:54 ` Eamon Walsh
2009-03-28 2:00 ` KaiGai Kohei
2009-03-30 4:56 ` KaiGai Kohei
2009-03-26 6:11 ` [PATCH] database audit integration " KaiGai Kohei
2009-03-26 6:11 ` KaiGai Kohei
2009-03-26 21:45 ` John Dennis
[not found] ` <49CB313B.7020507@redhat.com>
2009-03-27 2:34 ` KaiGai Kohei
2009-03-27 2:34 ` KaiGai Kohei
2009-03-26 8:29 ` [PATCH] Permissive domain in userspace " KaiGai Kohei
2009-03-28 2:41 ` Eamon Walsh
2009-03-30 2:55 ` KaiGai Kohei
2009-03-31 1:45 ` KaiGai Kohei
2009-03-31 16:46 ` Stephen Smalley
2009-04-01 1:07 ` [PATCH] Permissive domain in userspace object manager KaiGai Kohei
2009-04-01 1:41 ` KaiGai Kohei
2009-04-01 12:34 ` Stephen Smalley
2009-04-01 20:07 ` Eric Paris
2009-04-01 22:53 ` James Morris
2009-03-27 8:18 ` [PATCH] Policy rework for SE-PostgreSQL (Re: Some ideas in SE-PostgreSQL enhancement) KaiGai Kohei
2009-03-27 8:18 ` [refpolicy] " KaiGai Kohei
2009-03-27 9:44 ` Andy Warner
2009-03-27 11:20 ` KaiGai Kohei
2009-03-27 11:20 ` [refpolicy] " KaiGai Kohei
2009-03-27 11:45 ` Andy Warner [this message]
2009-03-27 11:45 ` Andy Warner
2009-03-27 12:17 ` KaiGai Kohei
2009-03-27 12:17 ` [refpolicy] " KaiGai Kohei
2009-04-01 7:26 ` Correct manner to handler undefined classes/permissions? " KaiGai Kohei
2009-04-01 12:45 ` Stephen Smalley
2009-04-02 0:28 ` KaiGai Kohei
2009-03-23 15:25 ` The status of SE-PostgreSQL Stephen Smalley
2009-03-23 15:25 ` [refpolicy] " Stephen Smalley
2009-03-24 1:13 ` KaiGai Kohei
2009-03-24 1:13 ` [refpolicy] " KaiGai Kohei
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=49CCBC52.7000503@rubix.com \
--to=warner@rubix.com \
--cc=cpebenito@tresys.com \
--cc=kaigai@ak.jp.nec.com \
--cc=kaigai@kaigai.gr.jp \
--cc=refpolicy@oss.tresys.com \
--cc=selinux@tycho.nsa.gov \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.