You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
nextcloud-server/occ

44 lines
1.1 KiB

#!/usr/bin/env php
<?php
declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
if (posix_getuid() === 0) {
switchToConfigFileOwner();
}
require_once __DIR__ . '/console.php';
/**
* Attempt to switch process identity to match the config file when run as root.
*
* This is a convenience for the operator to allow `occ` to run without manual
* user switching. It drops primary root privileges but is not a true sandbox.
*
* Note: Best-effort only. Will not change privileges if config file owner has
* no passwd entry. Does not clear environment variables nor supplementary groups.
* Failures are ignored here as downstream checks validate the final UID state.
*/
function switchToConfigFileOwner(): void {
$configPath = __DIR__ . '/config/config.php';
$targetUid = @fileowner($configPath);
if ($targetUid === false) {
return;
}
$ownerInfo = posix_getpwuid($targetUid);
if ($ownerInfo === false) {
return;
}
$targetGid = $ownerInfo['gid'];
posix_setgid($targetGid);
posix_setuid($targetUid);
}