su,sudo

来源:互联网 发布:大学用的java教材 编辑:程序博客网 时间:2024/04/23 18:19

一.su

1.su是最简单的身份切换命令,使用方法:

su [-lm] [-c command] [username]


2.参数

-:单纯使用“-”,代表使用login-shell的变量文件读取方式来登录系统;

-l:与“-”类似,但后面需要加欲切换的用户账号,也是login-shell的方式;

-m:与-p一样,表示使用目前的环境变量,而不读取新用户的配置文件;

-c:仅执行一次命令,所以需要跟上要执行的命令;


不加任何参数时,读取的变量文件方式为non-login shell的方式,所以很多变量还是原先使用环境下的,没有发生改变,包括PATH变量。

所以,想要完整地切换到新用户的环境,必须使用su - username 或su -l username方式。

但是,想要切换到root用户时,就不可避免得需要让该用户取得root密码,这样就会有安全问题,所以,有了sudo这种方式。


二.sudo

1.sudo的执行只需要自己的密码即可,当然,有/etc/sudoers这个文件的限制,并非所有用户都可使用sudo,使用方法:

sudo [-b] [-u 新用户账号] command


2.参数:

-b:将后续的命令让系统自行执行,而不与目前的shell产生影响;

-u:后面可以接欲切换的用户,若无此项则表示切换身份为root;


3.sudo执行的流程:

1)用用户执行sudo时,系统于/etc/sudoers文件中查找该用户是否有权限;

2)若用户具有可执行sudo的权限后,需要用户输入自己的密码(配置/etc/sudoers文件也可免输密码,后面会讲到该文件的配置);

3)若密码输入成功,就可是执行sudo后跟的命令;

4)若欲切换的身份与执行者身份相同,那也不需要输入密码。


4.visudo和/etc/sudoers

1)visudo只是调用vi将/etc/sudoers调出来进行修改,但是会自动检测该文件的语法,如果有错会有提示;

2)/etc/sudoers配置:

root ALL=(ALL)ALL

root:代表sudo用户,若前面有%,则表示用户组;

ALL:代表使用者的来源主机名,这个参数可以指定客户端计算机,可以是IP地址或网络;

ALL:代表可切换的身份,表示可以切换到什么身份来执行后续的命令;

ALL:代表具体的命令(如果命令前有“!”,表示不可执行),务必使用绝对路径(ALL是特殊的关键字,代表任何身份,主机或命令):


为了更好地规划特定用户的特定权限,经常需要有特定的设置,以下三个参数是/etc/sudoers配置中的关键字:

Host_Alias:将主机归类;

User_Alias:将用户归类;

Cmnd_Alias:将命令归类;

最后按以下格式组合,给用户分配权限:

User_Alias Host_Alias=(user)(NOPASSWD:)Cmnd_Alias  ===========>若有NOPASSWD,则表示执行命令时不用输入自己的密码。


3)例:

User_Alias ADMINS = zhou,zhou1                                       ===============>定义用户ADMINS为zhou和zhou1

Cmnd_Alias NETWORKING = !/sbin/route, /sbin/ifconfig   ===============>定义一组网络命令,命名为NETWORKING,包括不可执行/sbin/route,可以执行 /sbin/ifconfig

Cmnd_Alias SU = !/usr/bin/su ===============>定义一组命令,命名为SU,即不可执行/usr/bin/su

Cmnd_Alias SOFTWARE = /usr/bin/yum ===============>定义一组命令,命名为SOFTWARE,即可以执行 /usr/bin/yum


ADMINS  ALL=(root)       NETWORKING,SU ================>指定用户别名为ADMINS的“用户”(实际上就是zhou和zhou1),可以以root用户使用NETWORKING,SU中的命令,即不可执行/sbin/route,可以执行 /sbin/ifconfig,不可执行/usr/bin/su

ADMINS  ALL=(ALL)    NOPASSWD:SOFTWARE================>运行sudo的用户可以切换至任何身份而不需要输入自己的密码就能使用SOFTWARE中的命令。


结果:

[zhou@localhost ~]$ sudo /sbin/route
Sorry, user zhou is not allowed to execute '/sbin/route' as root on localhost.localdomain.

[zhou@localhost ~]$ sudo /usr/bin/su
Sorry, user zhou is not allowed to execute '/usr/bin/su' as root on localhost.localdomain.

[zhou@localhost ~]$ sudo /usr/bin/yum install -y lrzsz
Loaded plugins: fastestmirror, langpacks

...

[zhou@localhost ~]$ sudo /sbin/ifconfig 
[sudo] password for zhou: 
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

...


1 0
原创粉丝点击