Security audit 2026-10-17, finding A2, stage 0 (the owner, 2026-10-17: "Выполняй план после аудита"). A stolen global session could set its own password on the user form and so pass backup-reauth, or add a second global administrator. The user form gets "Your account password" (autocomplete current-password) as the last field of box 01, with help that says it is yours, not the edited user's, and when it is asked: adding a user, changing a password, an e-mail or a role. Not required in the markup on the edit form - the server asks only for those changes. The delete page gets the same field, required, before its buttons. Help's Users topic says all of it. check.py: 0 violations; outlines unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
56 lines
4.8 KiB
HTML
56 lines
4.8 KiB
HTML
<!-- title: acme-ops · Users | section: server | page: users -->
|
|
<div class="sp-head">
|
|
<div class="sp-grow">
|
|
<p class="sp-kicker"><a href="users.html">Users</a> /</p>
|
|
<h1 class="title is-3">acme-ops</h1>
|
|
</div>
|
|
<a class="button is-danger is-light" href="user-delete.html"><i class="ti ti-trash"></i>Delete user</a>
|
|
</div>
|
|
|
|
<form class="sp-form" method="post" action="users.html">
|
|
<div class="columns">
|
|
<div class="column is-6">
|
|
<div class="box">
|
|
<div class="sp-box-head"><span class="sp-no">01</span><h2>Account</h2><a class="sp-help" href="help.html#users" title="Roles and domain assignments"><i class="ti ti-help-circle"></i></a></div>
|
|
<div class="sp-box-body">
|
|
<div class="field"><label class="label" for="username">Username</label><div class="control"><input class="input" id="username" name="username" value="acme-ops" autocomplete="username" spellcheck="false" required></div></div>
|
|
<div class="field"><label class="label" for="email">E-mail <span class="tag is-success is-light">confirmed</span></label><div class="control"><input class="input" id="email" name="email" type="email" value="ops@acme.io" autocomplete="off"></div>
|
|
<p class="help">The user's own address. They can change it under Account. A new one is sent a link to confirm it; until it is confirmed no reset link goes to it.</p></div>
|
|
<div class="field"><label class="label" for="password">Password</label><div class="control"><input class="input" id="password" name="password" type="password" autocomplete="new-password"></div>
|
|
<p class="help">Leave empty to keep the current one.</p></div>
|
|
<div class="field"><label class="label" for="role">Role</label>
|
|
<div class="control"><div class="select is-fullwidth"><select id="role" name="role"><option selected>Domain — the domains assigned below</option><option>Global — the whole server</option></select></div></div>
|
|
<p class="help">Everyone here is an administrator; the role is the reach. <em>Global</em> also sees Server and is the only one who adds or deletes domains. The only global user cannot be changed to <em>domain</em> or deleted.</p></div>
|
|
<div class="field"><label class="label" for="acpw">Your account password</label><div class="control"><input class="input" id="acpw" name="account_password" type="password" autocomplete="current-password"></div>
|
|
<p class="help">Yours, the one you sign in with, not this user's. Asked when you add a user, or change a password, an e-mail or a role here: a session left open must not be enough to hand out an account.</p></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="column is-6">
|
|
<div class="box">
|
|
<div class="sp-box-head"><span class="sp-no">02</span><h2>Outbound domains</h2><div class="sp-end">DNS records, applications, log</div></div>
|
|
<div class="sp-box-body">
|
|
<div class="field"><label class="checkbox"><input type="checkbox" name="all_domains" checked> <strong>All outbound domains</strong>, including ones added later</label></div>
|
|
<div class="field"><label class="checkbox"><input type="checkbox" name="domain_ids" checked disabled> example.org</label></div>
|
|
<div class="field"><label class="checkbox"><input type="checkbox" name="domain_ids" checked disabled> shop.example.org</label></div>
|
|
<div class="field"><label class="checkbox"><input type="checkbox" name="domain_ids" checked disabled> notify.acme.io</label></div>
|
|
<p class="help">With <em>All</em> ticked the single domains are ignored.</p>
|
|
</div>
|
|
</div>
|
|
<div class="box">
|
|
<div class="sp-box-head"><span class="sp-no">03</span><h2>Inbound domains</h2><div class="sp-end">Upstream, recipients, log</div></div>
|
|
<div class="sp-box-body">
|
|
<div class="field"><label class="checkbox"><input type="checkbox" name="all_inbound_domains"> <strong>All inbound domains</strong>, including ones added later</label></div>
|
|
<div class="field"><label class="checkbox"><input type="checkbox" name="inbound_domain_ids"> lists.example.org</label></div>
|
|
<div class="field"><label class="checkbox"><input type="checkbox" name="inbound_domain_ids" checked> acme.io</label></div>
|
|
<p class="help">Granted separately from outbound: the same name on both lists is two assignments. The <em>domain</em> role needs at least one domain, or <em>All</em>, on either list.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="buttons">
|
|
<button type="submit" class="button is-primary">Save user</button>
|
|
<a class="button is-text" href="users.html">Cancel</a>
|
|
</div>
|
|
</form>
|