安全と暗号化のsuとsudoの使用の詳細


安全と暗号化のsuとsudoの使用の詳細
この章の目次
  • suコマンドの使用
  • sudoコマンド
  • sudo構成説明
  • sudo別名および例
  • 前言
    作業生産環境ではrootユーザーをできるだけ使用しないでください.root権限が大きすぎるため、操作ミスをすると深刻な結果に直面します.しかし、多くのシステム管理コマンドとサービスは、セキュリティのためにスーパーユーザーだけが使用する権限を持っているため、一般ユーザーに多くの権限の束縛を受けることは間違いなく、suコマンドはユーザーの身分を簡単に変更するために使用され、ユーザーがログアウトせずに他のユーザーにスムーズに切り替えることができる.
    1.suコマンドの使用
    suコマンドは、現在のユーザIDを他のユーザIDに切り替えるために使用され、変更する場合は変更するユーザアカウントとパスワードを入力する必要があります.
    構文
    su(オプション)(パラメータ)
    オプション
  • -cまたは--command=:指定された命令を実行すると、元のアイデンティティに戻ります.
  • -fまたは--fast:cshとtschに適用され、shellを使用して起動ファイルを読み込む必要はありません.
  • -lまたは--login:アイデンティティを変更すると、作業ディレクトリも同時に変更されます.およびHOME,SHELL,USER,LOGNAME,PATH変数など;
  • -m,-pまたは--preserve-environment:アイデンティティを変更する場合は、環境変数を変更しないでください.
  • -sまたは--shell=:実行するshellを指定します.
  • --help:ヘルプを表示します.
  • --version;バージョン情報表示
  • パラメータ
    ≪ユーザー|Users|ldap≫:IDを切り替えるターゲット・ユーザーを指定します.

    アカウントをrootに変更rootホームディレクトリを表示して現在のユーザーに戻る
    [zh@zheng ~]$ su -l root -c ls
      :
    anaconda-ks.cfg   gpgtest  initial-setup-ks.cfg 
    [zh@zheng ~]$

    小結
  • 新しいユーザの環境に完全に切り替えるには、su-usernameまたはsu-l usernameを使用する必要があります.
  • rootのコマンドを1回だけ実行したい場合はsu-c'command'を使用して実現できます.
  • rootを使用して任意のユーザに切り替える場合、新しいユーザのパスワードを入力する必要はありません.
  • 複数人で管理する場合、suでrootに切り替えると、すべてのユーザーがrootパスワードを知る必要があります.これは安全ではありません.この場合、sudoコマンド
  • を使用する必要があります.
    2.sudoコマンド
    sudoコマンドは、rootとして予め設定された別のアイデンティティでコマンドを実行するために使用されます./etc/sudoersにsudoコマンドを実行できるユーザが設定されています.不正なユーザーがsudoを使用しようとすると、管理者に警告メールが送信されます.ユーザーがsudoを使用する場合は、パスワードを入力してから5分間の有効期限があり、期限を超えるとパスワードを再入力する必要があります.
    構文
    sudo(オプション)(パラメータ)
    オプション
  • -b:バックグラウンドで命令を実行する;
  • -h:ヘルプを表示します.-H:HOME環境変数を新しいアイデンティティのHOME環境変数とする.
  • -k:パスワードの有効期限を終了します.つまり、次回sudoを実行するときにパスワードを入力する必要があります.-l:現在のユーザーが実行できる命令と実行できない命令をリストする.
  • -p:問い合わせパスワードのプロンプト記号を変更します.-s:指定したshellを実行します.-u:指定したユーザーを新しいアイデンティティとして使用します.このパラメータを追加しないと、プリセットはrootを新しいアイデンティティとします.
  • -v:パスワードの有効期限を5分延長します.
  • -V:バージョン情報が表示されます.

  • パラメータ
  • 命令:実行する必要がある命令と対応するパラメータ.

  • sudoコマンドのプロパティ:
  • sudoは、指定されたホスト上で特定のコマンドを実行するユーザを許可することができる.ユーザーがsudoを使用することを許可していない場合は、管理者
  • に連絡するよう求められます.
  • sudoは、各ユーザがsudo操作
  • を使用することを記録するログを提供することができる.
  • sudoは、システム管理者にプロファイルを提供し、システム管理者がユーザの使用権限と使用するホスト
  • を集中的に管理できるようにする.
  • sudoはタイムスタンプファイルを使用して「改札」のようなシステムを完了し、デフォルトの生存期間が5分の「入場券」
  • visudoコマンドでプロファイルを編集し、構文チェック機能
  • を有する.

    zhユーザーとして、tmpディレクトリの下にmytestというファイルを作成します.
    [root@zheng ~]# sudo -u zh touch /tmp/mytest
    [root@zheng ~]# ll /tmp/mytest
    -rw-r--r--. 1 zh zh 0 12   5 22:34 /tmp/mytest

    考える
    sudoはなぜデフォルトでrootしか使用できないのか
  • ユーザがsudoを実行するとき、システムおよび/etc/sudoersファイルは、ユーザがsudoを実行する権限があるかどうかを検索する
  • .
  • 利用者がsudoを実行可能な権限を有すると、利用者に自分のパスワードを入力させて
  • を確認する.
  • パスワード入力が成功するとsudo後続コマンド(root sudo実行時にパスワード入力不要)
  • が開始する.
  • 切り替えたアイデンティティが実行者アイデンティティと同一である場合、パスワード
  • を入力する必要もない.
    注意:
    sudo実行のポイントは、/etc/sudoersファイルに実行者の関連構成があるかどうかです.そのため、sudoを使用できるかどうかは/etc/sudoersに関係しています.sudoersファイルを編集するには、vimを直接使用して修正することはできません.このファイルの内容には一定の構文フォーマットがあり、visudoコマンドを使用する必要があります.Visudoはviエディタを呼び出してプロファイルを変更し、構文エラーがある場合はエラーを報告します.
    スーパーユーザーのみがvisudoコマンドを使用してsudoプロファイル(/etc/sudoers)を編集できます.visudoコマンドの利点:1、複数のユーザーが同時にsudoプロファイルを変更することを防止できます;2、sudoプログラムプロファイルの構文チェック;
    Visudo構文フォーマット
    利用者アカウント登録者のソースホスト名=(切り替え可能なアイデンティティ)発行可能なコマンドroot ALL=(ALL)ALLの4つのコンポーネントの意味
  • 利用者アカウント:システムのどのアカウントがsudoというコマンドを使用できるか、デフォルトはroot
  • ログイン者のソースホスト名:ログインアカウントはどのホストから本ホストにリンクされ、この構成値はクライアントホストを指定することができ、デフォルト値rootはどのネットワークホストからでも
  • 切り替え可能なアイデンティティ:このアカウントはどのアイデンティティに切り替えて後のコマンドを下すことができ、デフォルトrootは誰にでも切り替えることができます
  • が発行できるコマンド:このアイデンティティでどのコマンドを発行できるか、このコマンドは必ず絶対パスを使用してください.デフォルトrootは任意のアイデンティティを切り替えて任意のコマンド
  • を実行することができます.

    1.ユーザーが任意のIDを切り替え、すべてのコマンドを実行できるようにする
    [root@centos7 ~]# visudo 
    zh      ALL=(ALL)       ALL
    [root@centos7 ~]# su - zh
    [zh@centos7 ~]$ sudo -l         #  zh      sudo      
    [sudo] password for zh:         #  zh    
    Matching Defaults entries for zh on this host:
        requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME
        HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG
        LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT
        LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
        env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
        secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
    
    User zh may run the following commands on this host:
        (ALL) ALL               #         
    
    [zh@centos7 ~]$ ls /root        #    root  ,   
    ls: cannot open directory /root: Permission denied
    [zh@centos7 ~]$ sudo ls /root       #  sudo    
    a.sh		dir1	     key.pem		      pubkey.pem	 usr

    2.あるユーザーが管理ユーザー機能のみを持つことを指定する
    [root@centos7 ~]# visudo
    zh  ALL=(root)  /usr/bin/passwd
    [root@centos7 ~]# su - zh
    [zh@centos7 ~]$ sudo passwd lisi
    [sudo] password for zh: 
    Changing password for user lisi.
    New password: 
    Retype new password: 
    passwd: all authentication tokens updated successfully.
    [zh@centos7 ~]$ su - lisi
    Password: 
    [lisi@centos7 ~]$ whoami
    lisi
    
    #          ,            root      ?
    
    [zh@centos7 ~]$ sudo passwd 
    Changing password for user root.  #     root   
    New password: 
    Retype new password: 
    passwd: all authentication tokens updated successfully.
    
    
    [zh@centos7 ~]$ sudo passwd root
    Changing password for user root. #     root     
    New password: 
    Retype new password: 
    passwd: all authentication tokens updated successfully.
    [zh@centos7 ~]$ su - root
    Password: 
    Last login: Thu Dec 29 10:24:12 CST 2016 from 192.168.1.104 on pts/1
    [root@centos7 ~]# whoami
    root
    
    #        ?
    [root@centos7 ~]# visudo
    99 zh  ALL=(root)  !/usr/bin/passwd,/usr/bin/passwd [a-zA-Z]*,!/usr/bin/passwd root
    #   !,         。     :    passwd+ root       。
    [root@centos7 ~]# su - zh
    [zh@centos7 ~]$ sudo passwd
    Sorry, user zh is not allowed to execute '/bin/passwd' as root on centos7.
    [zh@centos7 ~]$ sudo passwd root
    Sorry, user zh is not allowed to execute '/bin/passwd root' as root on centos7.
    [zh@centos7 ~]$ sudo passwd lisi
    Changing password for user lisi.
    New password: 
    Retype new password: 
    passwd: all authentication tokens updated successfully.

    3.グループパスワード免除機能の使用
    #     user1 , zh    user1
    [root@centos7 ~]# useradd user1
    [root@centos7 ~]# usermod -G user1 zh
    [root@centos7 ~]# id zh
    uid=1008(zh) gid=1020(zh) groups=1020(zh),1021(user1)
    #   sudo    
    [root@centos7 ~]# visudo
    %user1 ALL=(ALL) NOPASSWD: ALL
    #   
    [zh@centos7 ~]$ sudo ls /root
    a.sh		dir1	     key.pem		      pubkey.pem	 usr
    [zh@centos7 ~]$ sudo -k 
    [zh@centos7 ~]$ sudo ls /root
    a.sh		dir1	     key.pem		      pubkey.pem	 usr
    [zh@centos7 ~]$ exit
    logout
    [root@centos7 ~]# su - user1
    [user1@centos7 ~]$ sudo ls /root
    a.sh		dir1	     key.pem		      pubkey.pem	 usr

    4.別名によるsudoの設定
    エイリアスには、次の4つのタイプがあります.
  • Host_Alias:ホスト別名の定義
  • User_Alias:ユーザーの別名を定義します.別名メンバーはユーザーであってもよいし、ユーザーグループ(前に%を加えた)の
  • であってもよいです.
  • Runas_Alias:runasエイリアスを定義します.このエイリアスは「目的のユーザー」です.つまり、sudoが切り替えを許可するユーザーです.
  • Cmnd_Alias:定義コマンド別名
  • [root@centos7 ~]# visudo 
    User_Alias  USERADMIN = zh,user1
    Cmnd_Alias  ADMINCMD = !/usr/bin/passwd,/usr/bin/passwd[a-zA-Z]*,!/usr/bin/passwd root    
    USERADMIN   ALL=(root)  ADMINCMD
    #  
    [root@centos7 ~]# su - zh
    Last login: Tue Jan  3 11:37:05 CST 2017 on pts/0
    [zh@centos7 ~]$ sudo ls /root
    Sorry, user zh is not allowed to execute '/bin/ls /root' as root on centos7.
    [zh@centos7 ~]$ sudo passwd
    Sorry, user zh is not allowed to execute '/bin/passwd' as root on centos7.
    [zh@centos7 ~]$ sudo passwd root
    Sorry, user zh is not allowed to execute '/bin/passwd root' as root on centos7.
    [zh@centos7 ~]$ sudo passwd lisi
    Changing password for user lisi.
    New password: 
    Retype new password: 
    passwd: all authentication tokens updated successfully.
    
    [root@centos7 ~]# su - user1
    Last login: Tue Jan  3 11:41:34 CST 2017 on pts/0
    [user1@centos7 ~]$ sudo ls /root/
    Sorry, user user1 is not allowed to execute '/bin/ls /root/' as root on centos7.
    [user1@centos7 ~]$ sudo passwd 
    Sorry, user user1 is not allowed to execute '/bin/passwd' as root on centos7.
    [user1@centos7 ~]$ sudo passwd root
    Sorry, user user1 is not allowed to execute '/bin/passwd root' as root on centos7.
    [user1@centos7 ~]$ sudo passwd lisi
    Changing password for user lisi.
    New password: 
    Retype new password: 
    passwd: all authentication tokens updated successfully.

    sudoとsuの使い方:
    多くの場合、rootの仕事を大量に実行する必要があるので、sudoをずっと使うのは確かに面倒です.では、sudoとsuを組み合わせて使用し、アイデンティティをrootに変換し、ユーザー自身のパスワードでrootにすることができます.これにより、システムの管理がより容易になり、rootパスワードも漏洩しません.
    [root@centos7 ~]# visudo 
    User_Alias  USERADMIN = zh,user1
    USERADMIN   ALL=(root)  /bin/su -
    [root@centos7 ~]# su - zh
    [zh@centos7 ~]$ sudo su - 
    [sudo] password for zh: 
    Last login: Tue Jan  3 10:11:55 CST 2017 from 192.168.1.104 on pts/0
    [root@centos7 ~]# ls
    a.sh            dir1         key.pem                  pubkey.pem         usr
    [root@centos7 ~]# exit
    logout
    [zh@centos7 ~]$ exit
    logout
    [root@centos7 ~]#