This should be pretty straightforward. You are correct, each client only has their own playercontroller.
The AGameState class is the perfect candidate for your timer. I would have the server set an int value for “time in seconds” and then set that value to replicate. All clients will get that class and that variable. Each UI can just grab the value and draw it. Leave the timer on the server and update it there.
The only drawback is replication time might make the 7…6…5 not “second accurate”, but it is good enough. You can have the client use this value and decrement it on its own timer as well for “more client side accuracy”, but still let the server overwrite it. They would compete.
You might see 7…6…7…6…5… but only in laggy circumstances. You wouldn’t be happy with a client at 0 but nothing happening either, but at least in the server authoritative way it is correct.