Re: Secure client/server file processing (was: How to check UID of process on the other side of local TCP/UDP connection)

"Michael T. Babcock" <[email protected]> Wed, 29 Nov 2006 14:49:18 -0500
Newsgroups gmane.comp.security.linux
Organization Triple PC Ltd.
Message-ID <[email protected]>
[email protected] wrote:
> I have the following situation:
> - Client communicates with server via TCP or UDP. 
> - Both client and server are on the same local host. 
> - Server runs with root privilege.
>   
Are you using the sockets for something other than this authentication?  
You could use shared memory (not always portable) or unix sockets as 
some have suggested, or simply use named pipes for that matter.

Are you using the UIDs of the files for anything interesting, or just to 
make sure nobody else created the file on you?  If you're just doing 
this to make sure the client is who it claims to be, use a different 
authentication system like a cryptographically strong hash function.

Decide what you care about:  Do you care what the UID is for security 
purposes, or just to make sure the same user created the file and is 
talking to you?  Do you need the file for processing, or is it just an 
out-of-band security system?  Do you need the socket for communication 
of anything else, or is it just the security system?

If you're processing real files with data in them, create the file 
securely (put users and server in the same group, make directory only 
writable and usable by the group, etc.) with whatever metadata you need 
inside it and then open a unix socket connection to your server app 
telling it the name of the file and the SHA-1 (or other) hash of the 
file you created (preferably with a negotiated salt involved).  The 
server can then process the file and make sure the signature matches, 
and move on. 

If its an insecure server, consider using real digital signatures, 
perhaps kerberos authentication for clients and servers.  There are lots 
of good options out there.

-- 
Michael T. Babcock
Triple PC Ltd.