linux sudo命令学习指南

发布时间:2020-02-22编辑:脚本学堂
本文介绍下,linux中sudo命令的用法,有需要的朋友参考下。

linux中,sudo 使一般使用者不需要知道超级使用者的密码即可获得权限
首先,超级使用者将一般使用者登记在特殊的档案中(通常是/etc/sudoers),即完成对该使用者的授权(此时该使用者称为“sudoer”);
在一般使用者需要取得特殊权限时,其可在命令前加上“sudo”,此时 sudo 将会询问该使用者自己的密码(以确认终端机前的是该使用者本人),回答后系统即会将该命令的进程以超级使用者的权限执行。

不用root用户进行ssh登录,登录之后使用su切换用户。

su 的问题
1,输入密码
2,完全拥有相关 su 的权限

使用sudo命令:
1,不输入别人的密码
2,需要授权
 

复制代码 代码示例:

[user1@jbxue ~]$ /sbin/ifconfig eth0
eth0       Link encap:Ethernet  HWaddr 00:0C:29:30:C1:B6
inet addr:192.168.126.128  Bcast:192.168.126.255  Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe30:c1b6/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:226 errors:0 dropped:0 overruns:0 frame:0
TX packets:100 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:25147 (24.5 KiB)  TX bytes:19250 (18.7 KiB)
Interrupt:67 Base address:0x2024

[user1@jbxue ~]$ /sbin/ifconfig eth0:1 192.168.1.1
SIOCSIFADDR: Permission denied
SIOCSIFFLAGS: Permission denied

[root@jbxue ~]# vim /etc/sudoers
user1   ALL=/sbin/ifconfig

[user1@jbxue ~]$ sudo /sbin/ifconfig eth0:1 192.168.1.1
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

#1) Respect
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for user1:
[user1@jbxue ~]$ /sbin/ifconfig eth0:1
eth0:1     Link encap:Ethernet  HWaddr 00:0C:29:30:C1:B6
inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
Interrupt:67 Base address:0x2024

visudo 可以检查语法
vim /etc/sudoers
 

复制代码 代码示例:
user     MACHINE=COMMANDS
user1 ALL=    NETWORKING
user2 ALL=(root) NOPASSWD:/bin/mount (NOPASSWD 必须第四段 ALL=(root))

1,user2 用户名字
2,ALL=(root) 主机=(转换成什么身份)
3,NOPASSWD:/sbin/fdisk, PASSWD:/sbin/mkfs.ext3
4,不要口令:命令,要口令:命令
工作中: user1 ALL=(root) NOPASSWD:ALL

首先,需要配置一些alias,有利于下面配置权限的操作。
Alias主要分成4种
Host_Alias
Cmnd_Alias
User_Alias
Runas_Alias
1) 配置Host_Alias:就是主机的列表
 

复制代码 代码示例:
Host_Alias      HOST_FLAG = hostname1, hostname2, hostname3

2) 配置Cmnd_Alias:就是允许执行的命令的列表,命令前加上!表示不能执行此命令.
命令一定要使用绝对路径,避免其他目录的同名命令被执行,造成安全隐患 ,因此使用的时候也是使用绝对路径!
 

复制代码 代码示例:
Cmnd_Alias      COMMAND_FLAG = command1, command2, command3 ,!command4

3) 配置User_Alias:就是具有sudo权限的用户的列表
 

复制代码 代码示例:
User_Alias USER_FLAG = user1, user2, user3

4) 配置Runas_Alias:就是用户以什么身份执行(例如root,或者oracle)的列表
 

复制代码 代码示例:
Runas_Alias RUNAS_FLAG = operator1, operator2, operator3

5) 配置权限
配置权限的格式如下:
 

复制代码 代码示例:
USER_FLAG HOST_FLAG=(RUNAS_FLAG) COMMAND_FLAG

如果不需要密码验证的话,则按照这样的格式来配置
 

复制代码 代码示例:
USER_FLAG HOST_FLAG=(RUNAS_FLAG) NOPASSWD: COMMAND_FLAG

配置格式如下:
 

复制代码 代码示例:
# Host alias specification
Host_Alias      EPG = 192.168.1.1, 192.168.1.2
# User alias specification
# Cmnd alias specification
Cmnd_Alias      SQUID = /opt/vtbin/squid_refresh, !/sbin/service, /bin/rm
Cmnd_Alias      ADMPW = /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd, !/usr/bin/passwd root
# Defaults specification
# User privilege specification
root    ALL=(ALL) ALL
support EPG=(ALL) NOPASSWD: SQUID
support EPG=(ALL) NOPASSWD: ADMPW