sudoコマンド、構成

5635 ワード

一、suコマンド
suコマンドは、ユーザーを切り替えるために使用されます.スーパーパーミッションユーザーrootが一般ユーザーにパスワードを必要としないことを切り替える場合.一方、一般ユーザが他のユーザに切り替えるにはパスワード検証が必要である(AユーザがBに切り替える場合、Bのパスワードを入力する必要がある).
1、suの使い方:
su[OPTIONオプションパラメータ][ユーザ]、パラメータ説明:
  • -または-l:切り替えられたユーザー環境にログインして変更します.
  • -c:対応するユーザー環境に切り替え、コマンドを実行して終了します.

  • 注意:
  • suはパラメータを一切付けず、デフォルトではrootユーザに切り替えるが、rootユーザホームディレクトリに移動しなかった.すなわち、この場合rootユーザに切り替えるが、rootログイン環境は変更されなかった.
  • su-rootとsu-は同じ機能で、rootユーザーに切り替え、rootユーザーの環境に変更されます.

  • 例1:
    [root@localhost ~]# useradd test
    [root@localhost ~]# passwd test
    Changing password for user test.
    New password: 
    BAD PASSWORD: The password is shorter than 8 characters
    Retype new password: 
    passwd: all authentication tokens updated successfully.
    [root@localhost ~]# useradd u1
    [root@localhost ~]# passwd u1
    Changing password for user u1.
    New password: 
    BAD PASSWORD: The password is shorter than 7 characters
    Retype new password: 
    passwd: all authentication tokens updated successfully.
    [root@localhost ~]# su - test
    [test@localhost ~]$ pwd
    /home/test
    [test@localhost ~]$ su - u1
    Password: 
    [u1@localhost ~]$ pwd
    /home/u1
    [u1@localhost ~]$ exit
    logout
    

    例2:
    [u1@localhost ~]$ touch u1_log
    [u1@localhost ~]$ exit
    logout
    [test@localhost ~]$ su -c "ls /home/u1" u1
    Password: 
    u1_log
    [test@localhost ~]$ 

    2、SUID:
    まず質問です
    suを使用してユーザーを切り替え、パスワードを入力すると「incorrect password」というメッセージが表示されることがあります.suというコマンドの権限設定の問題が原因です.suコマンドを使用してルートユーザーに切り替えるには、suというコマンドでsuid特殊権限ビットを設定する必要があります.具体的な方法は次のとおりです.
    #chmod 4755/bin/su
    reoot
    再起動後、suコマンドを表示します.sというIDがあります.
    [root@localhost ~]# ll/bin/su
    -rwsr-xr-x. 1 root root 32184 Apr 11 2018/bin/su
    もう一つのケースを見てみましょう.
    私たちのパスワードはすべて/etc/passwdファイルに保存されています./etc/passwdファイルはrootのみ書き込み権限があり、他のユーザーは読み取り権限しかありません.では、passwdコマンドを使用してパスワードを変更した後、どのようにこのファイルに書きますか?
    従来passwdコマンドには特殊な権限タグsがあり、ファイル所有者の権限ビットに存在していた.これは、実行権限を持つファイルがSetUID権限を設定すると、ユーザがこのファイルを実行すると、ファイル所有者として実行される特殊な権限SetUIDの一種である.passwdコマンドにはSetUID権限があり、所有者はroot(Linuxのコマンドのデフォルト所有者はroot)です.つまり、一般ユーザーがpasswdを使って自分のパスワードを変更したとき、その瞬間突然魂が付着し、実際にpasswdコマンド所有者rootとして実行されています.rootはもちろんパスワードを/etc/shadowファイルに書き込むことができます(rootこいつはsuperuserで何でもできることを忘れないでください)、命令実行が完了するとその身分も消えてしまいます.
    二、sudoコマンド、構成
    あるユーザーに切り替えてコマンドを実行し、終了する必要がある場合があります.suを使用してユーザーを切り替えることができることは知っていますが、ユーザーのパスワードを知る必要があります.特にrootに切り替えるときはrootのパスワードを知る必要があります.これは安全ではありません.この時私たちはsudoを使うことができます.
    sudoにより、いくつかのスーパー権限を的確に下放することができ、rootパスワードを一般ユーザーが知る必要はありません.そのため、sudoは権限に制限のないsuに比べて安全です.sudo実行コマンドのプロセスは、現在のユーザがroot(または他の指定された切り替えられたユーザ)に切り替え、root(または他の指定された切り替えられたユーザ)としてコマンドを実行し、実行が完了すると直接現在のユーザに戻ります.これらの前提は、sudoのプロファイル/etc/sudoersによって許可されることです.
    注:sudoプログラム自体はSETUIDビットが設定されたバイナリファイルです.その所有者はrootなので、各ユーザーはrootのようにプログラムを実行することができ、その権限を確認することができます.
    $ls -l/usr/bin/sudo
    ---s--x--x 2 root root 106832 02-12 17:41/usr/bin/sudo
    1、sudoコマンド:
    1)パラメータ:
  • sudo-u username#uid Userは、指定されたユーザとしてコマンドを実行する.後続のユーザはroot以外であり、ユーザ名であってもよいし、#uidであってもよい.
  • sudo-k Killは「入場券」の時間をクリアし、次回sudoを使用する場合はパスワードを入力します.
  • sudo-K Sure killは-kと似ていますが、タイムスタンプファイルを削除する「入場券」を破棄します.
  • sudo-b commandは、バックグラウンドで指定されたコマンドを実行します.

  • 2)特徴:
  • sudoは、指定されたホスト上で特定のコマンドを実行するユーザを制限することができる.
  • sudoは、各ユーザがsudoを使用して何をしたかを忠実に記録し、センタホストまたはログサーバにログを転送するログを提供することができる.
  • sudoは、システム管理者にプロファイルを提供し、システム管理者がユーザーの使用権限と使用するホストを集中的に管理できるようにします.デフォルトの保存場所は/etc/sudoersです.
  • sudoは、タイムスタンプファイルを使用して「改札」のようなシステムを完了する.ユーザーがsudoを実行し、パスワードを入力すると、ユーザーはデフォルトの生存期間が5分の「入場券」を取得します(デフォルト値はコンパイル時に変更できます).タイムアウト後、ユーザーはパスワードを再入力する必要があります.
  • 2、sudo配置:
    sudoの構成には2つの方法があります.(スーパーユーザーが変更できる)
  • vimを使用して/etc/sudoersファイルを直接編集します.
  • visudoコマンドを使用して編集します.(2人のユーザが同時に修正することを防止し、次に文法検査がある)
  • 1)まず模範を示します.
    rootとしてvisudoでプロファイルを開くと、次のような行が表示されます.
    # Runas alias specification
    # User privilege specificationroot ALL=(ALL)ALL
    次の行を追加します(tabを空白にしたほうがいいです):
    foobar ALL=(ALL) ALL
    保存が終了したらfoobarユーザーに切り替え、そのIDでコマンドを実行します.
    [foobar@localhost ~]$ ls/root
    ls:/root:権限が足りない
    [foobar@localhost ~]$ sudo ls/root
    PassWord:
    anaconda-ks.cfg Desktop install.log install.log.syslog
    このとき、/rootディレクトリを表示できることに気づきました.
    では、その3つのALLがどういう意味なのか見てみましょう.最初のALLはネットワーク内のホストを指し、foobarがこのホスト上で後のコマンドを実行できることを示すホスト名に変更しました.2番目の括弧の中のALLは、ターゲットユーザ、すなわち誰としてコマンドを実行するかを指す.最後のALLはもちろん命令名です.
    2)ユーザーがsudoを使用する権利を制限する:
    私たちはfoobarの権利を制限して、彼にやりたいことをさせない.例えばrootのようにlsとifconfigを使って、その行を次のように変更したいだけです.
    foobar localhost=/sbin/ifconfig,/bin/ls
    コマンドを実行します.
    [foobar@localhost ~]$ sudo head -5/etc/shadow
    Password:
      Sorry, user foobar is not allowed to execute '/usr/bin/head -5/etc/shadow' as root on localhost.localdomain.
    [foobar@localhost ~]$ sudo/sbin/ifconfigeth0 Linkencap:Ethernet HWaddr 00:14:85:EC:E9:9B...
    3)パスワード免除:
    多くの場合、私たちはもともとログインしていたので、sudoを使うたびにパスワードを入力するのは煩わしいです.パスワードを入力しなくてもいいですか?もちろん、プロファイルを変更します.
    foobar ALL=(ALL) NOPASSWD:ALL
    もうちょっとsudo:
    [foobar@localhost ~]$ sudo ls/rootanaconda-ks.cfg Desktop install.log
    install.log.syslog
    4)ユーザーの指定:
    foobarユーザーにlinuxホスト上でjimmyまたはreneとしてkillコマンドを実行させ、プロファイルを記述させたいと考えています.
    foobar linux=(jimmy,rene)/bin/kill
    しかし、foobarはjimmyなのかreneなのかという問題があります.この時、私たちはsudo-uを考えるべきで、それはちょうどこのような時に使われています.
    foobarは、sudo-u jimmy kill PIDまたはsudo-u rene kill PIDを使用できます.
    しかし、これは面倒ですが、実際には-uを加えるたびにreneやjimmyをデフォルトのターゲットユーザーに設定する必要はありません.さらに1行追加します.
    Defaults:foobar runas_default=rene
    Defaultsの後ろにコロンがある場合は、後ろのユーザーのデフォルト、ない場合は、すべてのユーザーのデフォルトです.プロファイルに含まれる行のように、
    Defaults env_reset