Match ends, Celtic 1, Rosenborg 0.
Leigh Griffiths headed in with three minutes remaining against Rosenborg to give a wasteful Celtic their first European group stage win in 11 games.
Brendan Rodgers' hosts were blunt for much of this Europa League contest, Odsonne Edouard, Tom Rogic and Mikey Johnston all spurning chances.
But substitute Griffiths was deadly, racing into the box and nodding home.
It was the Scottish champions' first group triumph since beating Astra of Romania in 2014.
And it was Celtic's second win over Rosenborg this season, having beaten them at Celtic Park in the Champions League qualifiers before being knocked out by AEK Athens.
Celtic now travel to face RB Salzburg, who beat RB Leipzig 3-2 on Thursday, in their second Group B fixture.
When Rosenborg came to Glasgow in July, they departed after a 3-1 defeat that could have been heavier. Since then, they have had a renaissance, playing 10 and winning nine while scoring 24 goals.
They had a promising beginning in Glasgow - Issam Jebali got booked for simulation in the penalty area when Mikael Lustig's challenge might have led to an altogether different outcome - but after 20 minutes or so Celtic pushed them back and took ownership of the game.
The outstanding Kieran Tierney led the charge up the left but, for all their possession, Celtic couldn't carve out many chances. Rogic had a shot saved by Andre Hansen, who then jumped to his feet to push Edouard's follow-up on to a post.
Edouard - only one goal in seven games now - should have scored. Rodgers went with the Frenchman from the start, but it was a familiar Scot who bailed him out at the finish.
That miss came not long before the break. Not long after it, Rogic went through and had options left and right but chose his own road - the wrong one - and blasted straight at Hansen.
In an effort to inject pace and tempo, the kind of relentless energy Celtic at their best play with, Rodgers brought on Scott Sinclair for Rogic and Johnston for James Forrest, but that didn't do the trick either.
Celtic were unconvincing. They had a chance, created, inevitably, by Tierney, but Johnston scooped it over from close range.
Then, just when the faithful's frustration was beginning to turn into resignation, Griffiths, from a nod down by Dedryck Boyata, nipped in to put a downward header past Hansen.
That was the Scotland striker's 101st goal for Celtic. Maybe it was the one that makes him first-choice again too.
After a poor performance against St Mirren on Friday, there was supposed to be a response from Celtic here, a thunderclap showing that reminded everybody of their threat.
It didn't come, but the bottom line was enough on the night. Against the fourth seed in their group, they had to win. Thanks to Griffiths, they did. Just.
Celtic are excellent when their tempo is high and their runners are relentless. Only in tiny pockets did they bear a passing resemblance to their better selves. Griffiths, not for the first time, was the difference.
He's had to be patient. He's had multi-million pound French strikers ahead of him in the pecking order. He's had to listen to his manager talking publicly about the things he needs to do to start the big games. Griffiths soaked up all of that and when he was needed, he delivered.
Griffiths may not be worth the £19.7m Lyon paid Celtic for Moussa Dembele, or the record fee the Scottish champions forked out for Edouard, but he was the only one with the solution last night.
Match ends, Celtic 1, Rosenborg 0.
Second Half ends, Celtic 1, Rosenborg 0.
Goal! Celtic 1, Rosenborg 0. Leigh Griffiths (Celtic) header from the centre of the box to the bottom right corner. Assisted by Dedryck Boyata with a headed pass.
Corner, Celtic. Conceded by Vegar Hedenstad.
Attempt missed. Tore Reginiussen (Rosenborg) header from the centre of the box misses to the left. Assisted by Vegar Hedenstad with a cross following a set piece situation.
Foul by Scott Brown (Celtic).
Issam Jebali (Rosenborg) wins a free kick on the right wing.
Attempt missed. Michael Johnston (Celtic) left footed shot from the centre of the box is just a bit too high. Assisted by Kieran Tierney with a cross.
Substitution, Rosenborg. Jonathan Levi replaces Alexander Søderlund.
Attempt missed. Callum McGregor (Celtic) left footed shot from outside the box is close, but misses to the left. Assisted by Olivier Ntcham.
Scott Brown (Celtic) wins a free kick in the defensive half.
Foul by Alexander Søderlund (Rosenborg).
Substitution, Celtic. Leigh Griffiths replaces Odsonne Edouard.
Offside, Rosenborg. Mike Jensen tries a through ball, but Issam Jebali is caught offside.
Corner, Celtic. Conceded by Even Hovland.
Corner, Celtic. Conceded by Marius Lundemo.
Substitution, Rosenborg. Anders Trondsen replaces Yann-Erik de Lanlay.
Attempt missed. Issam Jebali (Rosenborg) right footed shot from outside the box is too high.
Attempt missed. Scott Sinclair (Celtic) right footed shot from the centre of the box is close, but misses to the left. Assisted by Michael Johnston with a cross.
Offside, Celtic. Kieran Tierney tries a through ball, but Scott Sinclair is caught offside.
Alexander Søderlund (Rosenborg) is shown the yellow card for a bad foul.
Callum McGregor (Celtic) wins a free kick on the left wing.
Foul by Alexander Søderlund (Rosenborg).
Substitution, Celtic. Michael Johnston replaces James Forrest.
Substitution, Celtic. Scott Sinclair replaces Tomas Rogic.
Foul by Olivier Ntcham (Celtic).
Issam Jebali (Rosenborg) wins a free kick on the right wing.
Attempt blocked. Kieran Tierney (Celtic) right footed shot from the left side of the box is blocked. Assisted by Odsonne Edouard.
Foul by Scott Brown (Celtic).
Mike Jensen (Rosenborg) wins a free kick in the defensive half.
Attempt saved. Tomas Rogic (Celtic) right footed shot from outside the box is saved in the top centre of the goal.
James Forrest (Celtic) wins a free kick in the defensive half.
Foul by Alexander Søderlund (Rosenborg).
Foul by Callum McGregor (Celtic).
Marius Lundemo (Rosenborg) wins a free kick in the attacking half.
Tomas Rogic (Celtic) wins a free kick in the attacking half.
Foul by Djordje Denic (Rosenborg).
Second Half begins Celtic 0, Rosenborg 0.
First Half ends, Celtic 0, Rosenborg 0.
Substitution, Rosenborg. Marius Lundemo replaces Anders Konradsen.