原文发表于《网络安全和信息化》2017年第1期,现转发到博客。

Linux系统对用户的权限定义比较严格,root用户在系统中具有至高无上的权限,而普通用户的权限则受到严格限制。在实际使用中,管理员一般都是先以普通用户的身份登录,然后当需要时再利用su命令切换到root用户身份。对于普通用户,如果需要执行更高权限的命令,则可以由管理员通过sudo命令对其授权。本文将介绍su和sudo命令在Linux运维工作中的一些常见用法。

1.    限制能够使用su命令的用户

默认情况下,任何用户只要知道了root用户的密码,都可以执行su命令切换到root用户。但是我们可能并不希望所有用户都能切换到root身份,而是只想指定某个用户可以切换,比如只允许zhangsan用户使用su命令切换身份。

要限制使用su命令的用户,需要进行两个方面的设置。

首先需要启用pam_wheel认证模块,

[root@server ~]# vim /etc/pam.d/su       //将文件中下面一行前的#去掉

auth            required        pam_wheel.so use_uid

这样凡是执行“su – root”命令的用户都将受到限制,只有wheel组中的成员才有权限执行该命令。

因而下面需要做的就是将zhangsan加入到wheel组中。

[root@server ~]# gpasswd -a zhangsan wheel   

[root@server ~]# id zhangsan

uid=501(zhangsan) gid=501(zhangsan) groups=501(zhangsan),10(wheel)

这样当使用一个不属于wheel组成员的账号切换到root时,系统便会拒绝。

例如,使用lisi切换到root,即使输入了正确的root用户密码,也会提示“密码不正确”。

[lisi@localhost ~]$ su - root

口令:

su: 密码不正确

2.    利用sudo命令对普通用户授权

利用su命令切换到root身份,必须要知道root用户的密码。这对于管理员没什么问题,但如果将密码透露给一个普通用户,则很明显不利于系统安全管理,因而对于普通用户更常使用的是sudo命令。

sudo命令的作用主要在于能够允许经过授权的个别普通用户以root权限执行一些授权使用的管理命令。

比如以普通用户zhangsan的身份创建用户,系统会提示没有权限:

[zhangsan@localhost ~]$ useradd test

-bash: /usr/sbin/useradd: 权限不够

下面让zhangsan使用sudo命令以root权限去执行命令。注意,普通用户使用sudo执行命令时会要求提供自己的密码进行验证。

[zhangsan@localhost ~]$ sudo useradd test

[sudo] password for zhangsan:

zhangsan is not in the sudoers file.    This incident will be reported.

zhangsan使用sudo命令仍然无法创建用户,这是因为在Linux中只有被授权的用户才能执行sudo命令,而且使用sudo也只能执行那些被授权过的命令。

所以要使用sudo命令首先必须要经过管理员的授权设置,需要修改配置文件“/etc/sudoers”,sudoers文件的基本配置格式如图1所示。

图 1 sudoers文件的配置格式

例如授权普通用户zhangsan可以通过sudo方式执行所有的命令:

[root@localhost ~]# vim /etc/sudoers     //在文件末尾增加下列内容

zhangsan    ALL=ALL

授权普通用户lisi可以执行/sbin/和/usr/sbin/目录中的所有命令:

