多由于父母相继亡故而丁忧。降服后，签武成军判官（滑州），任职两年。后经连襟之父枢密副使庞籍的推荐，入京为馆阁校勘，同知礼院，在京城任官十年。至和元年（1054年），庞籍知并州兼河东经略，司马光改并州通判。嘉佑二年（1057年）司马光代庞籍巡视边地，主张在麟州筑堡失败损兵折将，庞籍因事获罪，司马光引咎离开并州，任职开封府推官。两年后改修起居注、判礼部。宋仁宗末年任天章阁待制兼侍讲同知谏院。嘉佑六年（1061年）迁起居舍人同知谏院。司马光立志编撰《通鉴》，作为统治者的借鉴。治平三年（1066年）撰成战国迄秦