Usuwanie plików z poziomu funkcji plików w systemie - jest to możliwe ?

0

Zastanawiam się, czy wywołując postgres'ową funkcję można usunąć plik znajdujący się na dysku twardym..

Najpierw szukałem informacji o 'powiązaniu' PostgreSQL'a z Bash'em i nic konkretnego nie znalazłem. Ostatecznie natrafiłem na plpython, dzięki któremu można wykonywać kod pythona w funkcjach postgresa.. (przykład znalazłem tutaj: http://anitagraser.com/2010/12/10/plpython-pythonic-trigger-functions-for-postgres/ )

Problem pojawia się w momencie gdy chce usunąć jakiś plik poleceniem os.remove(), ponieważ otrzymuje komunikat o braku dostępu.. Jeżeli dobrze rozumiem, w systemie linux operacje na bazie danych wykonywane są z poziomu użytkownika o nazwie 'postgres'. Można się na niego 'przełączyć' z polecenia su i wtedy dobrze widać, że użytkownik ten praktycznie nie posiada on praw do wykonywania jakichkolwiek operacji..

Chciałem więc nadać użytkownikowi 'postgres' dodatkowe uprawnienia.. Próbowałem już nawet dodawać do grup roota (nie wiem czy na 100% dobrze to zrobiłem..), ale ostateczny efekt jest taki, że nic to nie pomogło.. nadal brakuje uprawnień .. (być może ten 'typ' użytkownika tak ma...)

Podsumowując.. Czy macie jakieś pomysły na rozwiązanie problemu postawionego w tytule wątku ?

0

Ale co ma tytuł wspólnego z tym co chcesz zrobić? Ty chcesz usuwać pliki na dysku z poziomu bazy danych, a tego sie chyba zrobić nie da. Nawet ten python w postgresie pewnie działa w sandboxie żeby tak czasem się nie dało zrobić. Pomyśl co by się działo jakby ktoś jakieś incjection zrobił...

0

To nie jest tak do końca. Generalnie się da w postgresie wywołać zewnętrzny skrypt z uprawnieniami użytkownika postgres i innymi. Tu > http://www.postgresql.org/message-id/[email protected] przykład z wykorzystaniem plperlu, gdzie u oznacza unsafe i pozwala na śmiganie po "świecie zewnętrznym".
W Oraclu też się to da zrobić nawet z wykorzystaniem biedy jaką jest pl/java, ale tu nadal jest kwestia uprawnień.

Ja zadam inne pytanie - co chcesz zrobić?

0

@Shalom , @Koziołek - przeznaczenie tego jest w tym wypadku trochę mało istotne.. Pewnie coś w tym jest, że incjection byłby groźny.. Jednak potrzebuje niejako takie coś przetestować..

@Koziołek - akurat chyba trochę przez przypadek korzystałem z trybu unsafe bo użytałem python3u, gdzie z tego co piszą 'końcowe' u oznacza owy tryb unsafe..

Pokażę może dla zasady kod, który testowałem..

CREATE OR REPLACE FUNCTION remove_file() RETURNS void AS $$
import os, sys
os.remove('/home/user/my_dir/file')
$$
LANGUAGE plpython3u;

Generalnie się da w postgresie wywołać zewnętrzny skrypt z uprawnieniami użytkownika postgres i innymi.

  • być może musiałbym to wrzucić do zewnętrznego pliku, który potem będzie tylko wywoływany z uprawnieniami innego użytkownika tylko za bardzo nie wiem jakby to miało wyglądać..

1 użytkowników online, w tym zalogowanych: 0, gości: 1