Мне нравится исправлять разрешения на нашем файловом сервере через cron. В общем, мне нравится устанавливать все на umask 027, игнорируя любые изменения, сделанные пользователем. Для определенных подпапок мне нравится применять umask 077.
Вопрос не в том, как установить и использовать umask, а в том, чтобы неоднократно исправлять разрешение через cronjob, если пользователь что-то изменил.
например, в итоге должно получиться так
drwx ------ /home/user/.ssh
drwxr-x --- / hom / user / foobar
drwx ------ / hom / пользователь / почта
Сложный путь (которого я хочу избежать) выглядит так:
chmod -R o-rwx /home/user
chmod -R g+r /home/user
find /home/user -typer d -exec chmod g+x '{}' \;
chmod go-rwx /home/user/{Mail,.ssh}
Простите меня, если я упустил суть, но похоже, что вам нужна запись crontab, которая довольно часто запускает следующие команды:
chmod -R go-rwx /home/user/.ssh
chmod -R g-w /home/user/foobar
chmod -R o-rwx /home/user/foobar
chmod -R go-rwx /home/user/Mail
или это не то, что вы спрашивали, как делать?
Вот что мы используем для чего-то похожего (для всех папок, не принадлежащих root). Казалось бы ненужным find
команды должны гарантировать, что мы не устанавливаем разрешения для какой-либо папки, которая уже была установлена правильно. Более ранний сценарий, который слепо chmod
-ed все папки приводили к тому, что некоторые из моих резервных копий думали, что файлы изменились в середине резервного копирования, и я тратил кучу носителей на резервное копирование одних и тех же файлов каждый день.
Результирующий набор разрешений:
#!/bin/sh
cd /home/CAE
# For all directories except those owned by root
for user in `ls -l | grep -v ' root ' | egrep '^d' | awk '{print $NF}'`; do
cd /home/CAE
# Fix top-level permissions to avoid people browsing accounts, but
# to allow normal Web access to public_html
find . -mindepth 1 -maxdepth 1 -name ${user} -type d ! -perm 0711 -print0 | xargs -r -0 chmod 711
# Make sure user has a Web directory (and a private one, also)
if [ ! -d ${user}/public_html/private ]; then
mkdir -p ${user}/public_html/private
chown -R ${user}:users ${user}/public_html
fi
cd ${user}/public_html
# Set top-level private folder to mode 711 if it isn't already
find . -mindepth 1 -maxdepth 1 -name private -type d ! -perm 0711 -print0 | xargs -r -0 chmod 711
# Set all directories except top-level private to mode 755 that aren't already
find . -maxdepth 1 -type d ! -name private ! -perm 0755 -print0 | xargs -r -0 chmod 755
find . -mindepth 2 -type d ! -perm 0755 -print0 | xargs -r -0 chmod 755
# Set all files mode 644 that aren't already
find . -type f ! -perm 0644 -print0 | xargs -r -0 chmod 644
done
Вы можете смонтировать раздел с поддержкой acl и использовать команды getfacl и setfacl для создания и восстановления резервных копий.