はじめに

こんにちは!今回はadd-shellコマンドについて解説します。

add-shellは、ユーザーが使用できるシェルを認可リストに追加するコマンドです。Debian系Linuxで、システムが認可しているシェルのみをユーザーに割り当てるために使います。

セキュリティと管理の観点から、どのシェルがシステムで利用可能かを厳密に管理するのが目的ですね。

add-shellコマンドとは

add-shellは、Debian系Linuxシステムの外部コマンドです。

システム上で使用可能なシェルを/etc/shellsファイルに登録します。新しいシェルをインストールしたときに、このコマンドで認可リストに追加することで、そのシェルをchshコマンドでユーザーが選択できるようにします。

対になるremove-shellコマンドと組み合わせて、シェルの管理を行います。

基本構文

1
add-shell SHELL

SHELLには、フルパス(例:/bin/zsh)でシェルのパスを指定します。

主なオプション

add-shellコマンドに特殊なオプションはありません。単純にシェルのパスを引数として指定します。

引数 説明
SHELL 認可リストに追加するシェルのフルパス

使用例

例1: bashシェルを追加

1
sudo add-shell /bin/bash

実行結果:

1
(成功時は何も表示されない)

bashシェルが既に認可されている場合でも、エラーは発生しません。

例2: zshシェルを追加

1
sudo add-shell /bin/zsh

実行結果:

1
(成功時は何も表示されない)

zshをインストール後に、このコマンドで認可リストに追加します。

例3: fishシェルを追加

1
sudo add-shell /usr/bin/fish

実行結果:

1
(成功時は何も表示されない)

fish シェルを認可リストに追加します。

例4: 認可リストの確認

1
cat /etc/shells

実行結果:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash
/bin/zsh
/usr/bin/zsh
/usr/bin/fish

/etc/shellsファイルの内容を表示します。ここに登録されているシェルだけがユーザーに割り当てられます。

例5: ユーザーシェルの変更確認

1
chsh -l

実行結果:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash
/bin/zsh
/usr/bin/zsh
/usr/bin/fish

chsh -lで認可されたシェル一覧を表示します。

例6: 新しいシェルを追加してユーザーに割り当て

1
2
sudo add-shell /usr/local/bin/newshell
sudo chsh -s /usr/local/bin/newshell username

実行結果:

1
(成功時は何も表示されない)

新しいシェルを追加してから、ユーザーのシェルを変更します。

例7: tcshシェルを追加

1
sudo add-shell /bin/tcsh

実行結果:

1
(成功時は何も表示されない)

tcshシェルを認可リストに追加します。

例8: kshシェルを追加

1
sudo add-shell /bin/ksh

実行結果:

1
(成功時は何も表示されない)

Korn Shellを認可リストに追加します。

Tips・注意点

rootユーザーのみが実行可能

add-shellはシステム設定ファイルを変更するため、rootユーザーのみが実行可能です。通常ユーザーが実行すると、パーミッションエラーが発生します。

1
2
3
add-shell /bin/zsh
# 出力: add-shell: Could not lock /etc/shells.lock.
# Operation not permitted

既に登録されているシェルを追加しても大丈夫

重複登録を試みてもエラーが発生しないか、既に存在することを示すメッセージが表示されます。安全に実行できます。

remove-shellコマンドとセット

シェルを削除する場合は、remove-shellコマンドを使います。

1
sudo remove-shell /bin/zsh

シェルのパスを確認してから追加

シェルを追加する前に、実際にそのパスにシェルが存在することを確認しましょう。

1
2
ls -la /usr/bin/zsh
which zsh

実践的な使い方

新しいシェルをインストール後に認可する

1
2
3
4
5
6
7
8
9
# zshをインストール
sudo apt-get install zsh

# 認可リストに追加
sudo add-shell /bin/zsh
sudo add-shell /usr/bin/zsh

# ユーザーが使用可能に
chsh -s /bin/zsh

zshをインストールしたら、このコマンドで認可リストに追加することで、全ユーザーが使用可能になります。

サーバー初期構築で複数のシェルを追加

1
2
3
sudo add-shell /bin/bash
sudo add-shell /bin/zsh
sudo add-shell /usr/bin/fish

サーバー初期構築時に、複数のシェルを一括で認可します。

カスタムシェルの導入

1
2
sudo cp /path/to/custom-shell /usr/local/bin/
sudo add-shell /usr/local/bin/custom-shell

カスタムシェルを導入する際の流れです。

まとめ

add-shellコマンドのポイント:

  • ユーザーが使用できるシェルを認可リストに追加するコマンド
  • /etc/shellsファイルを管理し、セキュリティとユーザー管理を実現
  • rootユーザーのみが実行可能
  • remove-shellコマンドで削除
  • 新しいシェルをインストール後に必ず実行
  • よく使う組み合わせ: add-shell /bin/zshchsh -s /bin/zsh

Debian系システムの適切なシェル管理は、セキュリティ面でも重要です。新しいシェルを導入するときは、必ずこのコマンドで認可するようにしましょう!