Re: Proposal of SE-PostgreSQL patches [try#2] - Mailing list pgsql-hackers

From KaiGai Kohei
Subject Re: Proposal of SE-PostgreSQL patches [try#2]
Date
Msg-id 48773188.6000809@ak.jp.nec.com
Whole thread Raw
In response to Re: Proposal of SE-PostgreSQL patches [try#2]  (KaiGai Kohei <kaigai@ak.jp.nec.com>)
Responses Re: Proposal of SE-PostgreSQL patches [try#2]  (Abhijit Menon-Sen <ams@oryx.com>)
Re: Proposal of SE-PostgreSQL patches [try#2]  (KaiGai Kohei <kaigai@ak.jp.nec.com>)
List pgsql-hackers
Hi,

I updated the series of patches, as follows:

[1/4] Core facilities of PGACE/SE-PostgreSQL
http://sepgsql.googlecode.com/files/sepostgresql-sepgsql-8.4devel-3-r953.patch

[2/4] "--security-context" option of pg_dump/pg_dumpall
http://sepgsql.googlecode.com/files/sepostgresql-pg_dump-8.4devel-3-r953.patch

[3/4] Default security policy for SE-PostgreSQL
http://sepgsql.googlecode.com/files/sepostgresql-policy-8.4devel-3-r953.patch

[4/4] Documentation updates    http://sepgsql.googlecode.com/files/sepostgresql-docs-8.4devel-3-r953.patch

List of updates:
* "--enable-selinux" option of pg_dump/pg_dumpall are replaced  by "--security-context" option.
* A new GUC parameter of "pgace_security_feature" is added to show  what feature is worked on PGACE security
framework.
* pg_ace_dumpXXXX() hooks are added to src/bin/pg_dump/pg_ace_dump.h  to abstract security attribute dumping effort.
* An extended syntax of CONTEXT = '...' is replaced by  SECURITY_CONTEXT = '...'.
* The sources of security policy module are moved from contrib/ to  src/backend/security/sepgsql/policy.
* The prefix of interfaces in the default security policy are changed  to sepgsql_*() from sepostgresql_*()
* Using integer value as a condition is replaced as follows:    if (!strcmp(..)) -> if (strcmp(...) == 0)
* Two potential bug fixes:   1. Unconditional Assert() in sepgsql_avc_reclaim().   2. relkind checks are lacked in
sepgsqlSetDefaultContext().

The patch of core facilities is unchanged expect for the new GUC parameters
and above two minor bug fixes.

And I have a question. Is it legal to use a pointer value as a condition,
like `while (!pointer) ...' ?

Thanks for youe reviewing.


KaiGai Kohei wrote:
> Thanks for your reviewing.
> 
> Peter Eisentraut wrote:
>> Am Donnerstag, 26. Juni 2008 schrieb KaiGai Kohei:
>>> The following patch set (r926) are updated one toward the latest CVS 
>>> head,
>>> and contains some fixes in security policy and documentation.
>>
>> OK, I have quickly read through these patches.  They look very nice, 
>> so I am optimistic we can get through this.
>>
>> First of all, now would be a good time if someone out there really 
>> wants to object to this feature in general.  It will probably always 
>> be a niche feature.  But all the code is hidden behind ifdefs or other 
>> constructs that a compiler can easily hide away (or we can make it so, 
>> at least).
>>
>> Here is a presentation from PGCon on SE-PostgreSQL: 
>> http://www.pgcon.org/2008/schedule/events/77.en.html
>>
>> Are there any comments yet from the (Trusted)Solaris people that 
>> wanted to evaluate this approach for compatibility with their approach?
> 
> In this April, I had a face-to-face meeting with Trusted Solaris people
> to discuss SE-PostgreSQL and PGACE framework, and concluded that PGACE
> framework provides enough facilities for both operating systems.
> 
> I modified several hooks from CommitFest:May, however, its fundamental
> structures are unchanged.
> 
>> In general, are we OK with the syntax CONTEXT = '...'?  I would rather 
>> see something like SECURITY CONTEXT '...'.  There are a lot of 
>> contexts, after all.
> 
> If we change it, I prefer SECURITY_CONTEXT = '...' style, because it 
> enables
> to represent the left hand with a single token and make PGACE hooks 
> simpler.
> I also agree the CONTEXT has widespread meanings and to be changed here.
> 
>> This will also add a system column called security_context.  I think 
>> that is OK.
> 
> Thanks,
> 
>> In the pg_dump patch:
>>
>> spelling mistake "tuen on/off"
> 
> I'll fix it soon.
> 
> 
>> Evil coding style: if (strcmp(SELINUX_SYSATTR_NAME, 
>> security_sysattr_name)) -- compare the result with 0 please.
> 
> OK, I'll fix it and check my implementations in other place.
> 
> 
>> The above code appears to assume that security_sysattr_name never 
>> changes, but
>> then why do we need a GUC parameter to show it?
> 
> The purpose of the GUC parameter is to identify the kind of security 
> feature
> if enabled. It can be changed by other security features, and it will 
> show us
> different value.
> 
> 
>> Might want to change the option name --enable-selinux to something 
>> like --security-context.
>>
>> In general, we might want to not name things selinux_* but instead
>> sepostgresql_* or security_* or security_context_*.  Or maybe PGACE?
> 
> The pgace_* scheme is an attractive idea, although the server process
> has to provide a bit more hints (like the name of security system column
> and the kind of objects exported with security attribute) pg_dump to
> support various kind of security features with smallest implementation.
> 
> If not so, I prefer the combination of --security-context and 
> sepostgresql_*.
> 
> 
>> On the default policy:
>>
>> Should this really be a contrib module?  Considering that it would be 
>> a core
>> feature that is not really usable without a policy.
> 
> It is correct, SE-PostgreSQL feature always need its security policy.
> Do you think "src/backend/security/sepgsql/policy" is better?
> 
> 
>  > Please change all the sepgsql_* things to sepostgresql_*, considering 
> that you
>  > are using both already, so we shouldn't have both forms of names.
> 
> We can convert them from sepostgresql_* to sepgsql_* easily, because the 
> longer
> forms are not used as a part of identifier in security context.
> But we have a possible matter in changing from sepgsql_* to sepostgresql_*.
> 
> Here is a news from SELinux community:
>   http://marc.info/?l=selinux&m=121501336024075&w=2
> 
> It shows most part of the SE-PostgreSQL policy module got merged into
> the upstreamed at selinux-policy-3.4.2 or later. It contains identifier
> with sepgsql_* stuff, so it has a possible matter when users upgrade
> his security policy.
> 
> If their database is labeled as sepostgresql_*, it will lose rules
> defined in the policy when users upgrade selinux-policy package to
> the latest one.
> 
> 
>> Documentation:
>>
>> Looks good for a start, but we will probably want to write more later.
> 
> Do you think what kind of information should be added?
> I intentionally omitted descriptions about SELinux itself,
> because it is a documentation of PostgreSQL, not OS.
> 
> Thanks,


-- 
OSS Platform Development Division, NEC
KaiGai Kohei <kaigai@ak.jp.nec.com>


pgsql-hackers by date:

Previous
From: Abhijit Menon-Sen
Date:
Subject: Re: posix advises ...
Next
From: Gregory Stark
Date:
Subject: Should SPI_gettypeid be extended to support returning the typmod?