Re: policy for PowerDNS

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 12/05/2012 12:51 PM, Daniel J Walsh wrote:
> On 12/04/2012 04:11 PM, Sven Vermeulen wrote:
>> On Dec 4, 2012 3:16 PM, "Daniel J Walsh" <dwalsh@xxxxxxxxxx 
>> <mailto:dwalsh@xxxxxxxxxx>> wrote:
> 
>>> I don't see why rading usr_files or executing a bin_t file requires a
>>> boolean, I would just add the access.
> 
>> If named by default doesn't require this access, doesn't it make sense to
>> keep it restricted? Remote code execution vulnerabilities might be
>> mitigated if the policy prohibits execution of common binaries
> 
>> Reading /usr however seems less problematic (I'm even surprised it doesn't 
>> require this already).
> 
>> Wkr, Sven
> 
> Perhaps but if you have enough control over a process to execute random
> binaries, one would guess you have enough control to call other syscalls
> implemented in those binaries.
> 
> 
>> On Tue, Dec 4, 2012 at 3:14 PM, Daniel J Walsh <dwalsh@xxxxxxxxxx 
>> <mailto:dwalsh@xxxxxxxxxx>> wrote:
> 
>> On 12/04/2012 06:37 AM, Sander Hoentjen wrote:
>>> On 12/03/2012 04:08 PM, grift wrote:
>>>> On Mon, 2012-12-03 at 15:22 +0100, Sander Hoentjen wrote:
>>>>> Hi all,
>>>>>
>>>>> I had created a policy for PowerDNS (pdns package in Fedora), but 
>>>>> after e-mailing with dwalsh he told me it might be better to just
>>>>> adapt the named policy a bit. Here is what I have so far: 
>>>>> ======pdns.fc====== /usr/sbin/pdns_server  -- 
>>>>> gen_context(system_u:object_r:named_exec_t,s0) /etc/pdns/pdns.conf --
>>>>> gen_context(system_u:object_r:named_conf_t,s0) 
>>>>> /var/run/pdns.controlsocket -s 
>>>>> gen_context(system_u:object_r:named_var_run_t,s0) /var/run/pdns.pid 
>>>>> -- gen_context(system_u:object_r:named_var_run_t,s0) 
>>>>> =================== ======pdns.te====== policy_module(pdns,0.0.1)
>>>>>
>>>>> require{ type named_t; }
>>>>>
>>>>> #gmysql backend: bool pdns_can_connect_db true; 
>>>>> tunable_policy(`pdns_backend_mysql', ` mysql_read_config(named_t) 
>>>>> #socket mysql_stream_connect(named_t) ') =================== With
>>>>> this added pdns works with both the bind-backend and the
>>>>> mysql-backend (pdns-backend-mysql in Fedora). I do still get some
>>>>> denials, first 2 with both backends: type=AVC msg=audit(12/03/2012
>>>>> 14:30:26.767:597) : avc:  denied  { fsetid } for  pid=23063
>>>>> comm=pdns_server capability=fsetid
>>>>> scontext=system_u:system_r:named_t:s0 
>>>>> tcontext=system_u:system_r:named_t:s0 tclass=capability
>>>>>
>>>>> type=AVC msg=audit(12/03/2012 14:30:26.735:595) : avc:  denied  {
>>>>> kill } for  pid=20597 comm=pdns_server capability=kill 
>>>>> scontext=system_u:system_r:named_t:s0 
>>>>> tcontext=system_u:system_r:named_t:s0 tclass=capability
>>>>>
>>>>> For this I can add: allow named_t self:capability { fsetid kill };
>>>>> but I am not sure if that is okay, can anyone please advise?
>>>>>
>>>>> Last one I get with the mysql backend: type=AVC msg=audit(12/03/2012 
>>>>> 13:37:52.315:545) : avc:  denied  { getattr } for  pid=20772 
>>>>> comm=pdns_server path=/usr/share/mysql/charsets/Index.xml dev="dm-0" 
>>>>> ino=8936 scontext=system_u:system_r:named_t:s0 
>>>>> tcontext=system_u:object_r:usr_t:s0 tclass=file To allow this I will 
>>>>> have to allow read access from named_t to usr_t, would that be okay?
>>>>
>>>> Yes, the capabilities are a pity, but it is give and take, so all 
>>>> considering this looks ok to me
>>>>
>>> Ok, thank you. I was a bit surprised that named_t already had access to
>>> a mysql database by the way.
> 
>>> PowerDNS has some more backends, next I have a question about is the
>>> pipe backend: This backend executes a file specified in the config, that
>>> will echo the response to STDOUT. Should there be a seperate domain for
>>> that pipe command, or is it okay to allow exec to bin_t? For now I chose
>>> the latter, and my .te looks like this: ======pdns.te====== 
>>> policy_module(pdns,0.0.1)
> 
>>> require{ type named_t; }
> 
>>> allow named_t self:capability { kill fsetid };
> 
>>> #gmysql backend: bool pdns_backend_mysql true; 
>>> tunable_policy(`pdns_backend_mysql', ` mysql_read_config(named_t) 
>>> files_read_usr_files(named_t) #socket mysql_stream_connect(named_t) ')
> 
>>> bool pdns_backend_pipe false; tunable_policy(`pdns_backend_pipe', ` 
>>> corecmd_exec_bin(named_t) files_read_usr_files(named_t) ') 
>>> =================== This, together with the .fc results in a working 
>>> powerdns for me. If there are no further objections, what would be the
>>> next step to get this accepted in the (Fedora?) policy?
> 
>> I don't see why rading usr_files or executing a bin_t file requires a
>> boolean, I would just add the access.

Based on the feedback my .te now looks like the following. You might
notice the kill and fsetid are gone. fsetid is gone because a patch[1]
for that is commited in pdns. Kill is gone because that is needed by the
guardian process, but we don't need that if we let systemd do this job
instead[2].
Now I guess the last boolean might not make a lot of sense either: We
can already connect to mysql over localhost, just not over the socket.
======pdns.te======
policy_module(pdns,0.0.1)

require{
        type named_t;
}

files_read_usr_files(named_t)
#needed for pdns pipe backend
corecmd_exec_bin(named_t)

#gmysql backend:
bool pdns_backend_mysql true;
tunable_policy(`pdns_backend_mysql', `
        mysql_read_config(named_t)
        #socket
        mysql_stream_connect(named_t)
')


[1]
<http://wiki.powerdns.com/trac/changeset?new=2965%40trunk%2Fpdns&old=2964%40trunk%2Fpdns>
[2] <https://bugzilla.redhat.com/show_bug.cgi?id=883852>

--
This message was distributed to subscribers of the selinux mailing list.
If you no longer wish to subscribe, send mail to majordomo@xxxxxxxxxxxxx with
the words "unsubscribe selinux" without quotes as the message.


[Index of Archives]     [Selinux Refpolicy]     [Linux SGX]     [Fedora Users]     [Fedora Desktop]     [Yosemite Photos]     [Yosemite Camping]     [Yosemite Campsites]     [KDE Users]     [Gnome Users]

  Powered by Linux