Вы могли попытаться включить отладку Userenv и чтение входа в систему, что происходит негласно. У меня была проблема с программой, которая сцепилась в событие входа в систему, но испытывала таймаут во время его выполнения. Это заставляло Windows ожидать dll для завершения перед таймаутом.
Можно найти информацию о включении входа отладки userenv и как считать его в блоге команды Microsoft Directory Services (Понимающий, как считать журнал userenv - Часть 1 и Понимающий, как считать журнал userenv - Часть 2.
Надеюсь, это поможет!
Править: Я нашел другую полезную статью о Technet: Интерпретация файлы журнала Userenv
находка может добиться цели один с - должностное лицо:
find /home/user -type f -exec chmod 0664 {} \;
find /home/user -type d -exec chmod 0775 {} \;
для предотвращения находят от порождения chmod для каждой записи:
find /home/user -type f -exec chmod 0664 {} +
find /home/user -type d -exec chmod 0775 {} +
(это эффективно называет chmod однажды со списком всех файлов как параметры, а не один chmod на файл),
Этот ответ не решит Вашу проблему, но кто-то мог бы найти это полезным для подобной проблемы, где файлы имеют меньше разрешения, чем они должны.
# chmod -R . u=rwX,g=rX,o=rX
Волшебство является X разрешениями, а не x. chmod страница справочника описывает это таким образом:
выполняйтесь/ищите, только если файл является каталогом или уже имеет, выполняют разрешение для некоторого пользователя
Это не подходит в Вашем случае, как Ваши файлы имеют, выполняют разрешение так, будет соответствовать второму тесту.
В случае, если вы используете ssh, рекомендуется не изменять разрешения ~ / .ssh
.
DIR=/home/user
find $DIR -type d -not -path "$DIR/.ssh" -print0 | xargs -0 chmod 0775
find $DIR -type f -not -path "$DIR/.ssh/*" -print0 | xargs -0 chmod 0664
Я создал сценарий из решения freiheit, он добавляет базовую проверку аргументов.
#!/bin/sh
if [ $# -lt 1 ]; then
echo "USAGE: $0 <path>"
exit 1
fi
find $1 -type d -print0 | xargs -0 chmod 0755
find $1 -type f -print0 | xargs -0 chmod 0644
На днях я сделал очень простой сценарий bash, потому что мне нужно было исправить разрешения. Почему нет официальной утилиты для сброса базовых разрешений, прав доступа к файлам и папкам без полномочий root?
В сценарии используется поиск до 755 всех папок и 644 библиотек. Затем он проверяет каждый файл с помощью readelf, чтобы увидеть, есть ли у него двоичный заголовок elf. В противном случае он сканирует первые два символа на наличие shebang #!
. Он 755 этих экземпляров и 644 все остальное после того, как он проверяет, имеет ли файл уже соответствующее разрешение.
Особые случаи обрабатываются с исключением, например, * .bak
для файлов, которые следует игнорировать.
12137]
Альтернативой, которая не дает точного ответа на первоначальный запрос, но более вероятно то, что ОП намеревается сделать, является символическое указание разрешений. Например, Я полагаю, что ОП хочет "удалить доступ на запись для публики и удалить разрешение на исполняемые файлы из всех файлов"
Это возможно, если вы используете символическое представление разрешения.
Записывая его таким образом, вместо явной установки "0664", вы избегаете случайного разрешения дополнительных прав доступа для файлов, которые были ранее заблокированы. Например если файл был 0770, то по ошибке он не станет 0664.
Для выполнения первого требования можно просто использовать chmod
:
chmod --recursive o-w $dir
Для выполнения второго требования:
find $dir -type f -exec chmod a-x {} +
Или выполнить оба:
find $dir -type f -exec chmod a-x,o-w {} +
find $dir -type d -exec chmod o-w {} +
Я нашел упрощенное решение C-оболочки. Это может быть не совсем верно, но должно работать для большинства каталогов. Оно предполагает, что команда Unix 'file' работает, и находит исполняемые файлы для сброса их обратно к разрешениям на выполнение:
find /home/user -type d | xargs chmod 0775
find /home/user -type f | xargs -0 chmod 0664
find /home/user -type f -exec file {} \; | grep executable | cut -d":" -f1 | xargs chmod 0775
Я использую этот скрипт https://github.com/TheKito/Scripts/blob/master/FixHomesDirectoryPermissions.sh
#!/bin/bash
HME=/home
for i in $(ls "$HME");
do
if [ -d "$HME/$i" ]; then
echo "$i";
chown -R $i "$HME/$i"
chgrp -R $i "$HME/$i"
find "$HME/$i" -type d -exec chmod 0770 "{}" \;
find "$HME/$i" -type f -exec chmod 0660 "{}" \;
fi
done;