在使用Linux系统中,有时候还需要做身份切换,这是为什么?

  • 使用普通账号:系统日常操作的好习惯

      虽然使用root对系统进行各种操作不受权限等方面的限制,但却存在重大的安全隐患,假如有人不小心输入的命令 rm -rf /。因此为了安全,一般都建议尽量以普通用户身份来进行系统日常操作,而在需要用户超级权限来管理和配置系统时才需要切换到 root用户。
  • 用较低权限启动系统服务

      相对于系统安全,我们必须要以某些系统账号执行某些程序。如MySQL,我们则可以新建一个mysql账号来专门执行MySQL服务或程序。这样可以最大限度的保证系统安全。
  • 系统安全策略限制

      为了系统安全,禁止远程以root账户登录系统是基本的安全策略手段

    基于以上考虑,在日常应用中都是使用普通账户进行登录和常用操作。如果需要维护系统或安装、更新软件时,则需要切换到root身份进行操作。而常用的方式主要有两个:

  • su:可以切换到指定的用户,如果切换到root,则需要知道root的密码
  • sudo:提前设置好sudo权限,执行以sudo 命令,则可以以root身份执行命令,相比于su而言,可以保证root密码不会泄漏。

su

    su全称为:switch user,其主要功能为进行任何身份的切换,其常用用法如下所示:

基本用法

su [选项] [用户名]
su -c 命令

常用选项如下所示:

选项 解释
-,-l 切换身份的同时初始化HOME/SHELL/USER/LOGNAME/PATH等变量
-c command 仅执行一次指定的命令,而后恢复原来的身份
-m 使用当前的环境设置而不读取新用户的配置文件
-s SHELL 运行指定的SHELL,仅支持/etc/shells中支持的SHELL

su注意事项

  • 若要完整切换到新用户的环境,必须要使用su - username或su -l username。这种功能类似于Windows注销当前用户再登录到指定用户
  • su -,-l:如果后面不指定用户名,则默认切换至root账户。
  • 使用root切换到任意其他账户,不需要输入密码,而反过来则需要输入密码。

用法示例

1、切换到root

[admin@localhost ~]$ su -
密码:
上一次登录:六 8月 18 18:10:46 CST 2018pts/2 上
最后一次失败的登录:六 8月 18 18:17:04 CST 2018从 58.218.92.37ssh:notty 上
最有一次成功登录后有 142 次失败的登录尝试。
[root@localhost ~]# id
uid=0(root) gid=0(root) 组=0(root)

root用户的后缀是 # ,而普通用户为 $

2、执行指定命令行后即返回原来的身份

[admin@localhost ~]$ head -n 2  /etc/shadow
head: 无法打开"/etc/shadow" 读取数据: 权限不够
[admin@localhost ~]$ su - -c "head -n 2 /etc/shadow"
密码:
root:$6$UbRYE8f8cxI757Lw$BJjLlD./2Om51RcIQadxZ8LbKpWzaVDISDpXd5rNPergZQWH2VAPF7LXRp/HCjx95xk2rd.Lw2Tiggs8Cr1WG0::0:99999:7:::
bin:*:17632:0:99999:7:::

sudo

    su使用起来非常方便,但同样也存在安全隐患。在一台服务器上面,如果有多人使用,在使用su命令切换到root后,则大家都知道了root密码,那么以后其他用户均可以以root用户身份登录和维护服务器,则安全策略形同虚设了。那该如何是好?Linux系统中则提供了另外一个命令sudo

基本用法

    sudo主要功能是以其他用户身份执行命令,而要输入的密码也仅仅是当前用户身身的密码而非root账户密码,类似于Windows系统中的以管理员身份运行。其常用用法如下所示:

sudo [选项] [命令]

常用选项如下所示:

选项 解释
-b 在后台执行指定的命令
-u 以指定用户身份运行,如不指定则默认为root
-e 编辑文件而不是运行命令

