While sharing opportunity with Read Only access to users using sharing rule, users are getting edit access as well. OWD for Account is public read only and Opportunity OWD is private.
Based on this comment
If custom vf page for edit is replaced with standard edit functionality it is working as expected.
It sounds like you are having issues where the VF Edit page is not honoring the OWD model defined in the Sharing Settings
A possible/probable cause is the presence of
without sharing on the class definition referencing the Opportunity object - most likely the VF Controller. From the Apex doc:
The with sharing keyword allows you to specify that the sharing rules for the current user be taken into account for a class. You have to explicitly set this keyword for the class because Apex code runs in system context. In system context, Apex code has access to all objects and fields— object permissions, field-level security, sharing rules aren’t applied for the current user.
Some worthwhile reading can also be found in Visualforce in Practice page 51 that discusses how you can have selective sharing control within a class wherein some methods enforce sharing and others don't (using inner classes)