linuxベースコマンドその:suとsudoユーザー切替コマンドの使用


1、suの使い方
suによりユーザ間を切り替えることができ、スーパーパーミッションユーザrootが通常または仮想ユーザに切り替える場合、パスワードは不要であり、一般ユーザが他の任意のユーザに切り替える場合、パスワード検証が必要である.
su[OPTIONオプションパラメータ][ユーザ]文法:su[-flmp][--help][--version][-][-c<コマンド>][-s][ユーザアカウント]
[root@localhost babyfish]# su --h
Usage: su [OPTION]... [-] [USER [ARG]...]
Change the effective user id and group id to that of USER.
  -, -l, --login               make the shell a login shell,
                               clears all envvars except for TERM,
                               initializes HOME, SHELL, USER, LOGNAME and PATH #     ,         ,  HOME,SHELL,USER,logname;  ,    PATH  
  -c, --command=COMMAND        pass a single COMMAND to the shell with -c #         ,        
  --session-command=COMMAND    pass a single COMMAND to the shell with -c
                               and do not create a new session
  -f, --fast                   pass -f to the shell (for csh or tcsh) #   csh tsch, shell         
  -m, --preserve-environment   do not reset HOME, SHELL, USER, LOGNAME
                               environment variables #     ,        
  -p                           same as -m
  -s, --shell=SHELL            run SHELL if /etc/shells allows it  #      shell
      --help     display this help and exit #    
      --version  output version information and exit #      
A mere - implies -l.   If USER not given, assume root.
Report su bugs to [email protected]
GNU coreutils home page: <http://www.gnu.org/software/coreutils/>
General help using GNU software: <http://www.gnu.org/gethelp/>
For complete documentation, run: info coreutils 'su invocation'

