sudo命令

Posted hanshanxiaoheshang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sudo命令相关的知识,希望对你有一定的参考价值。

sudo   http://wangchujiang.com/linux-command/c/sudo.html

 

su: Switch User

su -l user -c ‘COMMAND‘

# su centos -c ‘whoami‘  //临时切换身份,运行另外一个用户

su -l root -c ‘COMMAND‘

 su -l root

 

sudo:

可以让某个用户不需要拥有管理员的账号和密码,可以执行管理员的权限,就叫sudo授权机制

授权之后,能够让某用户以另外一个用户的身份临时的运行命令;

 

              配置文件:sudoers   /etc/sudoers

root       ALL=(ALL)    ALL   //哪个用户能够以什么身份执行什么命令

# sudo -u centos whoami   //管理员以centos的身份运行whoami命令

                     

%wheel  ALL=(ALL)     ALL    //表示此组内的用户能够以任何身份运行任何命令

%wheel:表示操作系统上的一个组,默认是以管理员身份运行

# usermod -a -G wheel hadoop   //管理员将centos加入到wheel组中,

#id hadoop

技术分享图片

确保/etc/sudoers中此行: %wheel  ALL=(ALL)     ALL    没有被注释

[[email protected] ~]$ sudo fdisk -l

技术分享图片

  

[email protected] ~]$ sudo su -    //虽然Hadoop没有管理的密码,但是利用此命令依然可以切换到管理员

技术分享图片

 

# visudo -f /etc/sudoers

使用visudo编辑/etc/sudoers可以检查语法错误

                     

who: 运行命令者的身份,user

where: 通过哪些主机,host

(whom):以哪个用户的身份, runas

which: 运行哪些命令,command

 

配置项

                       users     hosts=(runas)     commands

 

users:  有多个,用,分割

username

                               #uid

                               user_alias  用户别名,是在sudoers文件中单独指定的

                               %group_name  组名

                               %#gid   #不能少,固定符号

 

                         host:

                               ip

                               hostname

                               netaddr  网络地址

 

                         command:

                               command name

                               directory  目录所有命令

                               sudoedit  编辑sudoers文件,一般授权

 

                          Alias_Type NAME = item1, item2, ...

                                   NAME: 必须使用全大写字母;

                                   Alias_Type:

                                          User_Alias

                                          Host_Alias

                                          Runas_Alias

                                          Cmnd_Alias

示例:

User_Alias NETADMIN = netsuer1, netuser2

Cmnd-Alias NETADMINCMNDS = /usr/sbin/ip

NETADMIN        ALL=(root)     NETADMINCMNDS

#sudo -l  //可以列出当前用户利用sudo使用的所有命令

#sudo /usr/bin/ip

#sudo -k  //sudo输入密码后,一定时间内使用sudo命令是不需要输入密码的,使用-k是关闭无密码操作,再次使用sudu时就需要再次输入密码

                   

 Cmnd_Alias USERADMINCMNDS = /usr/sbin/useradd, /usr/sbin/usermod, /usr/bin/passwd [a-z]*, !/usr/bin/passwd root

 

              # sudo [-u user] COMMAND

                     -u user: 默认为root;

                     -k: 清除此前记录用户密码;

示例:

#visudo -f /etc/sudoers  //添加3行

User_Alias USERADMIN = poweruser1, poweruser2    //定义用户别名

Cmnd_Alias USERADMINCMNDS =  /usr/sbin/useradd, /usr/sbin/usermod, /usr/bin/passwd [a-z]*, !/usr/bin/passwd root   //定义命令别名

        /usr/bin/passwd [a-z]*:[a-z]*表示密码不能为空,必须有参数,如果为空就可以更改root密码为空,$ sudo passwd 直接就可以更改root的密码了     

技术分享图片

 /usr/bin/passwd后面没有[a-z]*,表示#sudo passwd后面可以没有参数,就表示更改默认用户的密码,即root 的密码

技术分享图片 

!/usr/bin/passwd root  前加必须!,否则$ sudo passwd可以更改管理员密码,直接排除此表达式:!/usr/bin/passwd root

技术分享图片

 

USERADMIN ALL=(root) NOPASSWD:USERADMINCMNDS   //定义权限

# useradd poweruser1

# useradd poweruser2

sudo有记录

 

以上是关于sudo命令的主要内容,如果未能解决你的问题,请参考以下文章

linux常用命令:sudo 命令

linux su和sudo命令的区别

linux sudo时说找不到cd命令, 怎么解决

ubuntu中的sudo命令

Linux命令-sudo

linux su和sudo命令的区别