su命令及sudo服务
1、su命令
su表示切换到某某用户模式,提示输入密码时该密码为切换后账户的密码;如果是root使用su命令则不需要输入密码,因为root的权限是最高的。
su 跟su -的区别:su只是切换了root身份,但Shell环境仍然是普通用户的Shell;而su -连用户和Shell环境一起切换成root身份了。
例:普通用户gril切换到root,先用su root再使用su - root查看环境变量的区别
[gril@localhost ~]$ pwd
/home/gril
[gril@localhost ~]$ su root
密码:
[root@localhost gril]# pwd
/home/gril
可以看出用户所处目录依旧是gril的用户目录,接下来使用su - root看看
[gril@localhost ~]$ su - root
密码:
上一次登录:二 2月 11 19:28:40 CST 2025pts/0 上
[root@localhost ~]# pwd
/root
[root@localhost ~]#
用户目录更改为root目录
2、sudo命令
sudo命令用于给普通用户提供额外的权限,语法格式为sudo [参数] 用户名。如果担心直接修改配置文件会出现问题,则可以使用 sudo 命令提供的 visudo 命令来配置用户权限。
有关sudo操作的日志在centos中默认记录在/var/log/secure中
参数如下:
-b 在后台执行指令。
-h 显示帮助。
-H 将HOME环境变量设为新身份的HOME环境变量。
-k 结束密码的有效期限,也就是下次再执行sudo时便需要输入密码。
-l 列出目前用户可执行与无法执行的指令。
-p 改变询问密码的提示符号。
-s 执行指定的shell。
-u <用户> 以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份。
-v 延长密码有效期限5分钟。
-V 显示版本信息。
-S 从标准输入流替代终端来获取密码
方式一:visudo
在最下方添加下面四行中任意一条
youuser ALL=(ALL) ALL
%youuser ALL=(ALL) ALL
youuser ALL=(ALL) NOPASSWD: ALL
%youuser ALL=(ALL) NOPASSWD: ALL
youuser ALL=(ALL) NOPASSWD:特定命令(绝对路径)
用户 允许使用的主机 = (谁的身份) 可执行的命令列表
第一行:允许用户youuser执行sudo命令(需要输入密码).
第二行:允许用户组youuser里面的用户执行sudo命令(需要输入密码).
第三行:允许用户youuser执行sudo命令,并且在执行的时候不输入密码.
第四行:允许用户组youuser里面的用户执行sudo命令,并且在执行的时候不输入密码.
第五行:允许用户youuser执行sudo命令,但只允许执行NOPASSWD后面的命令
方式二(cp -rp /etc/sudoers /tmp/bak-sudoers-bak):vim /etc/sudoers(不推荐,不像方式一那样如果配置的规则有误会提示语法有误)
vim /etc/sudoers
示例1:给jack用户添加sudo权限但仅能执行ls、mv、touch命令且无需验证密码
visudo
jack ALL = (ALL) NOPASSWD: /usr/bin/ls,/usr/bin/touch,/usr/bin/mv
[jack@localhost ~]$ sudo touch /root/jack.txt
[jack@localhost ~]$ sudo ls -l /root/jack.txt
-rw-r--r--. 1 root root 0 2月 11 22:08 /root/jack.txt
[jack@localhost ~]$ sudo rm -f /root/jack.txt
[sudo] jack 的密码:
对不起,用户 jack 无权以 root 的身份在 localhost 上执行 /bin/rm -f /root/jack.txt。
示例2:给map用户添加sudo权限执行所有命令且不需要验证密码
visudo
map ALL = (ALL) NOPASSWD:ALL
[root@localhost ~]# su - map
上一次登录:二 2月 11 21:39:07 CST 2025pts/0 上
[map@localhost ~]$ pwd
/home/map
[map@localhost ~]$ ls -l /root
ls: 无法打开目录/root: 权限不够
[map@localhost ~]$ sudo ls -l /root
总用量 26136
-rw-------. 1 root root 1241 4月 11 2024 anaconda-ks.cfg
-rw-r--r--. 1 root root 192 2月 7 19:26 case.sh
-rw-r--r--. 1 root root 2525 1月 26 15:15 Centos-7.repo
drwxr-xr-x. 3 root root 40 2月 8 15:20 logs
-rw-r--r--. 1 root root 11 2月 11 21:35 map.txt
drwxr-sr-x. 3 root root 34 2月 8 15:26 pulsar
[map@localhost ~]$ sudo touch /root/haha.txt
[map@localhost ~]$ sudo ls -l /root
总用量 26136
-rw-r--r--. 1 root root 136 2月 7 20:15 99.sh
-rw-------. 1 root root 1241 4月 11 2024 anaconda-ks.cfg
-rw-r--r--. 1 root root 192 2月 7 19:26 case.sh
-rw-r--r--. 1 root root 2525 1月 26 15:15 Centos-7.repo
-rw-r--r--. 1 root root 315 2月 11 11:32 cs.sh
-rw-r--r--. 1 root root 87 2月 7 19:51 djs.sh
-rw-r--r--. 1 root root 0 2月 11 21:48 haha.txt
drwxr-xr-x. 3 root root 40 2月 8 15:20 logs
-rw-r--r--. 1 root root 11 2月 11 21:35 map.txt
drwxr-sr-x. 3 root root 34 2月 8 15:26 pulsar
drwxr-xr-x. 22 just just 4096 2月 5 14:59 Python-3.9.0
-rw-r--r--. 1 root root 26724009 2月 5 14:45 Python-3.9.0.tgz
-rw-r--r--. 1 root root 371 2月 7 15:21 test.sh
通过sudo命令可以正常对root权限的文件目录进行修改