Dlaczego użytkownik otrzymuje powłokę dla PostgreSQL?

11

cat /etc/passwd |grep postgre

postgres:x:115:127:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash

apt-cache show postgresql

Package: postgresql
Priority: optional
Section: database
Installed-Size: 65
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian PostgreSQL Maintainers <pkg-postgresql-public@lists.alioth.debian.org>
Architecture: all
Source: postgresql-common (136)
Version: 9.1+136
Depends: postgresql-9.1
Filename: pool/main/p/postgresql-common/postgresql_9.1+136_all.deb
Size: 5468
MD5sum: 34f5a1373ad5cd0b6f5aa3e7af06c9e7
SHA1: 6f271758bd51c23614b12fd63fb711ecfa43e9e5
SHA256: e8921a22b560e81f57a2a00001e31ba1036f67a8e7f151bf8f977b4919fc559a

Czy mogę wymienić to /bin/bashz /bin/false?

Smile.Hunter
źródło
1
@Jorge Castro moje pytanie brzmi: dlaczego istnieje powłoka dla użytkownika PostgreSQL, a nie dlaczego istnieje użytkownik PostgreSQL .. ponieważ widziałem, że inni użytkownicy, tacy jak MySQL, nie wymagali tego.
Smile.Hunter

Odpowiedzi:

4

Istnieje powłoka, ponieważ używamy PostgreSQL z wiersza poleceń jako użytkownik PostgreSQL.


źródło
Zatem nie używaliśmy MySQL jako użytkownika MySQL, prawda? Myślę, że ten użytkownik był używany do wewnętrznego systemu. Oznacza to, że nie powinienem tego usuwać, /bin/bashaby mój PostgreSQL działał poprawnie. W każdym razie dziękuję!
Smile.Hunter
2

Ze względów bezpieczeństwa Postgres działa na specjalnym koncie użytkownika systemu operacyjnego. To konto jest tworzone na komputerze podczas działania instalatora i, o ile nie zostanie zastąpione w wierszu poleceń, będzie nazywane „postgres”.

W systemach operacyjnych uniksopodobnych, takich jak Linux i Mac OS X, konto jest konfigurowane bez hasła i użytkownicy zwykle nie muszą się już o to martwić. Źródło .

Również nie jest dobrą praktyką ręczna edycja pliku passwd. Powinieneś użyć polecenia:

sudo passwd postgres
ThiagoPonte
źródło
2
Dzięki, ale chcę wiedzieć, dlaczego istnieje dla użytkownika PostgreSQL „powłoka bash”. Dowiedziałam się, że to uprawnienie powoduje, że ktoś zalogował się na postgresql, a potem jakoś dostał powłokę bash, co nie ma sensu dla użytkownika usługi, który nigdy się nie logowałem. (Widzę innego użytkownika dla innych usług, takich jak apache2, mysql, nie wymagali powłoki bash dla swoich użytkowników)
Smile.Hunter 27.12.12
2

Jeśli administrator serwera używa sudoi nie jest ostrożny co do tego, jakie to środowisko, i umaskuje to, praca nad bazą danych może zakończyć się tworzeniem plików w niezamierzonych lokalizacjach lub z niezamierzonymi uprawnieniami.

Przypisanie powłoki użytkownikowi umożliwia administratorom zalogowanie się jako postgres i pracę nad powłoką tego użytkownika. Ustalenie, sudoże źródłem są niespecyficzne komunikaty o błędach serwera, byłoby zbyt wielkim problemem.

Jeśli nie potrzebujesz tego i masz pewność, że nigdy nie wywołasz plików binarnych postgres w tak podatny na błędy sposób, możesz bezpiecznie usunąć powłokę:

usermod --shell /bin/false postgres

Pamiętaj, że jeśli będziesz mógł zostać rootem, nadal możesz stać się każdym, w tym użytkownikami bez ważnych powłok:

su --shell /bin/bash postgres

Autorytatywne źródło:

Czasami chcesz się zalogować jako ten użytkownik, aby móc wykonywać niektóre rodzaje specjalnych czynności administracyjnych lub poprawek. Na przykład, jeśli kiedykolwiek chcesz uruchomić pg_resetxlog, prawdopodobnie chcesz być zalogowany jako postgres, chyba że masz pewność, że twoje wywołania su lub sudo są poprawne i nie psują uprawnień katalogu bazy danych w dziwny sposób. - Peter Eisentraut, twórca PostgreSQL

anx
źródło
Ta odpowiedź jest lepsza niż odpowiedź zaakceptowana. Nie ma potrzeby, aby powłoka logowania mogła uruchamiać polecenia jako określony użytkownik (w takim przypadku wystarczy sudo). Wiele podsystemów Ubuntu ma / bin / false lub / usr / sbin / nologin jako powłokę logowania i działają one dobrze, nie otwierając nowych sposobów zdalnego dostępu do systemu.
arielf