执行流程

  • 1、当用户执行sudo时,系统会在/etc/sudoers文件查找该用户是否有执行sudo的权限。
  • 2、若用户拥有执行sudo权限后,则输入用户自身的密码确认
  • 3、若密码确认成功,即可执行sudo后面的命令
  • 4、若切换身份与执行者身份相同,则无需要输入密码

      基于以上流程,能否使用sudo则要看/etc/sudoers中的设置

基本配置

  • 1、单一用户可执行root所有命令
[root@localhost ~]# visudo
## Allow root to run any commands anywhere
root ALL=(ALL) ALL # 系统默认
admin ALL=(ALL) ALL # 用户增加

各项解释如下所示:

root/admin:用户账号,指定哪些账号可使用sudo命令

ALL=(ALL):登录者的来源主机名=可切换的身份

  登录者的来源主机名:设置账号可由哪一台网络主机连接过来,即设置可信任主机。

  可切换的身份:账号可以切换成什么身份来执行后续的命令

ALL:可执行的命令:这个路径必须以绝对路径来填写

  ALL是特殊关键字,代表任何身份、任何主机和任何命令的意思。

  • 2、利用用户组和免密码的功能

      相比较于通过单个用户而言,通过用户组来控制更加方便灵活。
# 修改用户的属组,只用户属于wheel则可以执行sudo命令
[root@localhost ]# usermod -a -G wheel admin [root@localhost ~]# visudo
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL # %wheel:代表任何组 # 使用sudo 命令而不需要输入密码
%wheel ALL=(ALL) NOPASSWD: ALL
  • 3、有限制的命令操作

      以上两种方法,可以方便用户利用root身份执行任何事情,如果想给用户分配部分权限执行命令,该如何配置?
[root@localhost ~]# visudo
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
# 该用户仅有执行 ls 的权限,路径必须为绝对路径
admin ALL=(ALL) /usr/bin/ls
# 添加用户的执行sudo命令的排除权限,! 表示不可执行
admin ALL=(ALL) !/usr/bin/ls,!/usr/bin/passwd,!/usr/bin/passwd root
  • 4、通过别名批量设置权限
[root@localhost ~]# visudo
# 批量设置别名
# User_Alias ADMINS = jsmith, mikem
User_Alias ADMINS = admin,test,surpassme # 批量设置命令权限
## Command Aliases
Cmnd_Alias SOFTWARE = !/usr/bin/rpm,!/usr/bin/up2date,!/usr/bin/yum # 设置sudo的限制命令
ADMINS ALL=(root) SOFTWARE

通过别名进行权限设置均需要使用大写字符

  • 5、搭配su使用

        在很多时间我们需要大量执行很多root的工作,所以一直使用sudo会觉得很麻烦,那有没有简单的办法使sudo搭配su,一次性转换为root,而且还是用户自身的密码?方法如下所示:
[root@localhost ~]# visudo
# 批量设置别名
# User_Alias ADMINS = jsmith, mikem
User_Alias ADMINS = admin,test,surpassme # 设置sudo的限制命令
ADMINS ALL=(root) /usr/bin/su -
# 使用按以下输入即可,即可直接切换为root用户
[root@localhost ~]# sudo su -

本文同步在微信订阅号上发布,如各位小伙伴们喜欢我的文章,也可以关注我的微信订阅号:woaitest,或扫描下面的二维码添加关注:

