Edisonにsudoをインストール&rootでのssh禁止

WindowsユーザーなのでLinuxとかよくわからないのですが、昔ききかじった知識にrootでの作業は危ないという話がありました。

久々に触るLinux環境ですし、勉強がてら、ユーザを追加して普段の作業はそちらで行い、必要な場合のみrootになる運用方針としてみます。

1. ユーザー「testuser」の追加

adduserコマンドで「testuser」というユーザーを追加後、passwdコマンドでtestuserのパスワードを設定します。

root@edison:~# adduser testuser
root@edison:~# passwd testuser

2. suの制限とsudoの導入

デフォルトの設定だと、rootのパスワードさえ知っていればsuコマンドで誰でもrootになれてしまいます。

また、もし複数人で管理するような場合は全員でrootのパスワードを共有する必要があります。できれば避けたいので、suコマンドでrootになれないようにし、代わりにsudoコマンドを使うようにします。

2-1. suの制限

「wheel」というグループに所属するユーザー以外はsuコマンドでrootになれないよう制限します。

…本当はwheelに所属するユーザも無効にしたいのですが、やり方がわかりませんでした。Edisonの場合はデフォルトだと「wheel」というグループは存在しないため、この制限を行うことで、「誰もsuコマンドでrootになれない」としているつもりです。

具体的には/etc/login.defsテキストエディタ等で編集し、「SU_WHEEL_ONLY no」を「SU_WHEEL_ONLY yes」にすればOKです。

一応、編集前のlogin.defsを「login.defs.org」とした場合のdiffでの差分を示します。

--- login.defs.org
+++ login.defs
@@ -211,7 +211,7 @@
 # to uid 0 accounts.  If the group doesn't exist or is empty, no one
 # will be able to "su" to uid 0.
 #
-SU_WHEEL_ONLY  no
+SU_WHEEL_ONLY  yes

 #
 # If compiled with cracklib support, sets the path to the dictionaries

2-2. sudoの導入

sudoがインストールされていなかったのでインストールします。opkgでインストールした後、visudosudoを使用できるユーザーを設定します。

visudoでは環境変数$EDITORに設定されたテキストエディタ/etc/sudoersを編集します。この編集の際、とりあえず「testuser ALL=(ALL) ALL」と追加すればOKです。

一応、編集前のsudoersを「sudoers.org」とした場合のdiffでの差分を示します。

--- sudoers.org
+++ sudoers
@@ -70,6 +70,7 @@
 ## User privilege specification
 ##
 root ALL=(ALL) ALL
+testuser ALL=(ALL) ALL

 ## Uncomment to allow members of group wheel to execute any command
 # %wheel ALL=(ALL) ALL

2-3. 確認

  • Step1: testuserとしてログイン
root@edison:~# login testuser
Password:  ※ ←testuserのログインパスワード
edison:~$ whoami
testuser
edison:~$
  • Step2: 「etc/sudoers」を読む権限がないことを確認
edison:~$ head -n 1 /etc/sudoers
head: /etc/sudoers: Permission denied
edison:~$
  • Step3: suでrootになる権限がないことを確認
edison:~$ su
You are not authorized to su root
edison:~$
  • Step4: sudoを使えることを確認
edison:~$ sudo -s
Password:  ※ ←現在のユーザー(testuser)のログインパスワードを入力
edison:/home/testuser# whoami
root
edison:/home/testuser# head -n 1 /etc/sudoers
## sudoers file.
edison:/home/testuser# exit
edison:~$

3. sshの設定

sshに関してもセキュアな感じにしてみます。

3-1. ユーザー「testuser」でsshログインできるように設定

Git for Windowsをインストールしていたので、OpenSSHが入っていました。Tera Term使わなくてもいけます。

ssh-keygenで公開鍵と秘密鍵を「~/.ssh」に作成。ssh-copy-idでEdisonのtestuserのホームディレクトリに「~/.ssh」を適切なパーミッションで作成して公開鍵をコピー。sshでユーザー「testuser」としてEdisonにログイン。

windows:~$ ssh-keygen
windows:~$ ssh-copy-id -i ~/.ssh/id_rsa.pub testuser@192.168.0.7
windows:~$ ssh testuser@192.168.0.7

3-2. sshd_configを設定

「/etc/ssh/sshd_config」を編集し、Edisonのsshサーバ側の設定を次のようにします。
※ 「/etc/ssh/sshd_config」の編集はsudoでrootとして行うこと

  • rootログインを禁止
    • 「PermitRootLogin」を「no」にする
  • 空のパスワードを禁止
    • 「PermitEmptyPasswords」を「no」にする
  • パスワード認証を禁止(公開鍵認証のみ許可)
    • 「+PermitEmptyPasswords」を「no」にする
    • 「ChallengeResponseAuthentication」を「no」にする

編集前のsshd_configを「sshd_config.org」とした場合のdiffでの差分を示します。

--- sshd_config.org
+++ sshd_config
@@ -38,7 +38,7 @@
 # Authentication:

 #LoginGraceTime 2m
-PermitRootLogin yes
+PermitRootLogin no
 #StrictModes yes
 #MaxAuthTries 6
 #MaxSessions 10
@@ -59,10 +59,12 @@

 # To disable tunneled clear text passwords, change to no here!
 #PasswordAuthentication yes
-PermitEmptyPasswords yes
+PasswordAuthentication no
+PermitEmptyPasswords no

 # Change to no to disable s/key passwords
 #ChallengeResponseAuthentication yes
+ChallengeResponseAuthentication no

 # Kerberos options
 #KerberosAuthentication no

4. 参考サイト