初任奉礼郎、大理评事一类小官,后经枢密副使庞籍的推荐,入京為馆阁校勘,同知礼院,至和元年(1054),随庞籍到了并州(今山西)為官,改并州通判。
从嘉二年(1057)庞籍因事获罪,司马光引咎离开并州。宋仁宗末年任天章阁待制兼侍讲同知諫院。嘉佑六年(1061)迁起居舍人同知諫院。
司马光立志编撰《通鉴》,作為统治者的借鉴。治平三年(1066)撰成战国迄秦的《通鉴》八卷上进宋英宗,英宗命设局续修,并供给费用,增补人员。
宋神宗以其书「有鉴於往事,以资於治道」,赐书名《资治通鉴》,并亲為之序。王安石在宋神宗的支持下行新政,他竭力反对,与安石在帝前争论,强调祖宗之法不可变。
神宗命他為枢密副使,坚辞不就。熙寧三年(1070),自请离京,以端明殿学士知永兴军(现陕西省西安市),次年退居洛阳,任西京留守御史臺,以书局自随,继续编撰《通鉴》,至元丰七年(1084)成书。书成后,司马光官升為资政殿学士。
元丰八年(1085)宋哲宗即位,高太皇太后听政,召他入京主国政,次年任尚书左僕射、兼门下侍郎,数月间罢黜新党,尽废新法,史称「元祐更化」。
元祐元年九月,司马光执政一年半,即与世长辞,享寿68岁,「京师人為之罢市往吊,鬻衣以致奠,巷哭以过车者,盖以千万数」,灵柩送往夏县时,「民哭公甚哀,如哭其私亲。四方来会葬者盖数万人」「家家掛象。饭食必祝」。宋哲宗将之葬於高陵。
死后追赠太师、温国公,諡文正,赐碑「忠清粹德」。
遗著有《潜虚》、《均韵指掌》、《类编》、《传家集》、《翰林诗草》、《注古文学经》、《易说》、《注太玄经》、《注扬子》、《书仪》、《游山行记》、《续诗治》、《医问》、《涑水纪闻》、《通鑑目录》、《通鑑考异》、《通鑑举要歷》、《稽古录》(《歷年图》、《歷代君臣事迹》和《百官公卿表》)、《切韵指掌图》、《司马文正公集》等等37种。
司马光在政治上是标準的守旧派,他几度上书反对王安石变法。他认為刑法新建的国家使用轻典。混乱的国家使用重典,这是世轻世重,不是改变法律。
所谓「治天下譬如居室,敝则修之,非大坏不更造也。」司马光与王安石。就竭诚為国来说,二人是一致的,但在具体措施上,各有偏向。
王安石主要是围绕著当时财政、军事