> On Apr 20, 2021, at 5:54 AM, Robert Haas <robertmh...@gmail.com> wrote:
> 
> On Tue, Apr 20, 2021 at 1:31 AM Mark Dilger
> <mark.dil...@enterprisedb.com> wrote:
>> I think you are conflating the concept of an operating system adminstrator 
>> with the concept of the database superuser/owner.
> 
> You should conflate those things, because there's no meaningful
> privilege boundary between them:

This discussion started in response to the idea that pg_amcheck needs to be 
moved into contrib, presumably because that's where amcheck lives.  I am 
arguing against the move.

The actual use case I have in mind is "Postgres as a service", where a company 
(Alice) rents space in the cloud and runs postgres databases which can be 
rented out to a tenant (Bob) who is the owner of his database, but not 
privileged on the underlying system in any way.  Bob has enough privileges to 
run CREATE EXTENSION, but is limited to the extensions that Alice has made 
available.  Alice evaluates packages and chooses not to install most of them, 
including amcheck.  Or perhaps Alice chooses not to install any contrib 
modules.  Either way, the location of amcheck in contrib is useful to Alice 
because it makes her choice not to install it very simple.

Bob, however, is connecting to databases provided by Alice, and is not trying 
to limit himself.  He is happy to have the pg_amcheck client installed.  If 
Alice's databases don't allow him to run amcheck, pg_amcheck is not useful 
relative to those databases, but perhaps Bob is also renting database space 
from Charlie and Charlie's databases have amcheck installed.

Now, the question is, "In which postgres package does Bob think pg_amcheck 
should reside?"  It would be strange to say that Bob needs to install the 
postgresql-contrib rpm in order to get the pg_amcheck client.  That rpm is 
mostly a bunch of modules, and may even have a package dependency on 
postgresql-server.  Bob doesn't want either of those.  He just wants the 
clients.



The discussion about using amcheck as a privilege escalation attack was mostly 
to give some background for why Alice might not want to install amcheck.  I 
think it got a bit out of hand, in no small part because I was being imprecise 
about Bob's exact privilege levels.  I was being imprecise about that part 
because my argument wasn't "here's how to leverage amcheck to exploit 
postgres", but rather, "here's what Alice might rationally be concerned about." 
 To run CREATE EXTENSION does not actually require superuser privileges.  It 
depends on the package.  At the moment, you can't load amcheck without 
superuser privileges, but you can load some others, such as intarray:

bob=> create extension amcheck;
2021-04-20 07:40:46.758 PDT [80340] ERROR:  permission denied to create 
extension "amcheck"
2021-04-20 07:40:46.758 PDT [80340] HINT:  Must be superuser to create this 
extension.
2021-04-20 07:40:46.758 PDT [80340] STATEMENT:  create extension amcheck;
ERROR:  permission denied to create extension "amcheck"
HINT:  Must be superuser to create this extension.
bob=> create extension intarray;
CREATE EXTENSION
bob=> 

Alice might prefer to avoid installing amcheck altogether, not wanting to have 
to evaluate on each upgrade whether the privileges necessary to load amcheck 
have changed.

—
Mark Dilger
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company







Reply via email to