CVS is horrible (by comparison) and you shouldn't touch the stuff. The new DVCSs such as Git, Hg, Bzr, etc. do not let you set read permissions finer than at the whole-repository level. (Write permissions are fairly easy.)
You can set fine-grained read/write permissions using SVN (see the book). Beware that denying read access to parts of a repository is a rabbit-hole. I recommend splitting the project into separate (mostly self-contained) modules and granting or denying access to each module as a whole. For example,
project/ [world readable, writable by some]
moduleA/ [readable/writable by "team A"]
moduleB/ [readable/writable by "team B"]
You might also want to step back and ask yourself exactly why you need fine-grained access. If you're worried about developers absconding with your source code, then you have deep problems that cannot be solved with technology. If you are worried about admin passwords in your repository, then remove the admin passwords. I would say the primary use case for this kind of access control is to give customers SVN access to the code for the features they have purchased.