Skip to content

Commit f43f9bd

Browse files
author
Kristan Kenney
committed
Enable enforcement of RESTRICTED_ADMIN
1 parent 241cb06 commit f43f9bd

File tree

11 files changed

+36
-28
lines changed

11 files changed

+36
-28
lines changed

func/upgrade.sh

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,13 @@ upgrade_health_check() {
148148
if [ -z "$ENFORCE_SUBDOMAIN_OWNERSHIP" ]; then
149149
echo "[ ! ] Adding missing variable to hestia.conf: ENFORCE_SUBDOMAIN_OWNERSHIP ('yes')"
150150
$BIN/v-change-sys-config-value "ENFORCE_SUBDOMAIN_OWNERSHIP" "yes"
151-
fi
151+
fi
152+
153+
# Enable read-only access to the System Administrator account for other administrators
154+
if [ -z "$RESTRICTED_ADMIN" ]; then
155+
echo "[ ! ] Adding missing variable to hestia.conf: RESTRICTED_ADMIN ('yes')"
156+
$BIN/v-change-sys-config-value 'RESTRICTED_ADMIN' 'yes'
157+
fi
152158

153159
# Debug Mode
154160
if [ -z "$DEBUG_MODE" ]; then

install/hst-install-debian.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1677,6 +1677,7 @@ check_result $? "can't create admin user"
16771677
$HESTIA/bin/v-change-user-shell admin nologin
16781678
$HESTIA/bin/v-change-user-role admin admin
16791679
$HESTIA/bin/v-change-user-language admin $lang
1680+
$HESTIA/bin/v-change-sys-config-value 'RESTRICTED_ADMIN' 'yes'
16801681

16811682
# Roundcube permissions fix
16821683
if [ "$exim" = 'yes' ] && [ "$mysql" = 'yes' ]; then

install/hst-install-ubuntu.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1703,6 +1703,7 @@ check_result $? "can't create admin user"
17031703
$HESTIA/bin/v-change-user-shell admin nologin
17041704
$HESTIA/bin/v-change-user-role admin admin
17051705
$HESTIA/bin/v-change-user-language admin $lang
1706+
$HESTIA/bin/v-change-sys-config-value 'RESTRICTED_ADMIN' 'yes'
17061707

17071708
# Configuring system IPs
17081709
$HESTIA/bin/v-update-sys-ip > /dev/null 2>&1

web/templates/admin/list_backup.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<div class="l-center">
22
<div class="l-sort clearfix noselect">
33
<div class="l-unit-toolbar__buttonstrip">
4-
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin')) {?>
4+
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin') && ($_SESSION['RESTRICTED_ADMIN'] === 'yes')) {?>
55
<!-- Hide item creation button when impersonating 'admin' account -->
66
<? } else { ?>
77
<a href="/schedule/backup/?token=<?=$_SESSION['token']?>" class="ui-button cancel" dir="ltr"><i class="fas fa-plus-circle status-icon green"></i><?=_('Create Backup')?></a>
@@ -18,7 +18,7 @@
1818
<button type="submit" class="l-sort-toolbar__filter-apply" onclick="return doSearch('/search/')" value="" title="<?=_('Search')?>"><i class="fas fa-search"></i></button>
1919
</form>
2020
</td>
21-
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin')) {?>
21+
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin') && ($_SESSION['RESTRICTED_ADMIN'] === 'yes')) {?>
2222
<!-- Hide bulk actions for domain items when impersonating 'admin' account-->
2323
<? } else { ?>
2424
<td>
@@ -83,7 +83,7 @@
8383
<input id="check<?php echo $i ?>" class="ch-toggle" type="checkbox" title="<?=_('Select')?>" name="backup[]" value="<?php echo $key ?>">
8484
</div>
8585
<div class="clearfix l-unit__stat-col--left wide-3 truncate">
86-
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin')) {?>
86+
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin') && ($_SESSION['RESTRICTED_ADMIN'] === 'yes')) {?>
8787
<b><?=$key?></b>
8888
<? } else { ?>
8989
<b><a href="/list/backup/?backup=<?=$key?>&token=<?=$_SESSION['token']?>" title="<?=_('restore')?>"><?=$key?></a></b>
@@ -93,7 +93,7 @@
9393
<div class="clearfix l-unit__stat-col--left compact-4 text-right">
9494
<div class="l-unit-toolbar__col l-unit-toolbar__col--right noselect">
9595
<div class="actions-panel clearfix">
96-
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin')) {?>
96+
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin') && ($_SESSION['RESTRICTED_ADMIN'] === 'yes')) {?>
9797
<!-- Restrict ability to restore or delete backups when impersonating 'admin' account -->
9898
&nbsp;
9999
<? } else { ?>

web/templates/admin/list_cron.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<div class="l-center">
22
<div class="l-sort clearfix noselect">
33
<div class="l-unit-toolbar__buttonstrip">
4-
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin')) {?>
4+
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin') && ($_SESSION['RESTRICTED_ADMIN'] === 'yes')) {?>
55
<!-- Hide item creation button when impersonating 'admin' account -->
66
<? } else { ?>
77
<a href="/add/cron/" id="btn-create" class="ui-button cancel" dir="ltr"><i class="fas fa-plus-circle status-icon green"></i><?=_('Add Cron Job')?></a>
@@ -29,7 +29,7 @@
2929
<button type="submit" class="l-sort-toolbar__filter-apply" onclick="return doSearch('/search/')" value="" title="<?=_('Search')?>"><i class="fas fa-search"></i></button>
3030
</form>
3131
</td>
32-
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin')) {?>
32+
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin') && ($_SESSION['RESTRICTED_ADMIN'] === 'yes')) {?>
3333
<!-- Hide bulk actions for domain items when impersonating 'admin' account-->
3434
<? } else { ?>
3535
<td class="">
@@ -95,7 +95,7 @@
9595
<input id="check<?php echo $i ?>" class="ch-toggle" type="checkbox" title="<?=_('Select')?>" name="job[]" value="<?php echo $key ?>">
9696
</div>
9797
<div class="clearfix l-unit__stat-col--left wide-5 truncate">
98-
<? if (($_SESSION['userContext'] === 'admin') && (isset($_SESSION['look'])) && ($_SESSION['look'] === 'admin') || ($data[$key]['SUSPENDED'] == 'yes')) {?>
98+
<? if (($_SESSION['userContext'] === 'admin') && (isset($_SESSION['look'])) && ($_SESSION['look'] === 'admin') && ($_SESSION['RESTRICTED_ADMIN'] === 'yes') || ($data[$key]['SUSPENDED'] == 'yes')) {?>
9999
<b><?=htmlspecialchars($data[$key]['CMD'], ENT_NOQUOTES)?></b>
100100
<? } else { ?>
101101
<b><a href="/edit/cron/?job=<?=$data[$key]['JOB']?>&token=<?=$_SESSION['token']?>" title="<?=_('Editing Cron Job')?>: <?=htmlspecialchars($data[$key]['CMD'], ENT_NOQUOTES)?>"><?=htmlspecialchars($data[$key]['CMD'], ENT_NOQUOTES)?></a></b>
@@ -105,7 +105,7 @@
105105
<div class="clearfix l-unit__stat-col--left compact-2 text-right">
106106
<div class="l-unit-toolbar__col l-unit-toolbar__col--right noselect">
107107
<div class="actions-panel clearfix">
108-
<? if (($_SESSION['userContext'] === 'admin') && (isset($_SESSION['look'])) && ($_SESSION['look'] === 'admin')) {?>
108+
<? if (($_SESSION['userContext'] === 'admin') && (isset($_SESSION['look'])) && ($_SESSION['look'] === 'admin') && ($_SESSION['RESTRICTED_ADMIN'] === 'yes')) {?>
109109
<!-- Restrict other administrators from editing, deleting, or suspending 'admin' user cron jobs -->
110110
&nbsp;
111111
<? } else { ?>

web/templates/admin/list_db.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<div class="l-center">
1515
<div class="l-sort clearfix noselect">
1616
<div class="l-unit-toolbar__buttonstrip">
17-
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin')) {?>
17+
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin') && ($_SESSION['RESTRICTED_ADMIN'] === 'yes')) {?>
1818
<!-- Hide item creation button when impersonating 'admin' account -->
1919
<? } else {?>
2020
<a href="/add/db/" id="btn-create" class="ui-button cancel" dir="ltr"><i class="fas fa-plus-circle status-icon green"></i><?=_('Add Database')?></a>
@@ -122,7 +122,7 @@
122122
<input id="check<?php echo $i ?>" class="ch-toggle" type="checkbox" title="<?=_('Select')?>" name="database[]" value="<?php echo $key ?>">
123123
</div>
124124
<div class="clearfix l-unit__stat-col--left wide-3 truncate">
125-
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin') || ($data[$key]['SUSPENDED'] == 'yes')) {?>
125+
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin') && ($_SESSION['RESTRICTED_ADMIN'] === 'yes') || ($data[$key]['SUSPENDED'] == 'yes')) {?>
126126
<b><?=$key?></b>
127127
<? } else { ?>
128128
<b><a href="/edit/db/?database=<?=$key?>&token=<?=$_SESSION['token']?>" title="<?=_('Editing Database')?>: <?=$key?>"><?=$key?></a></b>
@@ -132,7 +132,7 @@
132132
<div class="clearfix l-unit__stat-col--left text-right compact-3">
133133
<div class="l-unit-toolbar__col l-unit-toolbar__col--right noselect">
134134
<div class="actions-panel clearfix">
135-
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin')) {?>
135+
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin') && ($_SESSION['RESTRICTED_ADMIN'] === 'yes')) {?>
136136
<!-- Restrict the ability to edit, delete, or suspend domain items when impersonating 'admin' user -->
137137
&nbsp;
138138
<? } else { ?>

web/templates/admin/list_dns.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<div class="l-center">
22
<div class="l-sort clearfix noselect">
33
<div class="l-unit-toolbar__buttonstrip">
4-
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin')) {?>
4+
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin') && ($_SESSION['RESTRICTED_ADMIN'] === 'yes')) {?>
55
<!-- Hide item creation button when impersonating 'admin' account -->
66
<? } else {?>
77
<a href="/add/dns/" id="btn-create" class="ui-button cancel" dir="ltr"><i class="fas fa-plus-circle status-icon green"></i><?=_('Add DNS Domain')?></a>
@@ -100,7 +100,7 @@
100100
<div class="clearfix l-unit__stat-col--left text-right">
101101
<div class="l-unit-toolbar__col l-unit-toolbar__col--right noselect">
102102
<div class="actions-panel clearfix">
103-
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin')) {?>
103+
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin') && ($_SESSION['RESTRICTED_ADMIN'] === 'yes')) {?>
104104
<!-- Restrict administrators from editing domain items when impersonating the 'admin' user -->
105105
&nbsp;
106106
<? } else { ?>

web/templates/admin/list_dns_rec.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<div class="l-sort clearfix noselect">
33
<div class="l-unit-toolbar__buttonstrip">
44
<a class="ui-button cancel" dir="ltr" id="btn-back" href="/list/dns/"><i class="fas fa-arrow-left status-icon blue"></i><?=_('Back')?></a>
5-
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin')) {?>
5+
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin') && ($_SESSION['RESTRICTED_ADMIN'] === 'yes')) {?>
66
<!-- Hide item creation button when impersonating 'admin' account -->
77
<? } else { ?>
88
<a href="/add/dns/?domain=<?=htmlentities($_GET['domain'])?>" id="btn-create" class="ui-button cancel" dir="ltr"><i class="fas fa-plus-circle status-icon green"></i> <?=_('Add Record')?></a>
@@ -19,7 +19,7 @@
1919
<button type="submit" class="l-sort-toolbar__filter-apply" onclick="return doSearch('/search/')" value="" title="<?=_('Search')?>"><i class="fas fa-search"></i></button>
2020
</form>
2121
</td>
22-
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin')) {?>
22+
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin') && ($_SESSION['RESTRICTED_ADMIN'] === 'yes')) {?>
2323
<!-- Hide bulk actions for domain items when impersonating 'admin' account-->
2424
<? } else { ?>
2525
<td>
@@ -73,7 +73,7 @@
7373
<input id="check<?=$data[$key]['ID']?>" class="ch-toggle" type="checkbox" title="<?=_('Select')?>" name="record[]" value="<?=$data[$key]['ID']?>">
7474
</div>
7575
<div class="clearfix l-unit__stat-col--left small truncate">
76-
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin') || ($data[$key]['SUSPENDED'] == 'yes')) {?>
76+
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin') && ($_SESSION['RESTRICTED_ADMIN'] === 'yes') || ($data[$key]['SUSPENDED'] == 'yes')) {?>
7777
<b><? echo substr($data[$key]['RECORD'], 0, 12); if(strlen($data[$key]['RECORD']) > 12 ) echo '...'; ?></b></div>
7878
<? } else { ?>
7979
<b><a href="/edit/dns/?domain=<?=htmlspecialchars($_GET['domain'])?>&record_id=<?=$data[$key]['ID']?>&token=<?=$_SESSION['token']?>" title="<?=_('Editing DNS Record').': '.htmlspecialchars($data[$key]['RECORD'])?>"><? echo substr($data[$key]['RECORD'], 0, 12); if(strlen($data[$key]['RECORD']) > 12 ) echo '...'; ?></a></b></div>
@@ -82,7 +82,7 @@
8282
<div class="clearfix l-unit__stat-col--left super-compact text-right">
8383
<div class="l-unit-toolbar__col l-unit-toolbar__col--right noselect">
8484
<div class="actions-panel clearfix">
85-
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin')) {?>
85+
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin') && ($_SESSION['RESTRICTED_ADMIN'] === 'yes')) {?>
8686
<!-- Restrict editing of DNS records when impersonating 'admin' account -->
8787
&nbsp;
8888
<? } else { ?>

web/templates/admin/list_mail.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<div class="l-center">
22
<div class="l-sort clearfix noselect">
33
<div class="l-unit-toolbar__buttonstrip">
4-
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin')) {?>
4+
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin') && ($_SESSION['RESTRICTED_ADMIN'] === 'yes')) {?>
55
<!-- Hide item creation button when impersonating 'admin' account -->
66
<? } else {?>
77
<a href="/add/mail/" id="btn-create" class="ui-button cancel" dir="ltr"><i class="fas fa-plus-circle status-icon green"></i><?=_('Add Mail Domain')?></a>
@@ -26,7 +26,7 @@
2626
<button type="submit" class="l-sort-toolbar__filter-apply" onclick="return doSearch('/search/')" value="" title="<?=_('Search')?>"><i class="fas fa-search"></i></button>
2727
</form>
2828
</td>
29-
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin')) {?>
29+
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin') && ($_SESSION['RESTRICTED_ADMIN'] === 'yes')) {?>
3030
<!-- Hide bulk actions for domain items when impersonating 'admin' account-->
3131
<? } else { ?>
3232
<td>
@@ -107,7 +107,7 @@
107107
<div class="l-unit-toolbar__col l-unit-toolbar__col--right noselect">
108108
<div class="actions-panel clearfix">
109109

110-
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin')) {?>
110+
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin') && ($_SESSION['RESTRICTED_ADMIN'] === 'yes')) {?>
111111
<!-- Restrict ability to edit, delete, or suspend domain items when impersonating 'admin' account -->
112112
<div class="actions-panel__col actions-panel__edit shortcut-l" key-action="href"><a href="?domain=<?=$key?>&token=<?=$_SESSION['token']?>" title="<?=_('mail accounts')?>"><i class="fas fa-users status-icon blue status-icon dim"></i></a></div>
113113
<div class="actions-panel__col actions-panel__edit shortcut-l" key-action="href"><a href="?domain=<?=$key?>&dns=1&token=<?=$_SESSION['token']?>" title="<?=_('DNS records mail')?>"><i class="fas fa-atlas status-icon blue status-icon dim"></i></a></div>

web/templates/admin/list_mail_acc.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<div class="l-sort clearfix noselect">
77
<div class="l-unit-toolbar__buttonstrip">
88
<a class="ui-button cancel" dir="ltr" id="btn-back" href="/list/mail/"><i class="fas fa-arrow-left status-icon blue"></i><?=_('Back')?></a>
9-
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin')) {?>
9+
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin') && ($_SESSION['RESTRICTED_ADMIN'] === 'yes')) {?>
1010
<!-- Hide item creation button when impersonating 'admin' account -->
1111
<? } else { ?>
1212
<a href="/add/mail/?domain=<?=htmlentities($_GET['domain'])?>" id="btn-create" class="ui-button cancel" dir="ltr"><i class="fas fa-plus-circle status-icon green"></i><?=_('Add Mail Account')?></a>
@@ -31,7 +31,7 @@
3131
<button type="submit" class="l-sort-toolbar__filter-apply" onclick="return doSearch('/search/')" value="" title="<?=_('Search')?>"><i class="fas fa-search"></i></button>
3232
</form>
3333
</td>
34-
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin')) {?>
34+
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin') && ($_SESSION['RESTRICTED_ADMIN'] === 'yes')) {?>
3535
<!-- Hide bulk actions for domain items when impersonating 'admin' account-->
3636
<? } else { ?>
3737
<td>
@@ -100,7 +100,7 @@
100100
<input type="hidden" value="<?php echo $_GET['domain'] ?>" name="domain" />
101101
</div>
102102
<div class="clearfix l-unit__stat-col--left wide-3 truncate">
103-
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin') || ($data[$key]['SUSPENDED'] == 'yes')) {?>
103+
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin') && ($_SESSION['RESTRICTED_ADMIN'] === 'yes') || ($data[$key]['SUSPENDED'] == 'yes')) {?>
104104
<b><?=$key."@".$_GET['domain']?></b>
105105
<? } else { ?>
106106
<b><a href="/edit/mail/?domain=<?=htmlspecialchars($_GET['domain'])?>&account=<?=$key?>&token=<?=$_SESSION['token']?>" title="<?=_('Editing Mail Account')?>: <?=$key?>@<?=htmlspecialchars($_GET['domain'])?>"><?=$key."@".$_GET['domain']?></a></b>
@@ -110,7 +110,7 @@
110110
<div class="clearfix l-unit__stat-col--left text-right compact-4">
111111
<div class="l-unit-toolbar__col l-unit-toolbar__col--right noselect">
112112
<div class="actions-panel clearfix">
113-
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin')) {?>
113+
<? if (($_SESSION['userContext'] === 'admin') && ($_SESSION['look'] === 'admin') && ($_SESSION['RESTRICTED_ADMIN'] === 'yes')) {?>
114114
<!-- Restrict the ability to edit, delete, or suspend domain items when impersonating 'admin' account -->
115115
<? if ($data[$key]['SUSPENDED'] == 'no') {?>
116116
<div class="actions-panel__col actions-panel__edit" key-action="href"><a href="http://<?=$v_webmail_alias;?>.<?=htmlspecialchars($_GET['domain'])?>/?_user=<?=$key?>@<?=htmlspecialchars($_GET['domain'])?>" target="_blank" title="<?=_('open webmail')?>"><i class="fas fa-envelope-open-text status-icon maroon status-icon dim"></i></a></div>

0 commit comments

Comments
 (0)