<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Sudo on Шлакоблог</title><link>https://vodolaz095.ru/tags/sudo/</link><description>Recent content in Sudo on Шлакоблог</description><generator>Hugo -- 0.162.1</generator><language>ru-RU</language><lastBuildDate>Sat, 18 Jan 2025 13:31:12 +0300</lastBuildDate><atom:link href="https://vodolaz095.ru/tags/sudo/index.xml" rel="self" type="application/rss+xml"/><item><title>Systemd - скрипт для включения и выключения юнита одной командой</title><link>https://vodolaz095.ru/systemd_toggle/</link><pubDate>Sat, 18 Jan 2025 13:31:12 +0300</pubDate><author>Анатолий Остроумов</author><guid>https://vodolaz095.ru/systemd_toggle/</guid><description>В статье представлен образец скрипта, чтобы включать или выключать systemd unit одной командой.</description><content type="text/html" mode="escaped"><![CDATA[<p>Допустим, у вас есть OpenVPN соединение с работой (systemd-unit <code>openvpn-client@work.service</code>), и вы хотите включать
или выключать его одной командой:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>$ connect_work
</span></span></code></pre></div><p>Для этого можно написать такой скрипт (и разместить его, допустим, в <code>/usr/bin/connect_work</code>):</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span><span style="color:#75715e">#!/usr/bin/env bash
</span></span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>set -e
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>service<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;openvpn-client@work.service&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> <span style="color:#f92672">(</span>systemctl -q is-active <span style="color:#e6db74">&#34;</span>$service<span style="color:#e6db74">&#34;</span><span style="color:#f92672">)</span> <span style="color:#66d9ef">then</span>
</span></span><span style="display:flex;"><span>	echo <span style="color:#e6db74">&#34;Stopping </span>$service<span style="color:#e6db74">...&#34;</span>
</span></span><span style="display:flex;"><span>	sudo systemctl stop <span style="color:#e6db74">&#34;</span>$service<span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">else</span>
</span></span><span style="display:flex;"><span>	echo <span style="color:#e6db74">&#34;Starting </span>$service<span style="color:#e6db74">...&#34;</span>
</span></span><span style="display:flex;"><span>	sudo systemctl start <span style="color:#e6db74">&#34;</span>$service<span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">fi</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>systemctl status <span style="color:#e6db74">&#34;</span>$service<span style="color:#e6db74">&#34;</span>
</span></span></code></pre></div><p>Чтобы sudo не спрашивало постоянно пароль для эскалации прав, пользователю можно разрешить выполнять эти команды
без запроса пароля, создав файл в <code>/etc/sudoers.d/vpn</code> с таким содержанием.</p>
<pre tabindex="0"><code>%vodolaz095 ALL=NOPASSWD: /usr/bin/systemctl start openvpn-client@work.service, /usr/bin/systemctl stop openvpn-client@work.service, /usr/bin/systemctl restart openvpn-client@work.service
</code></pre><p>Тут:</p>
<ul>
<li><code>%vodolaz095</code> - группа пользователя, которому можно совершать данные действия</li>
<li><code>ALL=NOPASSWD:</code> выключает проверку пароля при вызове sudo для этих команд</li>
<li><code>/usr/bin/systemctl start openvpn-client@work.service, ...</code> - список комманд, которые может вводить пользователь с эскалацией прав</li>
</ul>
<p>Совет - файл можно создать любым текстовым редактором, но лучше всего использовать
<a href="https://man7.org/linux/man-pages/man8/visudo.8.html">visudo</a> - оно проверяет корректность синтаксиса.</p>
<p>Создать разрешения для использования vpn можно этой командой</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-shell" data-lang="shell"><span style="display:flex;"><span>$ sudo visudo /etc/sudoers.d/vpn 
</span></span></code></pre></div><p>Как итог, любой пользователь из группы <code>vodolaz095</code> может вызвать команду <code>$ connect_work</code> и включить или выключить
systemd юнит <code>openvpn-client@work.service</code>.</p>
<p>Образец скрипта также опубликован тут:
<a href="https://gist.github.com/vodolaz095/484efe4fbd385185d50c0e454d32eabe">https://gist.github.com/vodolaz095/484efe4fbd385185d50c0e454d32eabe</a></p>
]]></content></item></channel></rss>