Tom Mueller (plain-text) wrote:
Darren J Moffat wrote:
Tom Mueller wrote:
Shawn Walker wrote:
Tom Mueller (plain-text) wrote:
pkg(1) now prints a message and returns 1. However, for a user image where the user is unable to change the ownership of a file anyway, not having the required user/group is ignored.

I don't agree with the assumption that a user image automatically implies that a user doesn't have the permissions to change ownership of a file.

With the change, the Image class has a "can_change_file_ownership" method that tests to see if the user running the command actually has the ability to change file ownership within the image. This test is only done for non-ENTIRE images. Only if it is a non-ENTIRE image AND the user cannot change file ownership of a temporary file are invalid owner/group tags ignored.

AFAIK, I'm not making the assumption that you don't agree with.

While you aren't making that assumption the test you are making isn't completely reliable in all cases on all platforms.

The issue is that you can't actually assume that because you managed to do a chown of a temp file you created you can do that to any future file in that image directory tree.

I also really don't like the idea of chowning a file to st_uid + 1 - if feels icky, and worse the failure will raise audit records that look really suspect if auditing is turned on.

On a system running FLASK/FMAC (aka SE Linux) chown could be constrained so that I could do the chown to the users that I need to yet the "st_uid + 1" trick would have failed. While that is SE Linux only just now FMAC is being ported to OpenSolaris too - http://opensolaris.org/os/project/fmac/

For example you rules like "bob can chown to alice and carl, but can't chgrp out of his supplementary groups" are possible in an FMAC config. Your test would likely not catch that. Not currently possible to easily configure this on OpenSolaris today but with FMAC it is trivial (well modulo FMAC's own rule complexity issues).
You make good points here, but I'm not sure how to proceed.

An improvement would be to check if you can chown and chgrp files to those the plan actually needs - while that still isn't perfect it would require a pretty tight FMAC configuration to trip that up.
At the time that this check is made, there is no guarantee that the plan even needs to make any changes of ownership. So there isn't any good uid or gid to use.

Consider this case:

A non-root user attempts to install a package into a user image that contains a single file action, with "owner=blah", where "blah" is not a current user on the system. Therefore, we don't have a uid for "blah", so we cannot attempt a chown. At this point, we want to determine how to deal with this error situation (rather than raising a KeyError exception as we do today).

Let's assume that this user isn't able to change file ownership anyway, and since the user cannot even create a new user, it seems to be unreasonable to raise an error that prevents the package from being installed.

Agreed.

Especially since had the user existed, the file ownership
still would not have been set anyway and the package would install successfully. We don't want to automatically consider a user image to not be an error because it is possible for root users to use user images, and for that case we want to require the right users. So the question we want to ask is, if this unknown user had been defined, could we have assigned file ownership for that user? If no, then it really doesn't matter whether the user was defined or not, we should just keep going.

Agreed.

Also, we really want to ask if the user running the command is able to create a new user, so that, if they can change file ownership, they would eventually be able to get the package installed.

Depends what creating a user means. If it is updating etc/passwd inside that image (since etc/passwd would be owned by the user in the image) chances are that part would succeed in many cases but the chown could still fail.

And from what you've pointed out about the possibilities with SE Linux and FMAC, no matter what we do in the code, the answer may be "it depends on how the rules are setup".

Indeed such is the "flexibility" of FMAC/FLASK.

There is also the _POSIX_CHOWN_RESTRICTED option on Solaris that could come into play here - see chown(2). Not that I recommend anyone use that but user images is actually a possibly useful area.

We can't use any files that have already been installed into the image, because the file we are installing might be the first or only file in the image.

Yep.

Would it be better to just have a policy in the cfg_cache file for this?

I don't think so.

One problem with a policy is that the webstack team would like to be able to distribute a single pre-installed user image file that works for both root* and non-root users.

For exactly that type of reason I don't think a cfg_cache option is the way to go.

> For root usage, package installation
would insist on having the right users (apache, etc.) created. For non-root usage, the file would be just owned by the user. So an automatic check for the ability to change ownership is more desirable for that case. Maybe the long term solution here is to say that this is just not possible, i.e., the actions have to be shipped with with or without owner/group tags, and if they are there, then the users must exist.

* By "root user" I mean a user with appropriate authorization to create users, change file ownerships, etc.

Would it be acceptable to attempt a change in ownership to uid=0, gid=0 instead?

Maybe I'm not reading the code correctly but it looks like in pre_get_uid_gid() you pass in the user and group names to image.can_change_file_ownership(). So can't use use that user and group name in the chown call ?

This would still trigger audit records, but currently we ship packages for user images with owner=root group=sys, so there are attempts to change ownership to uid=0, uid=3 already when packages are installed by non-root users into user images.

That is actually a better failure audit record than st_uid + 1 because it is meaningful to what was happening. What is st_uid + 1 happens to be the CFO's uid that could set of all sorts of alarm bells.


--
Darren J Moffat
_______________________________________________
pkg-discuss mailing list
[email protected]
http://mail.opensolaris.org/mailman/listinfo/pkg-discuss

Reply via email to