« Отговор #17 -: Aug 10, 2011, 00:10 »
Не бих посъветвал никой да прави suid wrapper-и, да ползва sudo, да пише демони с root-ски привилегии, които изпълняват потребителски вход и тем подобни неща освен в краен случай и почти винаги има алтернативи. Изпълнението на какъвто и да било потребителски вход, независимо колко орязано и безопасно изглежда и колко добре се филтрират лоши неща, винаги има проблеми. Мога да дам много примери, съвсем реални. В повечето случаи има начин да се реши проблема без да се минава през "грубия" механизъм. Ако е за писане на файл където ти трябват superuser-ски позволения, това се решава с acl-и. Ако ти трябват raw сокети, това се решава с chcap. И така нататък.
На човек обикновено му е трудно да си представи как дребни неща могат да доведат до големи проблеми. Прекалено голяма част от софтуера въобще не е правен с идеята да работи с административни привилегии. Мога да дам един прост пример отпреди години - tool-че, което е доста полезно, защото ти позволява да пращаш доста свободно-нагласени IP пакети (примерно custom-ски protocol type, TTL, съответно флагове разни ако е TCP и т.н.). Доста забавен инструмент за тестване на разни firewall-и. Съответно за да може да изпраща такива неща, трябва да отвори raw сокет, а за да го направи непривилегирован потребител, бяха решили да го suid-нат. Всичко е много хубаво, но хората които го бяха писали бяха оставили възможността да се изпише резултата в текстов лог файл. При което не се бяха сетили че като е suid-нато, можеш да мажеш по всякакви файлове, създавайки symlink-ове към тях. С добре приготвени параметри спокойно замазвах и /etc/passwd и /etc/shadow и си създавах собствен root-ски потребител с моя си парола. Доста тъпо.