例:
アカウントをbabyfishに変更し、lsコマンドを実行した後、元の使用者に戻ることを終了します.
su -c ls babyfish
アカウントをrootに変更し、-fオプションを新しい実行shellに入力します.
su root -f
アカウントをgpadimnに変更し、作業ディレクトリをgpadimnのホームディレクトリに変更します.
su -gpadimn
2、sudoの使用
suコマンドを使用してユーザーを切り替える場合、一般ユーザーがユーザーのパスワードを切り替える必要があることを知らなければsuコマンドを正常に実行できないという明らかなセキュリティ問題があります.このような場合、管理者はシステム内の一部のユーザーが管理者のみが使用できるコマンドを使用できることを望んでいると仮定します.この場合、suコマンドを使用すると、管理者は自分のパスワードをこれらのユーザーに伝えなければなりません.これは明らかに安全ではありません.この場合、sudoコマンドでこの問題を解決できます.sudoコマンドのワークフローは次のとおりです.
(1)ユーザがsudoコマンドを実行すると,/etc/sudoersファイルがチェックされ,そのユーザがsudoコマンドを実行する権限があるか否かが判断される.(2)ユーザがsudoを実行できる権限を持っている場合,システムはユーザに「ユーザ独自のパスワードを入力する」ことを要求して確認する.(3)パスワード入力に成功した場合,sudoが指定したユーザを用いて指定したコマンドを実行することを開始する.
注意すべきは
sudoコマンドを使用する場合、ユーザーはユーザーのパスワードを切り替えるのではなく、自分のパスワードを入力します.sudoコマンドは、他のユーザのパスワードを知る必要がなく、ユーザが自分のパスワード、他のユーザのアイデンティティを通じて実行する作業を可能にする.suコマンドと同様に、sudoコマンドがrootユーザーである場合、パスワードを入力する必要はありません.
2.1、/etc/sudoersファイル
RHEL 5.xのデフォルトではrootユーザーのみがsudoコマンドを使用できますが、他のユーザーもsudoコマンドを使用できるようにするには、
rootユーザーが「visudo」コマンドを使用して/etc/sudoersファイルを変更するか、vimを使用して/etc/sudoersファイルを直接編集します.
ヒント:
rootユーザーの/etc/sudoersファイルに対する権限は読み取り専用であるため、vimを使用して/etc/sudoersファイルを編集した後、保存時に「!」を使用する必要があります.強制保存
/etc/sudoersファイルの「root ALL=(ALL)ALL」という行は、rootユーザーがsudoコマンドを使用して任意のユーザーに切り替えることができることを意味します.
他のユーザーがsudoコマンドを使用して/etc/sudoersファイルで構成できるようにする場合は、次のように設定します.
ユーザーまたはユーザー・グループがログイン可能なホスト=(変換可能なアイデンティティ)は、実行可能なコマンドを表します.
フォーマットの説明:
第1欄では、システム内のグループとユーザーが名前を変更できるため、適用対象:ユーザーまたはグループを規定します.ルールの適用対象をユーザーではなくグループと指定するには、グループオブジェクトの名前をパーセントで始まる必要があります.2番目のバーでは、このルールの適用ホストを指定します.この欄は、複数のシステム間でsudo環境を導入する場合に特に役立ちます.ここのALLはすべてのホストを表します.デスクトップシステムやsudoを複数のシステムに配備したくない場合は、このバーを対応するホスト名に変更します.3番目の欄の値は括弧内に置かれ、1番目の欄に規定されたユーザがどのような身分でコマンドを実行できるかを示す.最後の欄(例えば/usr/bin/find,/bin/rm)は、カンマで区切られたコマンドテーブルであり、これらのコマンドは、第1の欄に規定されたユーザによって第3の欄で指摘された身分で実行することができる.ここにリストされているコマンドは必ず絶対パスを使用することを指摘する必要がある.
例:
/etc/sudoersファイルに次のような内容を追加すると、ユーザー「user 1」はrootユーザーとして「chkconfig」コマンドを実行できます.
user1   ALL=(root)/sbin/chkconfig
/etc/sudoersファイルに次のような内容を追加すると、ユーザー「user 1」はrootユーザーとして使用できます.
すべてのコマンドを実行し、ユーザー「user 1」のパスワードを入力する必要はありません.
.「NOPASWD:」オプションは、パスワードを入力する必要がないことを示します.
user1   ALL=(root) NOPASSWD:ALL
/etc/sudoersファイルに次のような内容を追加すると、ユーザーグループ「gossipgirl」のすべてのメンバーがrootで使用できます.
ユーザーのアイデンティティは、すべてのコマンドを実行します.ユーザー・グループを指定するときは「%」で始まる必要があります.
%gossipgirl ALL=(root) ALL
/etc/sudoersファイルには、(1)User_Aliasは、システムにすでに存在するユーザグループを/etc/sudoersファイルで「%」で使用できることを上記の例で示した.同じユーザー・グループに属していない複数のユーザーがsudoコマンドを使用していくつかの操作を実行する必要がある場合は、「User_Alias」オプションを使用して、/etc/sudoersファイルでグループを定義します(このグループは/etc/sudoersファイルでのみ有効です).たとえば、/etc/sudoersファイルに次のような内容を追加すると、ユーザー「user 1」と「user 2」はrootユーザーのアイデンティティを使用して実行できます.「chkconfig」コマンド.
#ユーザー「user 1」および「user 2」を含む「TSTGRP」というグループを定義します.
User_Alias TSTGRP= user1,user2
#「TSTGRP」のグループユーザーはrootユーザーとして「chkconfig」コマンドを実行できます.
TSTGRP ALL=(root)/sbin/chkconfig
(2)Cmnd_Aliasは、/etc/sudoersファイルでコマンドのセットを複数回定義する必要がある場合にCmnd_を使用します.Aliasオプション.たとえば、/etc/sudoersファイルに次のような内容を追加すると、「TSTCMD」は「/sbin/chkconfig」および「/sbin/iptables」コマンドを表すことができます.
#「/sbin/chkconfig」および「TSTCMD」という名前のコマンド別名を定義します.
#'/sbin/iptablesコマンド.
Cmnd_Alias TSTCMD=/sbin/chkconfig,/sbin/iptables
#ユーザー「user 1」は、「TSTCMD」で定義したコマンドをrootユーザーとして実行できます.
user1   ALL=(root) TSTCMD
(3)コマンドオプションを拒否し、/etc/sudoersファイルを読み込むときにコマンドに厳密に一致します.このプロパティを使用すると、sudoコマンドを使用してコマンドを実行できるオプションがいくつかあります.たとえば、/etc/sudoersファイルに次のような内容を追加します.
#etc/sudoersファイルに次の内容を追加すると、ユーザー「user 1」はrootユーザーとして#iptablesコマンドを実行できますが、「-nL」オプションは使用できません.
user2 ALL=(root)  NOPASSWD:/sbin/iptables,!/sbin/iptables -nL
#etc/sudoersファイルに次の内容を追加すると、ユーザー「olivia」はrootユーザーとして実行できます.
#「passwdユーザー名」コマンド他のユーザーのパスワードを変更しますが、「passwd」および「passwd root」は使用できません.
#コマンド.
olivia ALL = NOPASSWD:!/usr/bin/passwd,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root
2.2、sudoコマンドの使用
[root@localhost babyfish]# sudo -h
sudo - execute a command as another user
usage: sudo [-D level] -h | -K | -k | -V
usage: sudo -v [-AknS] [-D level] [-g groupname|#gid] [-p prompt] [-u user name|#uid]
usage: sudo -l[l] [-AknS] [-D level] [-g groupname|#gid] [-p prompt] [-U user name] [-u user name|#uid] [-g groupname|#gid] [command]
usage: sudo [-AbEHknPS] [-r role] [-t type] [-C fd] [-D level] [-g groupname|#gid] [-p prompt] [-u user name|#uid] [-g groupname|#gid] [VAR=value] [-i|-s] [<command>]
usage: sudo -e [-AknS] [-r role] [-t type] [-C fd] [-D level] [-g groupname|#gid] [-p prompt] [-u user name|#uid] file ...
Options:
  -a type       use specified BSD authentication type
  -b            run command in the background
  -C fd         close all file descriptors >= fd
  -E            preserve user environment when executing command
  -e            edit files instead of running a command
  -g group      execute command as the specified group
  -H            set HOME variable to target user's home dir.
  -h            display help message and exit
  -i [command]  run a login shell as target user
  -K            remove timestamp file completely
  -k            invalidate timestamp file
  -l[l] command list user's available commands
  -n            non-interactive mode, will not prompt user
  -P            preserve group vector instead of setting to target's
  -p prompt     use specified password prompt
  -r role       create SELinux security context with specified role
  -S            read password from standard input
  -s [command]  run a shell as target user
  -t type       create SELinux security context with specified role
  -U user       when listing, list specified user's privileges
  -u user       run command (or edit file) as specified user
  -V            display version information and exit
  -v            update user's timestamp without running a command
  --            stop processing command line arguments
    :
-b:       ;
-h:    ;
-H: HOME          HOME    ;
-k:         ,        sudo        ;。
-l:                 ;
-p:           ;
-s<shell>:     shell;
-u<  >:            。       ,    root      ;
-v:        5  ;
-V :      。

/etc/sudoersファイルの構成が完了すると、sudoコマンドを使用して他のユーザーとしてコマンドを実行できます.このコマンドの構文は次のとおりです.
sudo[-u[<ユーザ名>|#]]コマンド-u[<ユーザ名>|#]:指定コマンドを実行するユーザを指定し、指定しない場合はrootユーザに指定コマンドを実行させたいことを示す.
最初にsudoコマンドを実行してパスワードを入力すると、このパスワードは5分保存されます.つまり、5分以内にsudoコマンドを使用してパスワードを入力する必要はありません.
例:
現在のユーザーは「user 1」です.
[user1@srv ~]$ id  
uid=500(user1) gid=500(user1) groups=500(user1)
rootユーザーとして「/sbin/iptables-L」コマンドを実行します.
[user1@srv ~]$ sudo -u root/sbin/iptables -L
Password:#パスワードを入力します.ユーザーrootのパスワードではなく、ユーザー「user 1」のパスワードを入力することに注意してください.
target     prot opt source  destination
Chain OUTPUT (policy ACCEPT)
target     prot opt source  destination
[user1@srv ~]$ sudo -u root/sbin/iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source  destination
Chain FORWARD (policy ACCEPT)
target     prot opt source  destination
Chain OUTPUT (policy ACCEPT)
target     prot opt source  destination