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
でインストールした後、visudo
でsudo
を使用できるユーザーを設定します。
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