The details are going to vary for your environment, but here's roughly how we used to do it:
1. Get a copy of the production backup
2. Restore it to a test machine. There, do several things
a. Clean the data, remove email addresses, phone numbers, sensitive information
b. Remove production logins and users, add development logins and users
c. Shrink the database if we could
3. Backup the cleaned and shrunk database
That was then used to send down to Development and QA and wherever. It's mainly just a matter of writing the scripts to do the work. There's no special tricks to it.