账户授权

简介:

 有这样一种场景,当管理员通过普通用户账户登录到设备时,突然有个需求需要操作,但该普通用户账户没有这个权限。这时,管理员只能退出设备,重新使用root账户登录。然后使用完成后,重新利用普通用户账户登录。这种方式无疑是繁琐而低效的。这里我们有两种处理的方式。一种是在线切换账户,相对应的命令是su。另一种则是让普通用户临时以root的身份执行操作,相对应的命令是sudo。下面我们将学习下这两个命令的使用方式。

1、su 切换用户账户,拥有该用户账户的操作权限

命  令 作  用
whoami 查看当前用户
su user1 在切换用户的同时,不改变环境变量
su - user1 在切换用户的同时,将环境变量都切换到该用户的环境变量
su -

切换到root用户下,环境变量也变为root用户的环境变量

su - -c "id" user1 使用user1这个账号去执行id命令

在执行以上命令的时候,普通用户需要切换用户的口令,而root用户可以使用su切换到任何用户下,而且不用输入密码。

测试示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@server02 ~] # su user1
[user1@server02 root]$  whoami
user1
[user1@server02 root]$  echo  $PATH
/usr/local/sbin : /usr/local/bin : /usr/sbin : /usr/bin : /root/bin
[user1@server02 root]$  exit
exit
[root@server02 ~] # su - user1
上一次登录:二 5月 30 13:18:32 CST 2017pts /0 
[user1@server02 ~]$  echo  $PATH
/usr/local/bin : /bin : /usr/bin : /usr/local/sbin : /usr/sbin : /home/user1/ . local /bin : /home/user1/bin
[user1@server02 ~]$  exit
登出
[root@server02 ~] # su - -c "id" user1
uid=1000(user1) gid=1000(user1) 组=1000(user1) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

su的优缺点:

     su的确为管理带来方便,通过切换到root下,能完成所有系统管理工具,只要把root的密码交给任何一个普通用户,他就能切换到root来完成所有的系统管理工作。但通过su切换到root后,也有不安全因素。比如系统有10个用户,而且都参与管理。如果这10个用户都涉及到超级权限的运用,做为管理员如果想让其它用户通过su来切换到超级权限的root,必须把root权限密码都告诉这10个用户;如果这10个用户都有root权限,通过root权限可以做任何事,这在一定程度上就对系统的安全造成了威协;想想Windows吧,简直就是恶梦;“没有不安全的系统,只有不安全的人”,我们绝对不能保证这 10个用户都能按正常操作流程来管理系统,其中任何一人对系统操作的重大失误,都可能导致系统崩溃或数据损失;所以su 工具在多人参与的系统管理中,并不是最好的选择,su只适用于一两个人参与管理的系统,毕竟su并不能让普通用户受限的使用。超级用户root密码应该掌握在少数用户手中。

2、sudo 可以让普通用户临时以root的身份执行一条命令,该用户只需要知道自己的密码

    通过visudo命令打开sudo的配置文件(/etc/sudoers),可以进行一些关于sudo授权的配置。如定义host、user以及命令的别名等。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
user1   ALL=(root)      NOPASSWD:/bin/ls,/bin/cat
@新增的上行中,user1表示用户,ALL表示所有来源IP,root表示root的权限,NOPASSWD表示不需要口令即可执行,/bin/ls和/bin/cat表示可执行的命令。
## 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
 
## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL
@可以将相同权限的用户打包成组统一做策略。
## Same thing without a password
# %wheel        ALL=(ALL)       NOPASSWD: ALL

测试示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[user2@server02 root]$  sudo  ls  /root/
 
We trust you have received the usual lecture from the  local  System
Administrator. It usually boils down to these three things:
 
     #1) Respect the privacy of others.
     #2) Think before you type.
     #3) With great power comes great responsibility.
 
[ sudo ] password  for  user2: 
user2 不在 sudoers 文件中。此事将被报告。
[user1@server02 root]$  exit
exit
[root@server02 ~] # su user1
[user1@server02 root]$  sudo  -l            @查看本账户支持的 sudo 命令
匹配此主机上 user1 的默认条目:
     !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE 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
 
用户 user1 可以在该主机上运行以下命令:
     (root) NOPASSWD:  /bin/ls , (root)  /bin/cat
[user1@server02 root]$  sudo  ls  /root/
anaconda-ks.cfg  test1    test12
[user1@server02 root]$

sudo 的适用条件:

   由于su对切换到超级权限用户root后,权限的无限制性,所以su并不能担任多个管理员所管理的系统。如果用su来切换到超级用户来管理系统,也不能明确哪些工作是由哪个管理员进行的操作。特别是对于服务器的管理有多人参与管理时,最好是针对每个管理员的技术特长和管理范围,并且有针对性的下放给权限,并且约定其使用哪些工具来完成与其相关的工作,这时我们就有必要用到sudo。


    通过sudo,我们能把某些超级权限有针对性的下放,并且不需要普通用户知道root密码,所以sudo相对于权限无限制性的su来说,还是比较安全的,所以sudo也能被称为受限制的su。另外sudo是需要授权许可的,所以也被称为授权许可的su。


    sudo执行命令的流程是当前用户切换到root(或其它指定切换到的用户),然后以root(或其它指定的切换到的用户)身份执行命令,执行完成后,直接退回到当前用户;而这些的前提是要通过sudo的配置文件/etc/sudoers来进行授权。


