Czy można wyłączyć Requtty?

39

Próbuję skonfigurować skrypt wdrażania przy użyciu Capistrano.cap deploy:setup Skrypt krokowy łączy się z moim serwerem i próbuję uruchomić polecenia tworzące katalogi. Następnie widzę błąd:msudo: sorry, you must have a tty to run sudo

Istnieje sugerowane rozwiązanie, aby wyłączyć wymaganie na moim serwerze. https://unix.stackexchange.com/a/49078/26271

Zastanawiam się, czy to jest bezpieczne?

deweloper
źródło

Odpowiedzi:

40

Posiadanie requirettyna serwerze ma bardzo ograniczoną przewagę bezpieczeństwa . Jeśli zostanie wykorzystany jakiś kod inny niż root (na przykład skrypt PHP), requirettyopcja oznacza, że ​​kod exploita nie będzie w stanie bezpośrednio zaktualizować swoich uprawnień poprzez uruchomienie sudo.

Może istnieć inny sposób, aby atakujący mógł uzyskać root, i oczywiście atakujący nadal będzie mógł zniszczyć twoją witrynę, ale nie pozwolenie atakującemu na rootowanie oznacza, że ​​inne usługi działające jako różni użytkownicy będą działały normalnie, a atakujący wygrał ” być w stanie usunąć dzienniki systemowe. Jeśli żadna z twoich sudoreguł nie robi nic niebezpiecznego, jak tworzenie katalogu , nie stanowi to problemu.

Co więcej - i bardziej przeklęty za requiretty- nie jest potrzebny żaden przywilej, aby utworzyć tty, np. Z oczekiwaniem . Równie dobrze możesz się wyłączyć requiretty: sam w sobie nie zapewnia korzyści bezpieczeństwa. Zapewnia niewielką przewagę nad kontrolą podczas wykonywania przez użytkowników (ponieważ dzienniki dają lepszy obraz tego, kto wywołał sudoi skąd pochodzą), ale nie w przypadku wykonania z zadania w tle.

Gilles „SO- przestań być zły”
źródło
1
Czy masz na myśli to, że jeśli użytkownik może uruchomić expect(lub screenna przykład), to requirettyjest bezużyteczny z punktu widzenia bezpieczeństwa? (Nie do końca zrozumiałem, co miałeś na myśli przez „przeklęcie” w tym zdaniu)
Georges Dupéron,
@ GeorgesDupéron Tak, to wszystko. Ponieważ każdy może utworzyć tty, ta requirettyopcja nie uniemożliwia nikomu korzystania z sudo.
Gilles „SO- przestań być zły”
3
requirettymoże zapobiec wyciekowi hasła przez użytkownika w postaci tekstu jawnego, jeśli wykonuje polecenie sudo, które wymaga hasła przez ssh. Ma to zmusić użytkownika do wywołania ssh -t.
Chris Betti
1
@Chris Betti - dlaczego to dobrze, aby wymusić ssh -t ...?
Rop
W tym czasie myślałem, że w tym przypadku, jeśli wykonujesz zdalne polecenie sudo, które monituje o hasło, lepiej jest użyć programu askpass na komputerze zdalnym niż wpisać hasło w postaci zwykłego tekstu za pośrednictwem konsoli. Szczerze mówiąc, nie mam pojęcia, czy zapewnia to zwiększone bezpieczeństwo, oprócz tego, że może zapobiec sytuacji, w której hasło jest wyświetlane na ekranie podczas pisania. Myślę, że myślałem, że program askpass nie zostałby wywołany bez tty lub pseudo-tty.
Chris Betti,