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授权机制
授权之后,能够让某用户以另外一个用户的身份临时的运行命令;
![](/qrcode.jpg)
配置文件: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 没有被注释
[hadoop@COS ~]$ sudo fdisk -l
hadoop@COS ~]$ 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有记录