diff --git a/doc/src/sgml/ref/initdb.sgml b/doc/src/sgml/ref/initdb.sgml index 74b994b649..da5c8f5307 100644 --- a/doc/src/sgml/ref/initdb.sgml +++ b/doc/src/sgml/ref/initdb.sgml @@ -136,24 +136,9 @@ PostgreSQL documentation replication connections. - - The default is peer for Unix-domain socket - connections on operating systems that support it, otherwise - md5, and md5 for TCP/IP - connections. - - - - When running initdb on a platform that does not - support peer authentication, either a password must - be provided (see and other options) or a different - authentication method must be chosen, otherwise - initdb will error. - - Do not use trust unless you trust all local users on your - system. + system. trust is the default for ease of installation. diff --git a/doc/src/sgml/runtime.sgml b/doc/src/sgml/runtime.sgml index 305698aa0e..365ec75aad 100644 --- a/doc/src/sgml/runtime.sgml +++ b/doc/src/sgml/runtime.sgml @@ -156,19 +156,24 @@ postgres$ initdb -D /usr/local/pgsql/data - The default client authentication setup is such that users can connect over - the Unix-domain socket to the same database user name as their operating - system user names (on operating systems that support this, which are most - modern Unix-like systems, but not Windows) and otherwise with a password. - To assign a password to the initial database superuser, use one of + However, while the directory contents are secure, the default + client authentication setup allows any local user to connect to the + database and even become the database superuser. If you do not + trust other local users, we recommend you use one of initdb's , - or options. + or options to assign a password to the + database superuser. password of the superuser - This configuration is secure and sufficient to get started. Later, see - for more information about setting - up client authentication. + Also, specify or + so that the default trust authentication + mode is not used; or modify the generated pg_hba.conf + file after running initdb, but + before you start the server for the first time. (Other + reasonable approaches include using peer authentication + or file system permissions to restrict connections. See for more information.) diff --git a/doc/src/sgml/standalone-install.xml b/doc/src/sgml/standalone-install.xml index 749a071061..f584789f9a 100644 --- a/doc/src/sgml/standalone-install.xml +++ b/doc/src/sgml/standalone-install.xml @@ -63,6 +63,15 @@ postgres$ /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data + + + At this point, if you did not use the initdb -A + option, you might want to modify pg_hba.conf to control + local access to the server before you start it. The default is to + trust all local users. + + + The previous initdb step should have told you how to diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c index 4bda023e57..04d77ad700 100644 --- a/src/bin/initdb/initdb.c +++ b/src/bin/initdb/initdb.c @@ -185,6 +185,7 @@ static const char *default_timezone = NULL; "# allows any local user to connect as any PostgreSQL user, including\n" \ "# the database superuser. If you do not trust all your local users,\n" \ "# use another authentication method.\n" +static bool authwarning = false; /* * Centralized knowledge of switches to pass to backend @@ -2390,6 +2391,16 @@ usage(const char *progname) printf(_("\nReport bugs to .\n")); } +static void +check_authmethod_unspecified(const char **authmethod) +{ + if (*authmethod == NULL) + { + authwarning = true; + *authmethod = "trust"; + } +} + static void check_authmethod_valid(const char *authmethod, const char *const *valid_methods, const char *conntype) { @@ -3237,16 +3248,8 @@ main(int argc, char *argv[]) exit(1); } - if (authmethodlocal == NULL) - { -#ifdef HAVE_AUTH_PEER - authmethodlocal = "peer"; -#else - authmethodlocal = "md5"; -#endif - } - if (authmethodhost == NULL) - authmethodhost = "md5"; + check_authmethod_unspecified(&authmethodlocal); + check_authmethod_unspecified(&authmethodhost); check_authmethod_valid(authmethodlocal, auth_methods_local, "local"); check_authmethod_valid(authmethodhost, auth_methods_host, "host"); @@ -3329,6 +3332,14 @@ main(int argc, char *argv[]) else printf(_("\nSync to disk skipped.\nThe data directory might become corrupt if the operating system crashes.\n")); + if (authwarning) + { + printf("\n"); + pg_log_warning("enabling \"trust\" authentication for local connections"); + fprintf(stderr, _("You can change this by editing pg_hba.conf or using the option -A, or\n" + "--auth-local and --auth-host, the next time you run initdb.\n")); + } + /* * Build up a shell command to tell the user how to start the server */ diff --git a/src/include/port.h b/src/include/port.h index 2536a2586c..b5c03d912b 100644 --- a/src/include/port.h +++ b/src/include/port.h @@ -361,11 +361,6 @@ extern int fls(int mask); extern int getpeereid(int sock, uid_t *uid, gid_t *gid); #endif -/* must match src/port/getpeereid.c */ -#if defined(HAVE_GETPEEREID) || defined(SO_PEERCRED) || defined(LOCAL_PEERCRED) || defined(HAVE_GETPEERUCRED) -#define HAVE_AUTH_PEER 1 -#endif - #ifndef HAVE_ISINF extern int isinf(double x); #else diff --git a/src/test/regress/pg_regress.c b/src/test/regress/pg_regress.c index 4e524b22ca..117a9544ea 100644 --- a/src/test/regress/pg_regress.c +++ b/src/test/regress/pg_regress.c @@ -2302,7 +2302,7 @@ regression_main(int argc, char *argv[], init_function ifunc, test_function tfunc /* initdb */ header(_("initializing database system")); snprintf(buf, sizeof(buf), - "\"%s%sinitdb\" -D \"%s/data\" -A trust --no-clean --no-sync%s%s > \"%s/log/initdb.log\" 2>&1", + "\"%s%sinitdb\" -D \"%s/data\" --no-clean --no-sync%s%s > \"%s/log/initdb.log\" 2>&1", bindir ? bindir : "", bindir ? "/" : "", temp_instance,