lisi    ALL=/sbin/*,/usr/sbin/*

注意,“/etc/sudoers”是一个只读文件,修改完成保存退出时要使用“wq!”命令。

如果希望用户只能执行部分命令,可以在“/etc/sudoers”中指定用户所能执行的命令的文件路径,命令的文件路径可以通过which命令查找。

例如:授权zhangsan只能执行useradd、userdel和passwd命令。

zhangsan    ALL=/usr/sbin/useradd,/usr/sbin/userdel,/usr/bin/passwd

用户每次在执行sudo命令时都要输入自己的密码,为了省去普通用户执行sudo命令时需要输入密码的麻烦,可以在“/etc/sudoers”进行如下设置:

zhangsan    ALL=NOPASSWD:/usr/sbin/useradd,/usr/sbin/userdel,/usr/bin/passwd

zhangsan被授权执行passwd命令,为了防止zhangsan修改root用户的密码,我们可以在/etc/suoders中加入“! /usr/bin/passwd root”:

zhangsan    ALL=NOPASSWD:/usr/sbin/useradd,/usr/sbin/userdel,/usr/bin/passwd,! /usr/bin/passwd root

除了针对用户授权之外,我们也可以对用户组授权,这样用户组内的所有成员用户就都具有了执行sudo命令的权限。如果授权的对象是用户组,需要在组名的前面加上“%”。

例如:授权managers组内的成员用户可以添加、删除用户账号。

%managers    ALL=NOPASSWD:/usr/sbin/useradd,/usr/sbin/userdel,/usr/bin/passwd,! /usr/bin/passwd root

最后我们以zhangsan的身份登录系统,执行“sudo –l”命令可以查看当前用户被授权执行的命令,如图2所示。

图 2查看用户被授权执行的命令

进行命令测试,发现zhangsan可以更改普通用户lisi的密码,即使密码不符合安全规则也同样可以设置成功,这证明zhangsan是在以root用户的权限执行passwd命令。而当zhangsan试图更改root用户的密码时,系统则提示没有权限。测试结果如图3所示。

图 3命令测试结果

在Linux系统中应用su和sudo相关推荐

  1. Linux系统用户管理su、sudo详细讲解

    文章目录 1 Linux用户和组 1.1 Linux系统用户分类 1.2 和用户关联的四个文件 1.3 管理用户重要命令汇总 1.4 管理用户组命令汇总 2 相关目录介绍 2.1 /etc/skel目 ...

  2. linux sudo命令全称,你知道Linux系统中的sudo 命令吗?

    今天小编要跟大家分享的文章是关于Linux系统中sudo命令介绍.熟悉Linux操作系统的小伙伴们你们是否了解sudo命令.sudo 表示 "superuser do". 它允许已 ...

  3. linux无密码sudo,在Linux系统中运行没有sudo密码的特定命令

    本文介绍在Linux操作系统中运行没有sudo密码的特定命令的方法. 背景 我在AWS上部署了Ubuntu系统上的脚本,此脚本的主要目的是检查特定服务是否以固定间隔运行(确切地说每隔一分钟),并且如果 ...

  4. jenkins linux虚拟机,Linux系统中jenkins使用的简单介绍

    jenkins是一个开放的软件平台,在Linux系统中的软件平台也不少,但是jenkins一直是比较受欢迎的那一个.本文就来简单介绍一下Linux系统中jenkins安装配置和使用. 安装jenkin ...

  5. find linux 目录深度_浪里淘沙,详解Linux系统中Find命令的实用技巧

    知了小巷:浪里淘沙,详解Linux系统中Find命令的实用技巧. 啊哈,找到了! 当我们需要在Linux系统上定位某个文件或目录时,find命令通常是必备之选. 它使用起来非常简单,但有许多不同的可选 ...

  6. 用户管理 之 Linux 系统中的超级权限的控制

    作者:北南南北 赞助: eTony,pandonny,懒猫, Arch 来自:LinuxSir.Org 摘要: 超级用户是系统最高权限的拥有者,是系统管理唯一的胜任者:由于权限的超级并且达到无所不能的 ...

  7. Linux系统中常用操作命令

    常用指令 ls        显示文件或目录      -l          列出文件详细信息l(list)      -a         列出当前目录下所有文件及目录,包括隐藏的a(all) m ...

  8. centos 卸载软件_一篇看懂!详解-Linux系统中安装软件的三种方法

    Linux系统中安装软件的三种方法 注:本文主要以CentOS为例介绍常用的安装方式,其他版本linux在文章底部 Linux系统中怎么安装软件,首先说一下应用程序与系统命令的区别: 1.文件位置 系 ...

  9. Linux 系统中的超级权限的控制

      在Linux操作系统中,root的权限是最高的,也被称为超级权限的拥有者.普通用户无法执行的操作,root用户都能完成,所以也被称之为超级管理用户.   在系统中,每个文件.目录和进程,都归属于某 ...

最新文章

  1. 所有各数据库或文件的连接串定义CHM文件.
  2. NASA打算送机器蜜蜂去探索火星上的生命痕迹
  3. 菜鸟玩基金(四)——注意事项
  4. 在VMware上装苹果系统后全屏
  5. boost::mpl模块实现transform相关的测试程序
  6. JQ 取CHECKBOX选中项值
  7. js 正则表达式判断价格
  8. Huge page使用的一些问题
  9. 洛谷P1074 靶形数独 [搜索]
  10. 系统调用服务号 linux 2.6.32
  11. atitit.组件化事件化的编程模型--服务端控件(1)---------服务端控件与标签的关系
  12. asp.net 读取导入的project(mpp)文件
  13. 用setuna截图时自动放大_setuna截图软件下载
  14. 数据结构:堆栈的区别
  15. 计算机电脑配置ppt,计算机应用基础之word2010课件.ppt
  16. 普通蓝牙防丢器已过时,onn推出支持苹果 Find My 防丢器
  17. 鸿海精密收购东芝闪存业务志在必得 或出价270亿美元
  18. libgdx 打飞机游戏实现教程
  19. 【漫画】各大互联网公司的真实“人”生
  20. 员工与客户之间就是一个微信

热门文章

  1. linux socket编程web服务器实现报文解析,[Socket][网络编程]程序范例:Linux下连接WEB服务器...
  2. html选择第一个clss,css3如何选择第一个子元素?
  3. linux erlang安装教程,linux(CentOS7)中安装erlang(20.3)以及rabbitmq(3.6.15)的步骤以及一些注意事项...
  4. java匿名类对象的坏处_java匿名内部类的使用注意事项
  5. linux服务器搭建教程c,Linux服务器上搭建web项目环境
  6. 哪里有高中教师教学计算机能力培训,04060406_王世红_高中教师信息技术能力的培训.doc...
  7. python执行脚本时的命令行选项_Python 处理脚本的命令行参数(二):使用click
  8. Hadoop HIVE 安装配置(单机集群)
  9. 3.8 Softmax 回归
  10. opencv 图像转换(傅里叶变换)