su和sudo
su:切换用户
su:非登录式切换,即不会读取/etc/profile及profile.d下的脚本文件;
(测试过,好像会读取profile文件,但切换用户家目录下的设定
貌似不会读取)
su -:登录式切换,包括用户名、家目录等变量会发生改变
su 【-【user】】-c command:以某个用户的身份执行一次命令;
Tip:
user省略时,默认为root用户的身份
sudo:以root用户的身份执行某命令,执行sudo的用户必须在/etc/sudoers中有定义(编辑此文件用命令visodu),
且要输入该用户的登录密码;
sudo管理
1、sudo用户权限配置文件:/etc/sudoers
编辑此文件时使用visudo命令(此命令编辑结束保存后会提示语法错误,vi不会);
设定格式:允许执行sudo的用户 允许执行命令的主机=(允许以哪个用户执行命令)允许执行的命令:
例:所有用户以任意身份从任意主机运行任何命令
ALL ALL=(ALL) ALL
例:用户user1以任意身份从任意主机运行任何命令
user1 ALL=(ALL) ALL
例:用户user1以root身份从任意主机运行任何命令
user1 ALL=(root) ALL
例:用户user1以root身份从www.shxing.com主机(主机名或IP)运行任意命令
user1 www.shxing.com=(root)ALL
例:允许user1用户管理root用户除外的其他用户的密码
user1 ALL=(root) !/usr/sbin/passwd,/usr/sbin/passwd [1-9a-zA-Z]*,!/usr/sbin/passwd root
Tip:!表示不允许,第一条表示不允许不加参数直接执行sudo passwd,因为此时修改的是root的密码
第二条允许以root身份修改字母开头的用户(一般用户名都以字母开头)密码
第三条不允许修改root用户的密码
经测试第二条和第三条顺序不能调换,调换后不会禁止sodu passwd root;
别名:主机别名、命令别名、账号别名,别名的名称要大写
主机别名:在对多个主机定义相同的sudo权限时,可以先定义主机别名,再设定别名权限,避免过多重复内容
账号别名:对多个账号设置相同的sudo权限时使用,如下:
@设置一组密码管理员,除root密码外
User_Alias ADMPW = admpw1,admpw2,admpw3,admpw4 #定义账号别名(即用户组)
ADMPW ALL=(root) !/usr/bin/passwd,/usr/bin/passwd [1-9a-zA-Z]*,!/usr/bin/passwd root 设置账号别名的sudo权限
@设置非管理员账号的系统管理员,能够以用户自己的密码su到root用户
(相较于设定用户为管理员并无两样。。,用户可以修改root账户密码
极不安全,不推荐设置)
ADMPW ALL=(root) /usr/bin/su -
命令别名:某些用户会用到多条同样的命令,我们可以把这些命令定义为
一个命令别名,即命令集,方便书写
/etc/sudoers文件中已经定义了一些命令别名,如:
NETWORKING:定义了一组关于网络管理的命令
SERVICES:定义了一组关于服务管理的命令
SOFTWARE:定义了一组关于软件管理的命令
STORAGE:定义了一组磁盘管理的命令
PROCESSES:定义了一组进程管理的命令
等等,去掉命令别名前面的注释启用它们
ADMPW ALL=(root) NETWORKING
Question:
1、普通用户对于命令文件本身具有执行权限,为什么不能执行?
2、哪些命令普通用户不能执行