%user1 ALL=/usr/sbin/*,/sbin/*

    如果用户组出现在/etc/sudoers 中,前面要加%号,比如%user1,中间不能有空格:


    如果我们在/etc/sudoers 中加上如上一行,表示user1用户组下的所有成员,在所有可能的出现的主机名下,都能切换到root用户下运行/usr/sbin和/sbin目录下的所有命令;

取消程序某类程序的执行,要在命令动作前面加上!号;在本例中也出现了通配符的*的用法。


user1 ALL=/usr/sbin/*,/sbin/*,!/usr/sbin/fdisk 

注:把这行规则加入到/etc/sudoers中;但您得有user1这个用户组,并且user1也是这个组中的才行;本规则表示user1用户在所有可能存在的主机名的主机上运行/usr/sbin和/sbin下所有的程序,但fdisk 程序除外。


3、su与sudo的区别

sudo:暂时切换到超级用户模式以执行超级用户权限,提示输入密码时该密码为当前用户的密码,而不是超级账户的密码。不过有时间限制,Ubuntu默认为一次时长15分钟。


su:切换到某某用户模式,提示输入密码时该密码为切换后账户的密码,用法为“su 账户名称”。如果后面不加账户时系统默认为root账户,密码也为超级账户的密码。没有时间限制。


sudo -i:为了频繁的执行某些只有超级用户才能执行的权限,而不用每次输入密码,可以使用该命令。提示输入密码时该密码为当前账户的密码。没有时间限制。执行该命令后提示符变为“#”而不是“$”。想退回普通账户时可以执行“exit”或“logout” 。


其实,还有几个类似的用法:

sudo /bin/bash:这个命令也会切换到root的bash下,但不能完全拥有root的所有环境变量,比如PATH,可以拥有root用户的权限。这个命令和 sudo -s是等同的;

sudo -s:如上;

sudo su:这个命令,也是登录到了root,但是并没有切换root的环境变量,比如PATH;

sudo su -:这个命令,纯粹的切换到root环境下,可以这样理解,先是切换到了root身份,然后又以root身份执行了su - ,这个时候跟使用root登录没有什么区别。这个结果貌似跟sudo -i 的效果是一样的,但是也有不同,sudo 只是临时拥有了root的权限,而su则是使用root账号登录了linux系统。


所以,我们再来总结一下:

sudo su -  约等于sudo -i 

sudo -s    完全等于sudo /bin/bash,约等于sudo su 

sudo 终究被一个"临时权限的帽子"扣住,不能等价于纯粹的登录到系统里。


@引用内容来源于网络,作为附加参考资料放入本篇。










本文转自Grodd51CTO博客,原文链接:http://blog.51cto.com/juispan/1936876,如需转载请自行联系原作者


相关文章
|
SQL 运维 安全
【笔记】用户指南—账号和安全—三权分立—功能介绍
PolarDB-X新增三权分立模式,您可以将高权限账号拥有的权限分给系统管理员、安全管理员和审计管理员这3个角色,避免因权限高度集中带来的风险,增强数据库的安全性。
423 0
|
12天前
|
人工智能 JSON 供应链
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
LucianaiB分享零成本畅用JVS Claw教程(学生认证享7个月使用权),并开源GeoMind项目——将JVS改造为科研与产业地理情报可视化AI助手,支持飞书文档解析、地理编码与腾讯地图可视化,助力产业关系图谱构建。
23475 11
畅用7个月无影 JVS Claw |手把手教你把JVS改造成「科研与产业地理情报可视化大师」
|
16天前
|
人工智能 缓存 BI
Claude Code + DeepSeek V4-Pro 真实评测:除了贵,没别的毛病
JeecgBoot AI专题研究 把 Claude Code 接入 DeepSeek V4Pro,跑完 Skills —— OA 审批、大屏、报表、部署 5 大实战场景后的真实体验 ![](https://oscimg.oschina.net/oscnet/up608d34aeb6bafc47f
5239 19
Claude Code + DeepSeek V4-Pro 真实评测:除了贵,没别的毛病
|
17天前
|
人工智能 JSON BI
DeepSeek V4 来了!超越 Claude Sonnet 4.5,赶紧对接 Claude Code 体验一把
JeecgBoot AI专题研究 把 Claude Code 接入 DeepSeek V4Pro 的真实体验与避坑记录 本文记录我将 Claude Code 对接 DeepSeek 最新模型(V4Pro)后的真实体验,测试了 Skills 自动化查询和积木报表 AI 建表两个场景——有惊喜,也踩
6265 15
|
6天前
|
人工智能 缓存 Shell
Claude Code 全攻略:命令大全 + 实战工作流(完整版)
Claude Code 是一款运行在终端环境下的 AI 编码助手,能够直接在项目目录中理解代码结构、编辑文件、执行命令、执行开发计划,并支持持久化记忆、上下文压缩、后台任务、多模型切换等专业能力。对于日常开发、项目维护、快速重构、代码审查等场景,它可以大幅减少手动操作、提升编码效率。本文从常用命令、界面模式、核心指令、记忆机制、图片处理、进阶工作流等维度完整说明,帮助开发者快速上手并稳定使用。
1312 2
|
5天前
|
前端开发 API 内存技术
对比claude code等编程cli工具与deepseek v4的适配情况
DeepSeek V4发布后,多家编程工具因未适配其强制要求的`reasoning_content`字段而报错。本文对比Claude Code、GitHub Copilot、Langcli、OpenCode及DeepSeek-TUI等主流工具的兼容性:Claude Code需按官方方式配置;Langcli表现最佳,开箱即用且无报错;Copilot与OpenCode暂未修复问题;DeepSeek-TUI尚处早期阶段。
956 2
对比claude code等编程cli工具与deepseek v4的适配情况