There are two ways you could go about this:
First, if your positions are all within a certain range such as [-300, 300], you could map that range linearly into the [0, 1] interval. Then when you read the texture later on in another shader, execute the opposite mapping to get back the original values.
However, this has the problem that with a standard RGBA texture you still only get 8 bits of precision per component, and for representing positions that is often not enough (you'll get ugly artifacts due to rounding errors). To get around this, it is possible to use extensions to get a floating-point texture format, which lets you store either a 16-bit half-precision or a 32-bit single-precision floating point number per component. Besides having more precision, these are also not clamped to [0, 1] and so you can just store the positions directly.
Floating-point textures are provided by ARB_texture_float. If you want to render to such a texture you'll also need ARB_color_buffer_float and perhaps ARB_half_float_pixel. (BTW, all these are native under OpenGL 3.0, so if you have that you don't need to mess around with extensions at all.)