GDDRescue is probably the mother of all CD/DVD recovery programs available for Linux. The program is probably available for your distribution; Ubuntu users can install it within Synaptic if they have enabled the Universe repository.

click to enlarge
GDDRescue does not have a graphical user interface, meaning that you have to run it from the command line. The program accepts tons of arguments and options, so it is a good idea to read the manual page (man ddrescue.) However, for simple CD recovery, you can follow these directions (assuming your CD is in /media/my_cd and you want to recover it to /home/your_user_name/my_recovered_cd):
ddrescue /media/my_cd /home/your_user_name/my_recovered_cd
Exactly at this point GDDRescue comes into play: if you have multiple recovered files, for example you ran one with JFileRecovery and another with Dares and one with ddrescue, you can run ddrescue to merge all the available recovered files into one file. So, if JFileRecovery recovered files 1 to 15, Dares 1 to 13 and GDDRescue 2 to 16, then you can have one output file with files 1-16. If you want, you can run GDDRescue multiple times on the same output file from the same input file, so that if it can not recover one file in the first run but can recover in the second run, it will write the recovered data in place. No other program is capable of this.