[NCLUG] Need to write to non-owned file
Katy G. B.
katy at dystonia-dreams.org
Tue May 15 22:41:32 MDT 2007
the way i would resolve this issue, and the arguable 'correct' way is
really simply, after getting the users passwd, permissions, fork your
app or create a child process running as that user. do whatever you
need to o and than have the child process return control to your
progie. though i'm still like in major *scratches head* mode for like
why. but whatever, that's the correct way to handle that if you like
totally want to stay inside your c++ prog. otherwise you could also
just like have your app write a `tmp` perl(or whatever) to just like do
whatever you wanted done and than exec that. but again yeah it all
sounds like hacks for stuff you "shouldn't" do, so i'd stick with
running a child proc. ig you like really have to do something like this
than just like do it as 'right' as you can.
Benson Chow wrote:
> The long explanation:
>
> Programs like 'passwd' is basically doing what you want to do, except
> the target user is 'root'. However, to do what you want to do, even
> though the target user is another non-privledged account, the pathway
> has been said and is the same as 'passwd' - switch to root first, then
> setuid to the target user (even this may not be necessary, just edit
> the file as root!).
>
> The reason why this is "bad" is that it's not inherently bad - after
> all, it _is_ the only way to edit someone else's file when you have no
> permission otherwise (such as file/acl permissions). The reason why
> it _is_ bad is that it's usually HARD to prevent the program to not
> "accidently" give any user of this program root privledges.
>
> Let me tell you, given a naive implementation of a setuid program
> there are a lot of ways to crack into it and get root. Everywhere
> from buffer overflows to timing attacks, you'll have to ensure every
> single method is blocked, from making sure all buffers are bounded and
> all file writes are atomic (with itself _and_ other programs), TO
> START WITH! There's MUCH more to it than just these two examples!
>
> If you trust your users as 'root' then by all means go for it! It's
> actually very simple... And 'setuid' is what you need to do. But you
> might as well give everyone the root password.
>
> BTW - even sudo solutions may not be secure, though 'sudoedit' as
> suggested has been attempted to be cleaned up of all potential
> privledge escalations much like the 'passwd' program.
>
> Try hard to not need to go through this route if you don't trust your
> users with root access, else you'll have to go through a lot of
> auditing. Maybe you like to do the auditing. It's _hard_ and it's the
> cause of why there are so many viruses floating around that exploit
> these bugs.
>
> -bc
>
> On Mon, 14 May 2007, bsimpson at att.net wrote:
>
>>> The answer is that you don't actually want to do this. Really. It's
>>> going to be a *huge* security hole.
>>
>> I'd like to understand why.
>>
>>> Consider the case where the user of your application tricks your
>>> program
>>> into editing /etc/passwd or something like that.
>>
>> But /etc/passwd is owned by root. Wouldn't you need root's password?
>> And if you had root's password, you wouldn't need my application to
>> wreak havoc on the system.
>>
>> I'd like to understand in general why this is a bad idea.
>>
>> I'll also mention that in this specific case it probably is a
>> don't care. The environment is a small satellite operations room
>> where the machine is physically by the operator, and it is a closed
>> environment - not connected to the Internet. We screen our
>> operators, since they would have more than just this opportunity
>> to mess things up.
>>
>> The file to be written out is one of several configuration files.
>> The engineers want a particular one not to be readily modifiable
>> by the operators.
>>
>>> Equally, you probably don't want your program to read the user's
>>> password and authenticate the user; it's a pain. It would require (at
>>> least part of) your program running as root, calling a bunch of complex
>>> APIs like setuid/seteuid/setgid/setegid, and probably a bunch of other
>>> complex stuff.
>>
>> That may explain why I didn't see any examples of doing this in
>> my limited search. If, in general, it's a bad idea, I'd like to
>> get a handle on why.
>>
>>> Instead, you're probably better off spawning a copy of su/sudo/login
>>> (possibly within a spawned xterm etc. if it's a GUI app) and having
>>> that
>>> prompt the user for the password, and running a command to write/edit
>>> the file.
>>
>> That might be the way to go...
>
> WARNING: All HTML emails get auto deleted. DO NOT SEND HTML MAIL.
> WARNING: Emails with large typo counts/spelling errors will also be
> deleted.
> _______________________________________________
> NCLUG mailing list NCLUG at nclug.org
>
> To unsubscribe, subscribe, or modify your settings, go to:
> http://www.nclug.org/mailman/listinfo/nclug
More information about the NCLUG
mailing list