Вопрос: Как проверить права доступа к файлам через SSH


Чтобы начать, я очень новичок в этом, поэтому, пожалуйста, простите меня, если это очень просто, или я звучу слишком неосведомленно.

Я хотел бы проверить все файлы в определенном каталоге на моем VPS, чтобы убедиться, что файлы 644 и каталоги 755. FTP не может быть и речи, потому что слишком много файлов / каталогов. SSH кажется наиболее логичным выбором, но прежде чем перейти на chmod-разрешения, я хотел бы посмотреть, что я буду менять. Есть ли способ найти и отобразить файлы / каталоги, которые не соответствуют этим критериям?

Заранее благодарим за понимание.


6
2018-05-19 13:56


Источник




Ответы:


Как уточнение ответа Дэвида Спиллетта, как насчет использования одной команды поиска? Я думаю, что это немного чище, чем все трубы, и вызывает grep. Более того, он вырезает несколько случаев, когда это может взорваться.

find . -type f ! -perm 644 должен найти каждый файл, который не имеет разрешений -rw-r-r--. Для каталогов вы можете использовать find . -type d ! -perm 755,

Как только вы довольны тем, что видите, вы можете даже объединить chmod в одну команду:

find . -type f ! -perm 644 -exec chmod 644 {} \;
find . -type d ! -perm 755 -exec chmod 755 {} \;


10
2018-05-19 14:32



Спасибо, это тоже очень полезно. Является ли восклицательный знак той частью, которая меняет это значение? Могу ли я найти находку. f -perm 777, чтобы найти их? - Bms85smB
Да, ! в основном not, С помощью find . -type f -perm 777 будут возвращать только те файлы, которые являются 777, поэтому, если вы уверены, что это единственная альтернатива, это определенно сработает. - Christopher Karel
Его не единственная альтернатива, однако я использовал «найти все, кроме», чтобы сузить результаты, чтобы я мог заставить суд назвать себя. Я немного обеспокоен тем, что пакет chmod собирается создать некоторые серьезные проблемы (я работаю на реальном сайте). Я создал tarball с включенными разрешениями (или я надеюсь), но я все еще нервничаю. - Bms85smB
Теперь только из любопытства, можно ли это уточнить дальше, чтобы найти разрешения только на общественность, в то время как группа и владелец остаются нерелевантными? - Bms85smB
Я понимаю, что колебание в использовании find с -exec, Это может помочь, если вы замените chmod с ls, Это просто покажет вам, что он собирается делать. Или, возможно, echo, и запись команд chmod в файл. И чем больше вы его используете, тем комфортнее будет. (Играйте в тест!) Что касается вашего второго комментария, да, вы должны иметь возможность использовать -perm -o=rwx для соответствия любым другим разрешениям rwx. - Christopher Karel


find . -type f | xargs ls -l | grep -v rw-r--r--

«найдите все файлы в текущем каталоге, перейдите к« ls -l », чтобы перечислить их детали, и просмотрите вывод ls для всех линий не (опция -v для grep отрицает совпадение), содержащую «rw-r-r--» и для каталогов:

find . -type d | xargs ls -l | grep -v drw-r--r--

Если вы хотите отсканировать другой каталог, замените "." с ним, например:

find /path/to/directory -type f | xargs ls -l | grep -v rw-r--r--

и если некоторые из имен файлов / каталогов могут содержать пробелы, используйте опции «использовать строки с разделителями 0» в find и xargs, чтобы избежать ошибок:

find . -type f -print0 | xargs -0 ls -l | grep -v rw-r--r--

Кроме того, вы можете удалить -v вариант из grep для поиска файлов / каталогов, которые делать если вы хотите перечислить их как проверку на соответствие.

С помощью find по умолчанию сканирует подкаталоги. Чтобы сканировать только один каталог, а не его дочерние элементы, вы можете просто передать вывод ls -l через grep Вместо того, чтобы использовать find а также xargs,

Когда вы запускаете chmod помните, что вы можете указать -v , поэтому он перечислит, что он делает и не изменится при выполнении операции - это может быть полезно для уверенности в себе, что вы дали правильную команду.


7
2018-05-19 14:12



Умное решение. Мне это нравится. - Safado
В сумасшедших редких случаях это может привести к сбою файлов с именами, такими как rw-r-r -. Jpg. "find. -type f | xargs ls -l | awk '{if ($ 1! =" rw-r - r-- ") print $ 0}'" может работать лучше. (я думаю!) - Sirex
Или просто используйте egrep и $ rw-r - r-- Что бы ни работало: p - Sirex
Большое вам спасибо, это именно то, что мне нужно и легко понять! - Bms85smB
find также поддерживает флаг -perm, find. -тип f -perm 0644 - HampusLi


Следующая команда должна предоставить вам числовые разрешения для всех файлов в указанном каталоге

 stat -c "%a %n" /path/to/files/*

0
2018-05-19 14:03



Благодарим вас за быстрый ответ, однако в рассматриваемой директории есть много вспомогательных каталогов с большим количеством дочерних каталогов и более 10 000 файлов. Вот почему я надеялся просто отображать файлы, которые не были установлены в 644, и каталоги, которые не установлены в 755. - Bms85smB
find а также grep ваши друзья в этом случае, как вы можете видеть в новом ответе Дэвида. - Hyppy


Посмотрите, подходит ли вам первый ответ на этот вопрос: Просмотреть разрешения @stackoverflow


-1
2018-05-19 14:03