su和sudo
1.1 su
作用:切换到其他用户账户进行登录。
注意事项:
(1)root用户切换到普通用户是不需要输入密码确认。普通用户切换至root需要输入root密码确认,普通用户相互切换需要对方的密码
(2)如果su不带任何选项及参数,默认切换到root账户且不改变shell环境
(3)使用su时一定要带- 即su – 要不然对于一个运维来说是非常low的表现
实验 :su和 su -的区别
[root@desperadochn ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@desperadochn ~]# pwd
/root
[root@desperadochn ~]# su desperadochn
[desperadochn@desperadochn root]$ pwd
/root #还是root的家目录
[desperadochn@desperadochn root]$ echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin #还是root的环境变量
[desperadochn@desperadochn root]$ su - desperadochn
密码:
上一次登录:五 4月 29 23:28:37 CST 2016pts/1 上
[desperadochn@desperadochn ~]$ pwd
/home/desperadochn #这时家目录对了
[desperadochn@desperadochn ~]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/desperadochn/.local/bin:/home/desperadochn/bin #这才是desperadochn的环境变量
因此我们可以得出结论:
(1)su不带- 只切换用户不会切换环境变量及家目录等用户独有的设置。这可能会产生问题
(2)一定要用su –
1.2、sudo
当我们需要在执行一些不得不执行的命令但是这些命令只有root才能执行时,又不想或者不能切换成root(root权限太高,要慎用)这时我们就需要sudo
首先sudo需要由root授权,root将那个用户可以使用哪种命令进行授权,即对/etc/sudoers文件进行修改。
当普通用户需要使用获得授权的只有用root才能使用的命令时,在前面带上sudo,之后输入自己用户的密码,之后就能以root权限使用该命令了,密码有效期5分钟,在5分钟内再次使用sudo将不需要密码。
许多发行版甚至默认不允许root用户直接登录,但是可以用sudo操作只有root才能完成的操作。
特点:
(1)sudo能限制用户只能在某一台主机上执行指定命令。
(2)sudo提供了丰富的日志
(3)sudo的配置文件是 /etc/sudoers
实现:
1、查看sudo软件是否安装
[desperadochn@desperadochn ~]$ rpm -q sudo
sudo-1.8.6p7-16.el7.x86_64
2、/etc/sudoers 文件详解
## Host Aliases 定义主机别名
## Groups of machines. You may prefer to use hostnames (perhaps using
## wildcards for entire domains) or IP addresses instead.
# Host_Alias FILESERVERS = fs1, fs2 #格式类型
# Host_Alias MAILSERVERS = smtp, smtp2 #格式类型
## User Aliases #用户别名
## These aren't often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname
## rather than USERALIAS
# User_Alias ADMINS = jsmith, mikem 格式类型
## Command Aliases 定义命令别名
##
## user MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root ALL=(ALL) ALL #设置sudo部分,这一条表示root用户可以在任何主机运行任意命令
## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS 这一条表示sys组成员可以在任何主机运行网络、软件方面的命令
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL #%wheel组成员可以在任何主机上运行任何命令
## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL #%wheel组成员可以在任何主机上运行任何命令,且不需要密码
## Allows members of the users group to mount and unmount the
## cdrom as root
# %users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom 允许%user组用户运行sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom命令
## Allows members of the users group to shutdown this system
# %users localhost=/sbin/shutdown -h now 允许%user组成员可以在本机运行/sbin/shutdown -h now 命令
## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d
虽然我们可以通过vim等工具修改/etc/sudoers文件,有专门的命令设置sudo权限——visudo他的优点是带语法检查。
命令格式:
visudo [选项]
-c:启用check—only 模式,sudoers文件将被检查语法错误、所有者和模式
-q:不进行语法检查
-s:启用严格检查sudoers文件
使用visudo编辑/etc/sudoers文件
[root@desperadochn ~]# visudo
检查:
[root@desperadochn ~]# visudo -c
/etc/sudoers:解析正确
sudo命令 命令格式: sudo [选项] [命令]
-l:列出用户能执行的命令
实验:
## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
## user MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
desperadochn ALL=(root) /usr/sbin/useradd
试一下:
[root@desperadochn ~]# su - desperadochn
上一次登录:六 9月 30 03:30:43 CST 2018pts/1 上
[desperadochn@desperadochn ~]$ sudo -l
匹配此主机上 desperadochn 的默认条目:
requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
用户 desperadochn 可以在该主机上运行以下命令:
(root) /usr/sbin/useradd
[desperadochn@desperadochn ~]$ useradd xxx
-bash: /usr/sbin/useradd: 权限不够
[desperadochn@desperadochn ~]$ sudo /usr/sbin/useradd baibudonghei
[desperadochn@desperadochn ~]$ id baibudonghei
uid=1003(baibudonghei) gid=1003(baibudonghei) 组=1003(baibudonghei)
-
-
绝对在任何时候不要将sudo、setUid、setGid权限赋予工具型命令如vim或vi
-
sudu权限设置时最好带上命令详细参数
-