Linuxを含むUNIXシステムは一般のユーザでログインできたとしても、大したことは行えず、rootにならなければインストールやシステムの設定変更などは行うことができません。
セキュリティ上は一般ユーザアカウントだけを作成して、特定のコマンドだけ許可するということが望ましいのですが、それを実現するのがsudoになります。
sudoの設定ファイルは/etc/sudoersです。
# cat /etc/sudoers <省略> Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin ## 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 ## Allows people in group wheel to run all commands %wheel ALL=(ALL) ALL ## Same thing without a password # %wheel ALL=(ALL) NOPASSWD: ALL ## Allows members of the users group to mount and unmount the ## cdrom as root # %users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom ## Allows members of the users group to shutdown this system # %users localhost=/sbin/shutdown -h now ## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment) #includedir /etc/sudoers.d |
基本的な設定の書式は以下となります。ユーザ名は頭に%をつければグループとみなされます。
ユーザー名 ホスト名=(権限) [NOPASSWD:] 対象コマンド1,対象コマンド2, |
そのためデフォルトで記載されているwheelから始まる行はwheelグループに属しているユーザはsudoコマンドを使えば何でも実行可能ということになります。ただし、NOPASSWDがついてないので実行の際にはパスワードを求められます。
# useradd -g wheel testuser # passwd testuser Changing password for user testuser. New password: [パスワード設定後、testuserでログイン] $ whoami testuser $ cat /etc/shadow cat: /etc/shadow: Permission denied $ sudo cat /etc/shadow We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. [sudo] password for testuser: [testuserのパスワードを入力] <表示> |
上はグループ単位で制御してますが、ユーザ単位で制御することのほうが多いです。正直セキュリティ上はあまり良くはないと思うのの、利便性を考えたら特定ユーザはパスワードなしでrootになれるという手法をとったほうが運用上は便利です。下記はtestuserに全ての権限をパスワードなしで実行できるというものです。
/etc/sudoersは直接編集するのではなくvisudoコマンドを利用して編集することが奨励されています。
# visudo <追記> testuser ALL=(ALL) NOPASSWD: ALL |
この状態でtestuserはrootパスワードなしでsudoコマンドでrootになれるようになります。パウワードを付ける場合はNOPASSWDオプションを外せばパスワードを聞かれます。
# visudo <追記> testuser ALL=(ALL) ALL |
上記でtestuserのパスワードでrootになることができます。