Pourquoi un shell est-il donné à l'utilisateur pour PostgreSQL?

10

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

Puis-je remplacer cela /bin/bashpar /bin/false?

Smile.Hunter
la source
1
@Jorge Castro ma question est, pourquoi y a-t-il un shell pour l'utilisateur de PostgreSQL, pas pourquoi il y a un utilisateur pour PostgreSQL .. parce que j'ai vu que d'autres utilisateurs comme MySQL n'en avaient pas besoin.
Smile.Hunter

Réponses:

4

Il y a un shell car nous utilisons PostgreSQL depuis la ligne de commande en tant qu'utilisateur PostgreSQL.


la source
Ensuite, nous n'avons pas utilisé MySQL en tant qu'utilisateur MySQL, n'est-ce pas? Je suppose que cet utilisateur a été utilisé pour le système en interne, cela signifie que je ne devrais pas le supprimer /bin/bashpour que mon PostgreSQL fonctionne correctement .. Merci quand même!
Smile.Hunter
2

Postgres s'exécute sous un compte utilisateur de système d'exploitation spécial pour des raisons de sécurité. Ce compte est créé sur votre machine lors de l'exécution du programme d'installation, et à moins qu'il ne soit remplacé sur la ligne de commande, il sera appelé "postgres".

Sur les systèmes d'exploitation de type Unix tels que Linux et Mac OS X, le compte est configuré sans mot de passe et les utilisateurs n'ont généralement plus à s'en soucier. Source .

De plus, il n'est pas recommandé de modifier manuellement le fichier passwd. Vous devez utiliser la commande:

sudo passwd postgres
ThiagoPonte
la source
2
Merci mais je veux savoir pourquoi il y a un "shell bash" pour un utilisateur pour PostgreSQL, j'ai appris que cette permission faisait que quelqu'un se connectait à postgresql et puis avait en quelque sorte un shell bash qui n'a pas de sens pour un utilisateur de service que je voudrais jamais connecté à. (Je vois un autre utilisateur pour un autre service comme apache2, mysql, ils n'avaient pas besoin de shell bash pour leurs utilisateurs)
Smile.Hunter
1

Si un administrateur de serveur utilise sudoet ne fait pas attention à quel environnement et et umask cela en résulte, travailler sur la base de données peut finir par créer des fichiers dans des emplacements non voulus ou avec des autorisations non voulues.

L'attribution d'un shell à l'utilisateur permet aux administrateurs de se connecter en tant que postgres et d'effectuer le travail sur ce shell d'utilisateurs. Se représenter sudocomme la source de messages d'erreur de serveur non spécifiques serait trop compliqué .

Si vous n'en avez pas besoin et êtes certain que vous n'appellerez jamais les binaires postgres d'une manière sujette aux erreurs, vous pouvez supprimer le shell en toute sécurité:

usermod --shell /bin/false postgres

Gardez à l'esprit que, beign capable de devenir root, vous pouvez toujours devenir n'importe qui, y compris les utilisateurs sans coquilles valides:

su --shell /bin/bash postgres

Source faisant autorité:

Parfois, vous souhaitez vous connecter en tant qu'utilisateur pour pouvoir effectuer certains types d'administration ou de correctifs spéciaux. Par exemple, si vous avez besoin d'exécuter pg_resetxlog, vous souhaiterez probablement être connecté en tant que postgres, à moins que vous ne soyez très sûr que vos invocations su ou sudo sont correctes et ne gâchent pas les autorisations du répertoire de la base de données de manière étrange. - Peter Eisentraut, développeur PostgreSQL

anx
la source
Cette réponse est meilleure que la réponse acceptée. Il n'y a pas besoin d'un shell de connexion pour pouvoir exécuter des commandes en tant qu'un certain utilisateur (pour cela, sudo le ferait). De nombreux sous-systèmes Ubuntu ont / bin / false ou / usr / sbin / nologin comme shell de connexion et ils fonctionnent très bien, sans ouvrir de nouvelles façons d'accéder à distance à un système.
arielf