LINUX.ORG.RU
ФорумTalks

Однострочник для find


0

0

По идее должен искать по всей файловой системе файлы с подозрительными пермами. Вот сам скрипт:

find `echo /* | sed 's:/home ::;s:/sys ::;s:/proc ::;s:/tmp ::'` \( `awk -F ':' '($3>=1000 || $1 = «nobody») {print $1}' /etc/passwd | uniq | sed 's/^/-user /;s/$/ -o/'` -perm /o+w -o \( \( -group users -o -group wheel \) -perm /g+w \) \) ! -type l ! -type c ! -iwholename /var/tmp\* -ls

Знаю, что коряво, но пока не пробовал оптимизировать. Главное, что работает. Точность критериев неидеальная. Если найдете какие-то файлы, то не следует их сразу удалять или менять пермы, может так и надо. Запускать под рутом.

★★★★★

C:\Documents and Settings\andru>find `echo /* | sed 's:/home ::;s:/sys ::;s:/proc ::;s:/tmp ::'` \( `awk -F ':' '($3>=1000 || $1 = "nobody") {print $1}' /etc/passwd | uniq | sed 's/^/-user /;s/$/ -o/'` -perm /o+w -o \( \( -group users -o -group wheel \) -perm /g+w \) \) ! -type l ! -type c ! -iwholename /var/tmp\* -ls
'sed' is not recognized as an internal or external command, operable program or batch file.
Andru ★★★★
()

Предлагаю авторов однострочников штрафовать, превентивно так сказать :)

Deleted
()

>Запускать под рутом.

бугага.

dikiy ★★☆☆☆
()

это нормально?

rm: невозможно сменить каталог с `/' на `lost+found': Permission denied
rm: невозможно удалить `//var/lib/rpm/Requirename': Permission denied
rm: невозможно удалить `//var/lib/rpm/Packages': Permission denied
rm: невозможно удалить `//var/lib/rpm/Pubkeys': Permission denied
rm: невозможно удалить `//var/lib/rpm/Basenames': Permission denied
rm: невозможно удалить `//var/lib/rpm/Name': Permission denied

spacel0rd
()

Извините, но это не perl, а find и никакой обфускации

Xenius ★★★★★
() автор топика

Однострочники не нужны.

GotF ★★★★★
()

а нафига в таком убогом виде это делать? Нельзя что ли написать командный файл на пять строк? Его же и дебажить удобнее и писать приятнее. Мода на однострочники?

name_no ★★
()

После запуска, Windows 3.11 с НТФС как х@ем сбрило! Киньте ссылку на прогу, которая на НТФС файлы восстанавливает, а то погиб мой сервер!

ЗЫ: Найду автора, яйцы повыкручиваю.

//SuperAdmin

Deleted
()
Ответ на: комментарий от daemonpnz

почему-то rm на пермишены ругается.

ну потому что надо пускать под рутом, а не под обычным юзером.

name_no ★★
()
Ответ на: комментарий от daemonpnz

> ага, а почему-то rm на пермишены ругается.
Потому что это копипаст из темы 2003-его года

Xenius ★★★★★
() автор топика
Ответ на: комментарий от hired777

Ищет файлы, которые доступны для записи обычным пользователям вне tmp и /home. Как-то так. Можно улучшить, ибо неидеально.

Xenius ★★★★★
() автор топика

Xenius> find `echo /* | sed 's:/home ::;s:/sys ::;s:/proc ::;s:/tmp ::'`

Переделать для наглядности:

find $(find / -maxdepth 1 -type d -not \( -name home -o -name sys -o -name proc -o -name tmp -o -name / \)) 

sdio ★★★★★
()
Ответ на: комментарий от sdio

> Переделать для наглядности
find $(find / -maxdepth 1 -mindepth 1 -type d ! \( -name home -o -name sys -o -name proc -o -name tmp \)) ...
Тогда можно так, иначе find ругается:
find: warning: Unix filenames usually don't contain slashes (though pathnames do). That means that '-name /' will probably evaluate to false all the time on this system. You might find the '-wholename' test more useful, or perhaps '-samefile'. Alternatively, if you are using GNU grep, you could use 'find ... -print0 | grep -FzZ /'.

Xenius ★★★★★
() автор топика
Ответ на: комментарий от sdio

> $1 == «nobody»
Тогда можно весь генератор условия переписать:
`awk -F: '($3>=1000 || $1 == «nobody») {print "-user «$1» -o"}' /etc/passwd`

Xenius ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.