Linux 基础教程 43-su和sudo命令的更多相关文章

  1. linux系统(centos)下su和sudo命令的区别

    linux系统(centos)下su和sudo命令的区别 区别 我们在日常使用过程中,这2个命令很多时候能达到相同的效果,对细节区别十分模糊,这里进行简单的解释和区分.希望大家能够正确使用这2个命令, ...

  2. 嵌入式LINUX基础教程 第2版

    嵌入式LINUX基础教程  第2版 目录 第1章 入门 11.1 为什么选择Linux 11.2 嵌入式Linux现状 21.3 开源和GPL 21.4 标准及相关组织 31.4.1 Linux标准基 ...

  3. 07 Linux su和sudo命令的区别

    一. 使用 su 命令临时切换用户身份 1.su 的适用条件和威力 su命令就是切换用户的工具,怎么理解呢?比如我们以普通用户beinan登录的,但要添加用户任务,执行useradd ,beinan用 ...

  4. Linux 中su和sudo命令的几个注意点

    1 su与su - 的区别 1.1命令说明 su对应是是no-login shell的方式进行账号登陆,命令行的变量配置还是切换账号前的变量. su-对应的是login shell的方式进行账号登陆, ...

  5. Linux su和sudo命令的区别,并获得root权限

    su(superuser) su表示切换用户,如: 输入:su命令后回车表示切换当前的用户到root用户,或者: 输入:su - root(或者其他用户名)这里加了"-"后表示也切 ...

  6. Linux 基础教程 37-进程命令

    pidof     我们知道每个小孩一出生就会一个全国唯一的编号来对其进行标识,用于以后上学,办社保等,就是我们的身份证号.那么在Linux系统中,用来管理运行程序的标识叫做PID,就是大家熟知的进程 ...

  7. Linux 基础教程 44-history命令

    什么是history     在Linux系统日积月累的使用中,我们会输入很多命令.而在我们想重复上一个命令时,通过使用方向键向上翻就可以查看我们已经输入和使用过的命令.那大家有没有想过这个命令保存在 ...

  8. Linux基础教程

    Linux基础教程之<Linux就该这么学>之学习笔记第一篇... ========================= 一.Basic Linux Commands    基本的Linux ...

  9. su和sudo命令详解

    我们知道,在Linux下对很多文件进行修改都需要有root(管理员)权限,比如对/ect/profile等文件的修改.很多情况下,我们在进行开发的时候都是使用普通用户进行登录的,尤其在进行一些环境变量 ...

随机推荐

  1. CentOS 6.6下 BCM4312 802.11b/g无线网卡驱动安装

    1.目前www.broadcom.com网站上最新版本为hybrid-v35,但此版本与2.6.32不匹配,无法识别验证密码,搜索网上说是要求升级内核,后根据http://www.dadclab.co ...

  2. ubuntu 16.04安装HUSTOJ过程

    一.背景介绍: 因为工作需要,想在学校搭建一个OJ平台用于程序测试与评价.于是需要搭建oJ,由于之前都是在云端服务器搭建系统,没有在实际服务器平台搭建过,所以遇到不少坑,都靠自己来填补.故而写下此教程 ...

  3. 【pc杂谈】win7系统通过虚拟网卡共享wifi

    用管理员权限进入dos命令行 启用并设定虚拟WiFi网卡:netsh wlan set hostednetwork mode=allow  ssid=paulnet key=paulwinflo(注意 ...

  4. bzoj4466 超立方体

    Description 超立方体是立方体在高维空间内的拓展(其在 2 维情况下退化为正方形,1维情况下退化成线段).在理论计算机科学领域里,超立方体往往可以和 2 进制编码联系到一起.对理论计算机科学 ...

  5. HDU 1710 Binary Tree Traversals(树的建立,前序中序后序)

    Binary Tree Traversals Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  6. android基于adb的性能测试

    应用CPU.内存.点亮.流量等数据,是应用测试的重要性能指标.本次以UC浏览器为例. 当前UC测试中,每个正式版本都会专门做一轮性能测试,测试数据包括: 1小时内存数据 1小时CPU数据 24小时电量 ...

  7. 配置myslq提示 the configuration step starting server is taking longer than expected we apologize for thi

    .卸载重新安装,勾选日志配置选项,自定义日志输出路径

  8. uwsgi配置文件的一些细节,uwsgi错误invalid request block size

    [uwsgi] #socket = #这种是使用代理方式访问的,不能直接输入端口访问,要搭配其他的HTTP服务比如NGINX,设置反向代理 http =: #这种是直接可以输入IP端口访问 modul ...

  9. leetcode204

    public class Solution { public int CountPrimes(int n) { ) { ; } ]; ]; ; ; i < n; i++) { mark[i] = ...

  10. eclipse Android 开发基础 Activity 窗体 界面

    eclipse Android 开发基础 新建工程 新建布局layout,new Android Activity就相当于窗体Form. 新建Activity自动生成src下同名的java代码. pu ...