C++11, 284 267 bytes
-17 bytes thanks to Zacharý
Uses C++ random library, output on the standard output
#include<iostream>
#include<random>
typedef float z;template<int N>void g(z s){z a[N],d=s/N;int i=N;for(;i;)a[--i]=d;std::uniform_real_distribution<z>u(.0,d<.5?d:1-d);std::default_random_engine e;for(;i<N;){z c=u(e);a[i]+=c;a[++i]-=c;}for(;i;)std::cout<<a[--i]<<' ';}
To call, you just need to do that :
g<2>(0.0);
Where the template parameter ( here, 2 ) is N, and the actual parameter ( here, 0.0 ) is S