Even if you want to add normals or any other information for the vertices you can put that in the VBO you have for vertices.
For example, say your vertex shader has takes in two attribute variables, "position" and "normal".
The VBO for the vertices could look like:
[x1,y1,z1,nx1,ny1,nz1; x2,y2,z2,nx2,ny2,nz2;...] where x,y,z are the positions of each vertex, and nx, ny, nz make up normal vector for each vertex.
When you call glVertexAttribPointer(...) you supply starting point, size, and stride parameters for the values that should get assigned to the attribute variables in your shader program.
When your vertex shader runs, it runs once per each vertex, so the first time it runs, the attribute variable "position" in your vertex shader would get the value (x1,y1,z1) and the attribute variable "normal" would get the value (nx1,ny1,nz1). The next time it runs, "position" would get (x2,y2,z2), and "normal" would get (nx2, ny2, nz2) and so on.
I believe that it is also possible, if you prefer, to make separate VBOS instead of packing all the vertex information together in stripes into one vertex VBO. You could have something like:
Vertex Position VBO
Vertex Normal VBO
Vertex Color VBO
You would have to make quite a few more glBindBuffer calls, but that likely isn't going to hurt performance too much.