Проще всего выполнить небольшой скрипт для каждого файла, который проверяет вывод в кратком режиме file
и печатает путь, если вывод file
соответствует ELF
или C source
, путь передается как $0
.
find . -type f -exec sh -c \
'file -b "$0" | grep -q "^ELF\|^C source" && printf %s\\n "$0"' {} \;
Это решение имеет следующие преимущества перед оригиналом
- Тип f
отфильтровывает каталоги немедленно, а не полагается на вывод file
Передача аргумента в виде {}
позволяет избежать проблем, связанных с пробелами или новыми строками в имени файла.
В конфигурационном файле sshd есть опция:AuthorizedKeysFile
А с помощью токенов можно было бы установить вот так:
AuthorizedKeysFile /etc/sshd.keyfiles/%u.key
Следующий шаг — добавить эту папку в вашу систему Puppet/Ansible/etc и отслеживать изменения во всех файлах в этой папке.
Если у вас есть root-доступ на этом компьютере, вы можете попробовать сделать ваши ssh-файлы и каталог неизменяемыми с помощью командыchattr
, например.:
sudo chattr +i ~/.ssh/authorized_keys
sudo chattr +i ~/.ssh
Это предотвратит изменение, переименование, удаление или перезапись файла авторизованных ключей. Поскольку только root может снять флаг неизменяемости, это предотвратит вставку ключа в ваш файл authorized_keys
любым скриптом, который вы запускаете как обычный пользователь.
Как ssh защищен от подмены домашней папки с помощью «mount --bind»? Я сделал тест и смонтировал домашнюю папку с другой папкой на другом жестком диске. После использования команды ssh -copy -id ключ клиента корректно импортировался в ключи /home/.ssh/authorized _и после изменения прав доступа домашней папки с помощью 'sudo chmod 755 ~' это сработало как волшебство, и больше не нужно было вводить пароль.