Linux下sudo命令实例讲解
1、概念:
sudo是linux下常⽤的允许普通⽤户使⽤超级⽤户权限的⼯具,允许系统管理员让普通⽤户执⾏⼀些或者全部的root命令,如halt,reboot,su等等。这样不仅减少了root⽤户的登陆和管理时间,同样也提⾼了安全性。Sudo不是对shell的⼀个代替,它是⾯向每个命令的。
它的特性主要有这样⼏点:
1、sudo能够限制⽤户只在某台主机上运⾏某些命令。
2、sudo提供了丰富的⽇志,详细地记录了每个⽤户⼲了什么。它能够将⽇志传到中⼼主机或者⽇志服务器。
3、sudo使⽤时间戳⽂件--⽇志来执⾏类似的“检票”系统。当⽤户调⽤sudo并且输⼊它的密码时,⽤户获得了⼀张存活期为5分钟的票(这个值可以在编译的时候改变)。
4、sudo的配置⽂件是/etc/sudoers,属性必须为0440,它允许系统管理员集中的管理⽤户的使⽤权限和使⽤的主机。
2、编辑配置⽂件命令:visudo
注意:编辑sudo的配置⽂件/etc/sudoers是⼀般不要直接使⽤vi(vi /etc/sudoers)去编辑,因为sudoers配置有⼀定的语法,直接⽤vi编辑保存系统不会检查语法,如有错也保存了可能导致⽆法使⽤sudo⼯具,最好使⽤visudo命令去配置。虽然visudo也是调⽤vi去编辑,但是保存时会进⾏语法检查,有错会有提⽰。
3、语法,参数
sudo [ -Vhl LvkKsHPSb ] │ [ -p prompt ] [ -c class│- ] [ -a auth_type ] [-u username│#uid ] command
参数:
-V 显⽰版本编号
-h 会显⽰版本编号及指令的使⽤⽅式说明
-l 显⽰出⾃⼰(执⾏ sudo 的使⽤者)的权限
-v 因为 sudo 在第⼀次执⾏时或是在 N 分钟内没有执⾏(N 预设为五)会问密码,这个参数是重新做⼀次确认,如果超过 N 分钟,也会问密码
-k 将会强迫使⽤者在下⼀次执⾏ sudo 时问密码(不论有没有超过 N 分钟)
-b 将要执⾏的指令放在背景执⾏
-p prompt 可以更改问密码的提⽰语,其中 %u 会代换为使⽤者的帐号名称, %h 会显⽰主机名称
-u username/#uid 不加此参数,代表要以 root 的⾝份执⾏指令,⽽加了此参数,可以以 username 的⾝份执⾏指令(#uid 为该 username 的使⽤者号码)-s 执⾏环境变数中的 SHELL 所指定的 shell ,或是 /etc/passwd ⾥所指定的 shell
-H 将环境变数中的 HOME (家⽬录)指定为要变更⾝份的使⽤者家⽬录(如不加 -u 参数就是系统管理者 root )
command 要以系统管理者⾝份(或以 -u 更改为其他⼈)执⾏的指令
⼆、实战演练
1、定义⼀个⽤户(tom)使其拥有添加⽤户的特殊权限,并进⾏创建⽤户操作。
①、创建tom并为其创建密码
[root@localhost ~]# useradd tom
[root@localhost ~]# echo "tom" | passwd --stdin tom
Changing password for user tom.
passwd: all authentication tokens updated successfully.
②、修改配置⽂件,为tom添加特殊权限useradd
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
tom ALL=(root) /usr/sbin/useradd ##添加权限,这⾥的/usr/sbin/useradd表⽰普通⽤户执⾏时必须使⽤全路径,可以使⽤which 命令查看哦!## Allows members of the 'sys' group to run networking, software,
③、切换到⽤户tom,验证特殊权限
[root@localhost ~]# su - tom ##切换⽤户
[tom@localhost ~]$ sudo -l ##查看此⽤户拥有的特殊权限
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 tom: ##这⾥需要验证密码,以保证是⽤户本⼈执⾏操作
Matching Defaults entries for tom 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 tom may run the following commands on this host:
(root) /usr/sbin/useradd ##可以以root⾝份,使⽤useradd命令
tom执⾏useradd
[tom@localhost ~]$ sudo /usr/sbin/useradd test1 ##添加⽤户test1
[tom@localhost ~]$ tail -1 /etc/passwd
test1:x:501:501::/home/test1:/bin/bash ##添加成功
④、查看⽇志/vat/log/secure
注意:要切换回root才有权限查看⽇志
[root@localhost ~]# tail /var/log/secure
Apr 5 13:55:58 localhost su: pam_unix(su-l:session): session opened for user tom by root(uid=0)
Apr 5 13:56:11 localhost su: pam_unix(su-l:session): session closed for user tom
Apr 5 13:56:17 localhost passwd: pam_unix(passwd:chauthtok): password changed for tom
Apr 5 13:56:17 localhost passwd: gkr-pam: couldn't update the 'login' keyring password: no old password was entered
Apr 5 13:56:23 localhost su: pam_unix(su-l:session): session opened for user tom by root(uid=0)
Apr 5 13:56:43 localhost sudo: tom : TTY=pts/0 ; PWD=/home/tom ; USER=root ; COMMAND=list
##tom以管理员⾝份执⾏了list命令
Apr 5 14:00:50 localhost sudo: tom : TTY=pts/0 ; PWD=/home/tom ; USER=root ; COMMAND=/usr/sbin/useradd test1
##tom以管理员⾝份执⾏了useradd命令,添加⽤户test1
Apr 5 14:00:50 localhost useradd[2128]: new group: name=test1, GID=501
Apr 5 14:00:50 localhost useradd[2128]: new user: name=test1, UID=501, GID=501, home=/home/test1, shell=/bin/bash
Apr 5 14:07:15 localhost su: pam_unix(su-l:session): session closed for user tom
以后可以使⽤此命令⽇志查看主机是否遭到⼊侵攻击,或者查看某⽤户登录进来并使⽤特殊权限执⾏错误指令等等。所以我们要实时监控此⽂件的动向。
⑤、-k参数⽰例
[root@localhost ~]# su - tom
[tom@localhost ~]$ sudo -k ##结束密码有效期
[tom@localhost ~]$ sudo /usr/sbin/useradd test2
[sudo] password for tom: ##有效期结束后,执⾏特殊命令,需重新验证密码
[tom@localhost ~]$ tail -1 /etc/passwd
test2:x:502:502::/home/test2:/bin/bash #添加test2成功
2、别名应⽤,alias:
sudoers⽂件⽀持使⽤别名对同类对象进⾏分组:组名必须使⽤全⼤写字母,使⽤逗号将同类对象命令隔开。
Host_Alias:主机别名
User_Alias:⽤户别名
Runas_Alias:在哪些主机以谁的⾝份运⾏的别名
Cmnd_Alias:命令别名
①、在配置⽂件中定义别名
[root@localhost ~]# visudo
Host_Alias USERHOSTS = 172.16.0.0/16,127.0.0.0/8,192.168.0.0/24 ##定义主机别名,可以在哪些机器执⾏特殊命令Cmnd_Alias USERADMIN=/usr/sbin/useradd,/usr/sbin/usermod,/usr/sbin/userdel ##定义命令别名
root ALL=(ALL) ALL
linux创建新用户和密码tom ALL=(root) USERADMIN ##此处定义tom可以执⾏别名USERADMIN中的所有命令
tom USERHOSTS=(ROOT) USERADMIN ##可以在别名USERHOSTS中机器上执⾏别名USERADMIN中的命令
验证:
[root@localhost ~]# su - tom
[tom@localhost ~]$ sudo /usr/sbin/userdel -r test2 ##删除⽤户test2
[sudo] password for tom:
[tom@localhost ~]$ tail -1 /etc/passwd ##删除成功
test1:x:501:501::/home/test1:/bin/bash
②、设禁⽌某⽤户执⾏某操作
tom ALL=(root) /usr/bin/passwd [a-zA-Z]*,!/usr/bin/passwd root
##tom可以以root的⾝份更改密码,但禁⽌更改root的密码。
③、设置执特权命了时,⽆需输⼊密码
tom ALL=(root) /usr/sbin/useradd,NOPASSWD: /usr/sbin/userdel,/usr/sbin/groupdel,PASSWD: /usr/sbin/usermod,/usr/sbin/groupmod
##这⾥的/usr/sbin/useradd 操作时必须使⽤密码;/usr/sbin/userdel, /usr/sbin/groupdel操作时可以不使⽤密码(跟在其后的所有操作⼀律不使⽤密码);/usr/sbin/us
验证:
[root@localhost ~]# su - tom
[tom@localhost ~]$ sudo /usr/sbin/useradd test3
[sudo] password for tom:
[tom@localhost ~]$ sudo -k
[tom@localhost ~]$ sudo /usr/sbin/useradd test4
[sudo] password for tom: ##useradd每次都需要输⼊密码
[tom@localhost ~]$ sudo -k
[tom@localhost ~]$ sudo /usr/sbin/userdel test3 ##执⾏userdel没有要求输⼊密码,NOPASSWD设置⽣效
[tom@localhost ~]$ tail -3 /etc/passwd
tom:x:500:500::/home/tom:/bin/bash
test1:x:501:501::/home/test1:/bin/bash
test4:x:503:503::/home/test4:/bin/bash
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论