Open3

Arch Linuxでいろいろ遊ぶ

takepro14takepro14

sudoできるようにする

課題

sudo 権限がない

sudo systemctl status sshd
[sudo] password for takepro14:
Sorry, try again.

/etc/sudoers を編集

su -
vim /etc/sudoers
# コメントイン
%wheel ALL=(ALL:ALL) ALL
# ついでにeditorをvimにしとく
Defaults editor=/usr/bin/vim

本来はvisudoコマンドで編集すべき

sudo の設定ファイルは /etc/sudoers です。このファイルはどんなときでも visudo コマンドを使って編集するべきです。visudo は sudoers ファイルをロックし、一時ファイルに編集内容を保存して、それを /etc/sudoers にコピーする前にファイルの構文をチェックします。
https://wiki.archlinux.jp/index.php/Sudo

ユーザーをwheelグループに入れる

groups
#=> takepro14

su -
usermod -aG wheel takepro14

# 再接続(公開鍵認証)
exit
ssh archbox

groups
#=> takepro14 wheel

sudo systemctl status sshd
[sudo] password for takepro14:
● sshd.service - OpenSSH Daemon
     Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; preset: disabled)
     Active: active (running) since Sun 2025-04-20 23:18:14 JST; 3 days ago
:

なおwheelグループとは

wheelグループは、BSD系のUNIXシステムで広く使われている、特定のユーザーに管理者権限を付与するための特別なグループです。主に、sudoやsuコマンドを使って、rootユーザーの権限を一時的に利用できるようにするために使われます.
(from Gemini)

この用語は組織内などで大きな権力を持つ人物を示すスラングのビッグホイールに由来する
https://ja.wikipedia.org/wiki/ホイール_(コンピュータ)

takepro14takepro14

systemdサービスを作る

sudo vim /etc/systemd/system/hello.service
[Unit]
Description=My Hello World service

[Service]
ExecStart=/usr/bin/echo "Hello from systemd!"
Type=oneshot

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reexec
sudo systemctl enable hello.service
sudo systemctl start hello.service

output

takepro14 in 🌐 archbox in ~ took 5s
❯ sudo systemctl status hello.service
[sudo] password for takepro14:
○ hello.service - My Hello World service
     Loaded: loaded (/etc/systemd/system/hello.service; enabled; preset: disabled)
     Active: inactive (dead) since Thu 2025-04-24 22:27:03 JST; 25min ago
 Invocation: 7e9152e1211043cdaa3252e2459f1858
    Process: 16775 ExecStart=/usr/bin/echo Hello from systemd! (code=exited, status=0/SUCCESS)
   Main PID: 16775 (code=exited, status=0/SUCCESS)
   Mem peak: 1.5M
        CPU: 8ms

Apr 24 22:27:03 archbox systemd[1]: Starting My Hello World service...
Apr 24 22:27:03 archbox echo[16775]: Hello from systemd!
Apr 24 22:27:03 archbox systemd[1]: hello.service: Deactivated successfully.
Apr 24 22:27:03 archbox systemd[1]: Finished My Hello World service.
takepro14takepro14

systemd について

ユニットという単位で管理する

ユニットの種類
*.service → サービス
*.socket → ソケット
*.timer → タイマー(cron的な)
*.mount → マウント
*.target → グループ
*.path → ファイル監視

例えばsshd.service, home.mount

ユニットファイルはsystemd がサービスや設定を「いつ」「どうやって」「どの順で」起動・管理するかを定義するためのファイル

例えば/usr/lib/systemd/system/sshd.service

vim /usr/lib/systemd/system/sshd.service
[Unit]
Description=OpenSSH Daemon
Wants=sshdgenkeys.service
After=sshdgenkeys.service
After=network.target

[Service]
Type=notify-reload
ExecStart=/usr/bin/sshd -D
KillMode=process
Restart=always

[Install]
WantedBy=multi-user.target

systemctl status sshd で実行できる理由

systemctl を使うとき、例えば sshd.socket のように、一般的には拡張子 (suffix) を含むユニットファイルの完全な名前を指定する必要があります。しかし、以下のような場合には省略形が存在します:
拡張子が指定されない場合、systemctl は .service とみなします。例えば netctl と netctl.service は同じように扱われます。
https://wiki.archlinux.jp/index.php/Systemd#systemctl_.E3.81.AE.E5.9F.BA.E6.9C.AC.E7.9A.84.E3.81.AA.E4.BD.BF.E3.81.84.E6.96.B9