大家好,欢迎来到IT知识分享网。
概述
共同点:都是root用户的权限;
不同点:su仅仅取得root权限,工作环境不变,还是在切换之前用户的工作环境;sudo是完全取得root的权限和root的工作环境。
一、 su 切换用户
su是switch user或 substitute简称。
格式:su -l USERNAME(-l为login,即登陆的简写)
-l可以将l省略掉,所以此命令常写为su – USERNAME
三种方式切换到root的命令:su,su -和su – root
su等同于su root。
单纯使用su切换到root,读取变量的方式是non-login shell,很多环境变量都不会改变,尤其是是home,PATH,仅仅是切换到root身份,可通过env命令查看信息。
su – 是 su – root 缩写,是login shell方式,它是先以root身份登录然后再运行别的操作。可以通过命令exit或logout,或者是快捷键Ctr+D即可返回原用户身份。
假设仅切换到root做一次操作,在su后面加个-c參数,运行完这次操作后,会自动切换回自己身份。
这样存在缺点: su - root #需要root密码,共享root密码不太安全
。 你需要提供 root的密码给别人
二、 sudo 提权
类似密码锁的访客功能:我有root密码,我可以临时给访客一个临时密码,该访客可以进入某个地方(不可以修改密码),但我可以撤销你的权限,这样等于给了别人权限,但可控,因为root密码一直在我自己手里
。
superuser do或 switch user do 的简写
格式:sudo -u USERNAME COMMAND
当普通用户通过sudo以root用户执行命令时,sudo后面的 -uUSERNAME可省略,即sudo COMMAND 即意为sudo以root用户执行。
sudo的运行流程:
1).当用户运行sudo时,系统于/etc/sudoers
文件里查找该用户是否有运行sudo的权限;
2).若用户具有可运行sudo的权限,那么让用户输入用户自己的password(通常是用户密码,但也可能是目标用户的密码,或者也可以通过 NOPASSWD 标志来跳过密码验证)。
3).假设password正确。之后,sudo 创建一个子进程,调用 setuid() 来切换到目标用户,接着,它会在上述子进程中执行参数给定的 shell 或命令。
开始进行sudo后面的命令,root运行sudo不用输入password。
开始仅root能运行sudo,切换到root身份通过visudo查看/etc/sudoers
这个配置文件,默认情况下 /etc/sudoers 是不能被任何人直接编辑的,因为它的权限是 440,虽然也可以对其赋予写权限后再编辑,但推荐使用 visudo 命令编辑该文件。visudo 命令可能默认会用 nano 编辑器打开配置文件,如果想修改打开时使用的默认编辑器,可以使用如下命令配置:
$sudoupdate-alternatives --config editor
或者直接指定环境变量
$sudoEDITOR=vim visudo
第一列是用户账号,第二列的ALL意思是登陆者的来源主机名,第三列等号右边小括号里的ALL是代表能够切换的身份。第四列ALL是可运行的命令。
使用命令visudo
USER/GROUP HOST=(USER[:GROUP]) [NOPASSWD:] COMMANDS
1)语法1
root ALL =(ALL) ALL
用户 所有主机 所有角色 所有命令
2)语法2
%wheel ALL = (ALL) ALL
用户组 所有主机 所有角色 所有命令
实例:
username1 ALL = (ALL) ALL
username2 ALL=(ALL) /usr/bin/touch, /usr/sbin/useradd,(root) /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
若设置命令为/bin/su -,只需执行一次sudo su – 即可切换成root身份。通过配置sudoers文件,授权其他普通用户,可以切换成其他用户身份去执行命令,而不必每次都加上sudo。
当连续使用sudo的时候,在一定时间内是不用再次输入password,是系统自己设定的,在五分钟之内运行sudo仅仅须输入一次password。
然后username1用户登录后执行:
su – root #必须有root密码
或
sudo su –
或
sudo su – root#只需要输入自身密码。
Mac上的sudo -i
sudo -i :切换用户到root
补充
[usera@node01 ~]$ sudo su – userb
[sudo] password for usera:
若希望不需输入密码:
sudo vim /etc/sudoers尾部添加
usera ALL=(ALL:ALL) NOPASSWD:ALL
Defaults 配置项:
使用 Defaults 配置,可以改变 sudo 命令的行为,如:
指定用户尝试输入密码的次数,默认值为3
Defaults passwd_tries=5
设置密码超时时间,默认为 5 分钟
Defaults passwd_timeout=2
默认 sudo 询问用户自己的密码,添加 targetpw 或 rootpw 配置可以让 sudo 询问 root 密码
Defaults targetpw
指定自定义日志文件
Defaults logfile=“/var/log/sudo.log”
要在自定义日志文件中记录主机名和四位数年份,可以加上 log_host 和 log_year 参数
Defaults log_host, log_year, logfile=“/var/log/sudo.log”
保持当前用户的环境变量
Defaults env_keep += “LANG LC_ADDRESS LC_CTYPE COLORS DISPLAY HOSTNAME EDITOR”
Defaults env_keep += “ftp_proxy http_proxy https_proxy no_proxy”
安置一个安全的 PATH 环境变量
Defaults secure_path=“/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin”
别名配置
设置别名
User_Alias PWMNG = manager1, manager2, manager3
Cmnd_Alias PWCMD = !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root PWMNG ALL=(root) PWCMD
别名大致分为四种:
Host_Alias 主机别名
Cmnd_Alias 命令别名
User_Alias 用户别名,可以是用户,用户组
Runas_Alias 目的用户别名
配置示例:
主机别名
Host_Alias FILESERVERS = fs1, fs2
Host_Alias MAILSERVERS = smtp, smtp2
用户别名
User_Alias ADMINS = huoty, kong
命令别名
Cmnd_Alias SHUTDOWN = /sbin/reboot, /sbin/poweroff
Cmnd_Alias PKGMGMT = /usr/bin/dpkg, /usr/bin/apt-get, /usr/bin/aptitude
Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig
Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/iptables
Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /bin/mount, /bin/umount
Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp
Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
允许 ADMINS 用户执行包管理和关机命令
ADMINS ALL = PKGMGMT, SHUTDOWN
允许 sys 用户组中的用户使用 NETWORKING 等所有别名中配置的命令
%sys ALL = NETWORKING, PKGMGMT, SERVICES, STORAGE, DELEGATING, PROCESSES
命令参数
以下列举 sudo 命令的一些常用参数:
-l 列出当前用户所拥有的权限
-E 保持当前用户的环境变量
-H 设置 HOME 环境变量为目标用户的主目录
-u 以指定用户运行命令
-k 结束密码有效期限,即下次再执行时需要重新输入密码
– 停止解析命令行参数,即之后命令不再作为其控制餐宿
其他配置与使用技巧
查看 sudo 命令文件的信息如下:
$ ls -l /usr/bin/sudo
-rwsr-xr-x 1 root root Mar 13 2015 /usr/bin/sudo
可以发现 sudo 上启用了 setuid 位,即当任何用户运行这个二进制文件时,其将以 root 用户的权限运行。
sudo 无法使用 Shell 的内置命令。如 history 等:
$ sudo history
sudo: history: command not found
解决这个问题的办法是,临时切换到 root shell,并在那里执行任何命令,包括 Shell 的内置命令:
$ sudo bash
当前用户的命令别名不会被应用到 sudo。如果需要这样,可以在 ~/.bashrc 或者 /etc/bash.bashrc 中加入:
alias sudo=’sudo ’
如果希望使用 sudo 一次执行多个命令,可以使用 bash -c,如:
$ sudo – bash -c ‘pwd; hostname; whoami’
参考
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/155557.html