This is not easy. Thanks for a challenging problem.
origLighting = {{"Ambient", RGBColor[{0.4, 0.2, 0.2}]},
{"Directional",RGBColor[{0., 0.18, 0.5}], ImageScaled[{2, 0, 2}]},
{"Directional",RGBColor[{0.18, 0.5, 0.18}],ImageScaled[{2, 2, 3}]},
{"Directional", RGBColor[{0.5, 0.18, 0.}],ImageScaled[{0, 2, 2}]},
{"Directional", RGBColor[{0., 0., 0.18}],ImageScaled[{0, 0, 2}]}};
eye = AbsoluteOptions[Graphics3D[Cube[], Boxed -> False], ViewPoint][[1, 2]] 25/24;
target = {0., 0., 0.};
up = {0., 0., 1.};
1. Create an orthonormal rotation matrix that converts a vector from "camera space" (the 2D screen + depth) into true 3D "world space"
imageToWorldBasis[eye_, target_, up_] :=
Module[{z, x, y}, z = Normalize[eye - target];
x = Normalize[Cross[up, z]];
y = Cross[z, x];
Transpose[{x, y, z}]];
2. Map the original lighting setup into Euclidean 3D vectors.
toWorldDirections[lights_, eye_, target_, up_] :=
Module[{B = imageToWorldBasis[eye, target, up]},
lights /. {{"Directional", col_, ImageScaled[p_]} :> {"Directional",
col, Normalize[B . p]}}];
3. This matrix represents an exact geometric transformation that cyclically maps the cube's faces to one another.
faceCycle = {{0, 0, 1}, {-1, 0, 0}, {0, -1, 0}};
4. Apply the 120 degrees rotation to the frozen world-space lights.
rotateDirections[lights_, k_] :=
Module[{R = MatrixPower[faceCycle, k]},
lights /. {{"Directional", col_, dir_} :> {"Directional", col,
Normalize[R . dir]}}];
5. Precompute world space directional lights
worldDirs = Rest@toWorldDirections[origLighting, eye, target, up];
ambient = First@origLighting;
6. Final visualization:
Table[Graphics3D[Cube[], Boxed -> False,
Lighting -> Join[{ambient}, rotateDirections[worldDirs, k]],
ViewVector -> {eye, target}, ViewVertical -> up,
ViewCenter -> {{0.5, 0.5, 0.5}, {0.5, 0.5}},
ViewAngle -> Automatic], {k, 0, 2,
1}] // GraphicsRow

Edit in response to comment
B = imageToWorldBasis[eye, target, up];
cameraSpaceRotation[k_] :=
MatrixPower[Transpose[B] . faceCycle . B, k];
rotateCameraLights[lights_, k_] :=
Module[{Q = cameraSpaceRotation[k]},
lights /. {{"Directional", col_, ImageScaled[p_]} :> {"Directional",
col, ImageScaled[Q . p]}}];
Manipulate[
Graphics3D[Cube[], Boxed -> False,
Lighting -> rotateCameraLights[origLighting, k],
SphericalRegion -> True], {k, 0, 2, 1}]
Edit in response to the second comment
Here is a much more compact code with options set via AbsoluteOptions.
With[{o = AbsoluteOptions@Graphics3D[]},
With[{Q = # . {{0, 0, 1}, {-1, 0, 0}, {0, -1, 0}} . Transpose@# &[
Normalize /@
With[{Z = Subtract @@ #1}, {#2~Cross~Z, Z~Cross~(#2~Cross~Z),
Z}] &[ViewVector /. o, ViewVertical /. o]],
L = Lighting /. o},
Manipulate[
Graphics3D[Cube[], Boxed -> False, SphericalRegion -> True,
Lighting -> (L /.
ImageScaled[p_] :> ImageScaled[MatrixPower[Q, k] . p])], {k, 0,
2, 1}]]]
Graphics3D[Cube[],ViewVector->{{2,-2,1.4},{0,0,0}},ViewVertical->Prepend[AngleVector[#],0],ViewAngle->0.6]&/@Subdivide[0,2Pi,30]$\endgroup$ViewPoint -> {1.3, -2.4, 2.}, when you evaluate input without additional manual rotation or any additional specification in the code that changes view point. $\endgroup$