croos-kのメインエンブレム

サイト名
  1. HOME
  2. Linux便利なコマンド
  3. sudoに追加登録する方法

sudoに追加登録(Linux)する方法


sudoで実行するには「visudo」コマンドで「sudoers」ファイルに登録する!

linuxでsudoを使うには「visudo」コマンドで「sudoers」ファイルに登録する

ログインした時のユーザでlinuxコマンドを実行していると、「許可がありません。」「権限がありません。」など、使えるコマンドに制限が付加され想定した結果が得られない事がしばしば起こります。こういった場合、スーパーユーザ(root)に切り替えて実行すれば想定した結果は得られます。しかし、スーパーユーザ(root)での操作は全てのコマンドを自由に操作できる反面、チョッとした操作ミスでlinux環境そのものに影響を与えてかねません。慎重に操作したつもりでも手入力による操作ミスは必ず発生します。こんな時「sudo」が便利。

linuxには「sudo」コマンドが用意されていて、例えば、あるコマンドをroot権限で実行したい場合は「sudo△コマンド」で実行することができます。実行するには、事前にそのコマンドがsudoで実行出来るようにsudoersファイルに登録する必要があります。このページではその登録方法を紹介します。


一般ユーザで「find」コマンドを実行してみます


[work@localhost etc]$ whoami
work
[work@localhost etc]$
[work@localhost etc]$ find /var/spool/abrt/ccpp-2019-03-23-02:53:21-2074 -name sosreport.tar.xz -print
find: `/var/spool/abrt/ccpp-2019-03-23-02:53:21-2074': 許可がありません
[work@localhost etc]$

「許可がありません」のメッセージ。find対象のディレクトリの中にroot権限無では実行出来ないディレクトリが存在するのです。



スーパーユーザ(root)で「find」コマンドを実行してみます


[root@localhost ~]# whoami
root
[root@localhost ~]#
[root@localhost ~]# find /var/spool/abrt/ccpp-2019-03-23-02:53:21-2074 -name sosreport.tar.xz -print
/var/spool/abrt/ccpp-2019-03-23-02:53:21-2074/sosreport.tar.xz
[root@localhost ~]#

エラーもなく想定の結果がえられました。



sudoersへの登録

ログインユーザ(work)がroot権限で「find」コマンドを実行出来る設定をします。冒頭にも記述した「visudo」を使って「sudoers」へ登録します。まず、格納場所に移動してsudoersのバックアップを必ず取得しておきます。sudoersへの設定は全てroot権限で行います。

[root@localhost ~]# cd /etc
[root@localhost etc]# pwd
/etc
[root@localhost etc]#
[root@localhost etc]# ls -l sudoers
-r--r-----. 1 root root 4002 3月 2 02:18 2012 sudoers
[root@localhost etc]#
[root@localhost etc]# cp -p sudoers sudoers_bk
[root@localhost etc]# ls -l sudoers*
-r--r-----. 1 root root 4002 3月 2 02:18 2012 sudoers
-r--r-----. 1 root root 4002 3月 2 02:18 2012 sudoers_bk
[root@localhost etc]#

sudoersを開いて修正していきます。コマンドは「visudo」。

[root@localhost etc]#
[root@localhost etc]# visudo

sudoersを開くと《root ALL=(ALL) ALL》の行が存在します。

## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
## user MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root ALL=(ALL) ALL

## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS


《root ALL=(ALL) ALL》と記載された次行に《work ALL=NOPASSWD: /bin/find》を追加します。

■「work」はroot権限を与えるユーザを記述。
■「ALL=NOPASSWD:」はlinuxにログインする全ての端末からパスワード無で受け付ける。の意味です。
  自分の使っている端末だけsudoコマンドを受け付ける場合には、端末ID「ttyxx」を記述します。
  最後の「:」も忘れずに。
■「/bin/find」は受け付けるコマンドをフルパスで記述。
■何処のfindコマンドを使っているか確認するには「type find」と打って下さい。フルパスで表示されます。

## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
## user MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
work ALL=NOPASSWD: /bin/find

## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS

sudoersを更新して終了するには「:」→「wq」と入力して下さい。(viエディタと同じ操作です)
  終了すると以下のようにlinuxコマンドラインに戻ります。

[root@localhost etc]# visudo
[root@localhost etc]#


では、sudoを付加してfindコマンドをworkユーザで実行してみます。

[work@localhost etc]$ whoami
work
[work@localhost etc]$ [work@localhost etc]$ sudo find /var/spool/abrt/ccpp-2019-03-23-02:53:21-2074 -name sosreport.tar.xz -print
/var/spool/abrt/ccpp-2019-03-23-02:53:21-2074/sosreport.tar.xz
[work@localhost etc]$

エラーも無く想定した結果が得られました。



sudo無で実行したらどうでしょうか。

[work@localhost etc]$ whoami
work
[work@localhost etc]$
[work@localhost etc]$ find /var/spool/abrt/ccpp-2019-03-23-02:53:21-2074 -name sosreport.tar.xz -print
find: `/var/spool/abrt/ccpp-2019-03-23-02:53:21-2074': 許可がありません
[work@localhost etc]$

sudo無でfindを実行するとやはりエラーが表示されてしまいました。



sudoを付ければroot権限で、sudo無ではworkユーザ権限で実行されます。