CFrame.new(Vector3) creates a CFrame at the position of Vector3 but in the default orientation. This is what you are using, so it just makes the part have the default orientation (front in -Z and top in +Y).
Instead, just use the CFrame of the Torso directly:
bg.cframe = char.Torso.CFrame;
You could also have constructed your own CFrame, but using the 2 argument CFrame.new constructor:
bg.cframe = CFrame.new( Vector3.new(), char.Torso.CFrame.lookVector );
(although this is not quite the same since this will not match the tipping of Torso, though will match the front direction)
Note that using FindFirstChild like this is just extra, unnecessary typing.
This is because this snippet will error if there isn't a Torso:(attempt to index a nil value for using .CFrame)
Use .Torso instead except in the actual condition that verifies there is a Torso.