Re: Alternative location of policy files

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

 



2008/12/28 Tim <timasyk@xxxxxxxxx>:
> 2008/12/27 Daniel J Walsh <dwalsh@xxxxxxxxxx>:
>> -----BEGIN PGP SIGNED MESSAGE-----
>> Hash: SHA1
>>
>> Tim wrote:
>>> 2008/12/27 Daniel J Walsh <dwalsh@xxxxxxxxxx>:
>>> Tim wrote:
>>>>>> 2008/12/27 Daniel J Walsh <dwalsh@xxxxxxxxxx>:
>>>>>> xing li wrote:
>>>>>>>>> 2008/12/27 xing li <lixing.1006@xxxxxxxxx>
>>>>>>>>>
>>>>>>>>>> It's work was rearly done in the "/sbin/init"  until the last step of
>>>>>>>>>> system initialization, while the source
>>>>>>>>>> of "/sbin/init" is included in the sysvinit. and it finally invoked
>>>>>>>>>> "security_load_policy()" to load the binary
>>>>>>>>>> policy "policy.XX" to the kernel structure policydb.
>>>>>>>>>>
>>>>>>>>>> and i have confused by the question:
>>>>>>>>>> when and how the selinux label the all file system according
>>>>>>>>>> to "file_contexts"?
>>>>>>>>>> and i found the clue that when we "touch /.autorelabel",the system would
>>>>>>>>>> invoke
>>>>>>>>>> "fixfiles relabel" to relabel the file system. but i could't find the
>>>>>>>>>> relevant source code.
>>>>>>>>>> Maybt somebody has investigated that and could share infomation?
>>>>>>>>>>
>>>>>>>>>> 2008/12/27 Tim <timasyk@xxxxxxxxx>
>>>>>>>>>>
>>>>>>>>>> OK. I'm trying to trace Linux sources to find exact sequence of
>>>>>>>>>>> function calls for loading  SELinux policy into Linux kernel at boot
>>>>>>>>>>> time. And I've lost... to many calls to trace.
>>>>>>>>>>>
>>>>>>>>>>> Maybe somebody has that tracing already and can share information?
>>>>>>>>>>>
>>>>>>>>>>> Tim
>>>>>>>>>>>
>>>>>>>>>>> 2008/12/26 Justin P. Mattock <justinmattock@xxxxxxxxx>:
>>>>>>>>>>>  > I think, one of the main jobs
>>>>>>>>>>>> For libselinux is reading the
>>>>>>>>>>>> Policy, from it specefied location
>>>>>>>>>>>> And then mounting the selinuxfs.
>>>>>>>>>>>> Or vise versa mounting selinuxfs,
>>>>>>>>>>>> And then reading the policy. As
>>>>>>>>>>>> For changing the location, not
>>>>>>>>>>>> To sure what the code looks like,
>>>>>>>>>>>> Maybe it's just a few liners to
>>>>>>>>>>>> Do what you wanted.
>>>>>>>>>>>>
>>>>>>>>>>>> justin P. Mattock
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> On Dec 25, 2008, at 5:36 AM, Tim <timasyk@xxxxxxxxx> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> 2008/12/25 Justin P. Mattock <justinmattock@xxxxxxxxx>:
>>>>>>>>>>>>>> Justin P. Mattock wrote:
>>>>>>>>>>>>>>> Paul Howarth wrote:
>>>>>>>>>>>>>>>> Tim wrote:
>>>>>>>>>>>>>>>>> Hello all,
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> I was wondering, how can I change default location of SELinux
>>>>>>>>>>> policy
>>>>>>>>>>>>>>>>> from /etc/selinux/_policyname_ to some other path?
>>>>>>>>>>>>>>>>> What source codes should be modified for that?
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> The reason to do that are:
>>>>>>>>>>>>>>>>> - I want to work with loadable policy modules --> that requires
>>>>>>>>>>>>>>>>> /etc/selinux/_policyname_ directory to be writable.
>>>>>>>>>>>>>>>>> - limitation of my filesystem having /etc directory (it is
>>>>>>>>>>> read-only
>>>>>>>>>>>>>>>>> filesystem)
>>>>>>>>>>>>>>>>> - unfortunately, I can not mount /etc into some other writable
>>>>>>>>>>>>>>>>> filesystem
>>>>>>>>>>>>>>>> Perhaps you could mount /etc/selinux/_policyname_ rather than /etc
>>>>>>>>>>> from
>>>>>>>>>>>>>>>> a
>>>>>>>>>>>>>>>> writeable filesystem?
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Paul.
>>>>>>>>>>>>>>>> cy
>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>> 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.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> This is confusing to me:
>>>>>>>>>>>>>>> it sounds like there not trying to mount
>>>>>>>>>>>>>>> SELinux, but have the policy load
>>>>>>>>>>>>>>> in a different location other than
>>>>>>>>>>>>>>> /etc/selinux/*
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> regards;
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Justin P. Mattock
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On second thought  from what  it  sounds,
>>>>>>>>>>>>>> to have SELinux be read in another location,
>>>>>>>>>>>>>> you would have to locate in
>>>>>>>>>>>>>> libselinux the location from where the library is
>>>>>>>>>>>>>> told to read the the policy, and simple just change the location,
>>>>>>>>>>>>>> but then you might have to change the kernel, all the libraries,
>>>>>>>>>>>>>> all apps, etc.. that read /etc/selinux/*
>>>>>>>>>>>>>> maybe a simple change of /etc/selinux/config
>>>>>>>>>>>>>> seems simpler. rather than going through
>>>>>>>>>>>>>> lines of code.
>>>>>>>>>>>>>> Anyways,
>>>>>>>>>>>>>> "Merry christmas"
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> regards;
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Justin P. Mattock
>>>>>>>>>>>>> You are right. I would like kernel to read policy just from different
>>>>>>>>>>>>> location.
>>>>>>>>>>>>>
>>>>>>>>>>>>> So options are as folowing:
>>>>>>>>>>>>> 1. Change libselinux sources and sources of all related apps + kernel.
>>>>>>>>>>>>> 2. Try to change /etc/selinux/config.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Regarding second one - manuals on SELinux say that /etc/selinux/config
>>>>>>>>>>>>> contains name of policy to be loaded. And that name _policyname_ is a
>>>>>>>>>>>>> name of directory in /etc/selinux/_policyname_ having subdirectory
>>>>>>>>>>>>> policy with actual policy file.
>>>>>>>>>>>>>
>>>>>>>>>>>>> So, it seems only option #1 is the one to use.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Does kernel use libselinux to read policy or it reads it directly from
>>>>>>>>>>>>> filesystem?
>>>>>>>>>>>>> Any other pitfalls?
>>>>>>>>>>>>>
>>>>>>>>>>>>> Tim
>>>>>>>>>>> --
>>>>>>>>>>> This message was distributed to subscribers of the selinux mailing list.
>>>>>>>>>>> If you no longer wish to subscribe, send mail to majordomo@xxxxxxxxxxxxxxxxx
>>>>>>>>>>> the words "unsubscribe selinux" without quotes as the message.
>>>>>>>>>>>
>>>>>> Everything uses libselinux to find the paths to policy.  So if you
>>>>>> wanted to change the location of where SELinux stores the policy you
>>>>>> would need to modify libselinux.  In the file src/selinux_config.c
>>>>>> you would modify
>>>>>>
>>>>>> $ grep /etc/selinux src/selinux_config.c
>>>>>> #define SELINUXDIR "/etc/selinux/"
>>>>>>
>>>>>> All of the other paths are relative to this.
>>>>>>
>>>>>> I do not believe that we have hard coded this path in to any other user
>>>>>> tools.  If we have that is a bug.  I don't understand why you would want
>>>>>> to change this path, and would suggest that you use bind mounts or
>>>>>> remote mounts if you want these files to be located somewhere else.  You
>>>>>> would also need to maintain the file context if you do this.
>>>>>> The motivation for having alternative path for selinux policy
>>>>>> directory _policyname_ in /etc/selinux/_policyname_ is as following:
>>>>>> 1) I have legacy system that mounts root filesystem including
>>>>>> /etc/selinux/... in read-only mode;
>>>>>> 2) also the system mounts a writable filesystem;
>>>>>> 3) I can not change that behavior (modes of mounting, filesystem
>>>>>> types, sequence of mounting, number of mount points etc) of legacy
>>>>>> system for some reason;
>>>>>> 4) I can freely modify sources -> kernel, selinux-related (under above
>>>>>> limitations).
>>>>>> 5) there is a requirement to support modular policy infrastructure in
>>>>>> that system;
>>>>>> To do that I plan to make SELinux subsystem operate on policy-related
>>>>>> files on different location --> on writable filesystem.
>>>>>> Could you please clarify that?
>>> You would also need to maintain the file context if you do this.
>>>
>>>>>> Tim
>>> If you want to maintain the SELinux files on say /var/lib/selinux then
>>> all of the file context under /var/lib/selinux needs to match that of
>>> /etc/selinux
>>>
>>> So /var/lib/selinux/targeted needs to be labeled selinux_config_t.
>>>
>>> In Rawhide for example I have the following labeling for /etc/selinux
>>> # grep /etc/selinux /etc/selinux/targeted/contexts/files/file_contexts
>>> /etc/selinux(/.*)?      system_u:object_r:selinux_config_t:s0
>>> /etc/selinux/([^/]*/)?seusers   --      system_u:object_r:selinux_config_t:s0
>>> /etc/selinux/([^/]*/)?users(/.*)?       --      system_u:object_r:selinux_config_t:s0
>>> /etc/selinux/([^/]*/)?policy(/.*)?      system_u:object_r:semanage_store_t:s0
>>> /etc/selinux/([^/]*/)?setrans\.conf     --      system_u:object_r:selinux_config_t:s0
>>> /etc/selinux/([^/]*/)?contexts(/.*)?    system_u:object_r:default_context_t:s0
>>> /etc/selinux/([^/]*/)?contexts/files(/.*)?
>>> system_u:object_r:file_context_t:s0
>>> /etc/selinux/([^/]*/)?modules/semanage\.read\.LOCK      --
>>> system_u:object_r:semanage_read_lock_t:s0
>>> /etc/selinux/([^/]*/)?modules/semanage\.trans\.LOCK     --
>>> system_u:object_r:semanage_trans_lock_t:s0
>>> /etc/selinux/([^/]*/)?modules/(active|tmp|previous)(/.*)?
>>> system_u:object_r:semanage_store_t:s0
>>>
>>>
>>> You can setup a matching labels for /var/lib/selinux with the semanage
>>> command.
>>>
>>> # semanage fcontext -a -t selinux_config_t '/var/lib/selinux(/.*)?'
>>> ...
>>>
>>>
>>>>
>>> Thank you for clarification.
>>> I will try to change suggested libselinux line to point into different
>>> location and post the results.
>>
>>> Tim
>>
>> Why not just use a bind mount on a regular mount, and then you do not
>> need to change the library at all?
>> -----BEGIN PGP SIGNATURE-----
>> Version: GnuPG v1.4.9 (GNU/Linux)
>> Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org
>>
>> iEYEARECAAYFAklWO4MACgkQrlYvE4MpobPZsACg5YXltDIHUMA7001nNCdLO3C/
>> jBUAoNwSx/nVhejh+OdSAES9D6wJktao
>> =X1+b
>> -----END PGP SIGNATURE-----
>>
> Sure, I will try mount --bind before modification of any source.
>
> Tim
>
Results on mount --bind
1) mount --bind /etc/selinnux /opt/mypolicy
fails since /etc/selinnux is not a device.
I think the reason is that /etc/selinnux is part of root filesystem,
not separate filesystem. So mount can not handle it.
2) Straight modification of policy path in libselinux to point into
writable filesystem also did not helped at boot.
Reason: policy reading is done at very early stage - a way _before_
the writable filesystem is mounted.

Any ideas for that?

Tim

--
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