====== Set rights of files in public_html ====== Set rights of user /home/*/public_html directors in a secure and useful way - all files/directories get chown user:www-data, so users own them and the webserver has group access - group www-data is added g+r for files (webserver can read all files) g+rsx for directories (webserver can read and change into all directories) - o-rights (for all) are completely removed, so shell users can't read files of other users (possibly containing passwords etc). You can run the script using ''sudo fixphrights.sh'' or add a cron-job to go over all public_html directories every hour or so. Note: Users should be informed what happens, because a lot have taken the bad habit of doing chmod 755 to everything, and they will be confused if their files go back to 750 every hour. Ref: http://ubuntuincident.wordpress.com/2010/11/21/setting-rights-for-public_html/ #!/bin/bash - #=============================================================================== # # FILE: fixphrights.sh # # Usage: ./fixphrights.sh # # Description: Set rights of user /home/*/public_html directors in a secure # and useful way # - all files/directories get chown user:www-data, so users own them # and the webserver has group access # - group www-data is added # g+r for files (webserver can read all files) # g+rsx for directories (webserver can read and change into all directories) # - o-rights (for all) are completely removed, so shell users can't read # files of other users (possibly containing passwords etc). # This can be run in a cronjob and will fix rights every five minutes, e.g.: # Crontab entry: # 5 */1 * * * root nice /home/brb/bin/fixphrights.sh # Options: none # Requirements: --- # BUGS: --- # Notes: --- # Author: Bernhard Brunner (bn), bernhard point brunner att epr point ch # Company: epr.ch # Created: 2011/03/11 07:33 # Last modified: 2011/03/11 07:40 # Revision: --- #=============================================================================== set -o nounset # Treat unset variables as an error setrights () { echo $1 cd /home/$1 mkdir -p public_html cd public_html find . -type d -print0 | xargs -0 chown $1:www-data find . -type d -print0 | xargs -0 chmod u+s,g+rsx,o-rwx find . -type f -print0 | xargs -0 chown $1:www-data find . -type f -print0 | xargs -0 chmod g+r,o-rwx chown $1:www-data . chmod u+x,g+rx,o-rwx . # chmod u+x } # ---------- end of function setrights ---------- cd /home for i in * ; do echo $i if [[ "$i" != "lost+found" ]] ; then setrights $i fi done {{tag>linux bash webserver}} ~~LINKBACK~~ ~~DISCUSSION~~