`

linux权限管理之su与sudo详解

 
阅读更多
 概要:在linux上进行有关权限的操作时,往往会碰到这样的问题:1)为什么安装软件需要在apt-get之前加上sudo?刚刚安装完毕,再次运行apt-get却不需要再在前面加sudo?2)为何有时运行sudocommand的时候显示useris not in the sudoers?3)su和sudo有什么不同?4)多人使用同一台主机,在授权很多用户具有root权限的时候如何保证安全性?本文将主要为你解答上述问题。
 
1.su
 
su–运行替换用户和组标识的shell,修改有效用户标识和组标识为USER的.
 
1.1对比su与su– root(后者等于su-)
实例比较:
hyk@hyk-linux:~$su
Password:(注意,切换以后的pwd并没有改变)
root@hyk-linux:/home#echo $HOME
/root
root@hyk-linux:/home#exit(后面显示exit)
exit
hyk@hyk-linux:~$su - root
Password:(切换以后pwd改变了)
root@hyk-linux:~#echo $HOME
/root
root@hyk-linux:~#exit(后面显示logout)
logout
从以上实例,看出:su-,以root身份登录,执行实际用户login以后的所有操作(包括环境变量的设置等);而前者只是简单的用户切换,pwd等信息。
 
1.2su的缺点
1)不安全su工具在多人参与的系统管理中,并不是最好的选择,su只适用于一两个人参与管理的系统,毕竟su并不能让普通用户受限的使用;超级用户root密码应该掌握在少数用户手中。
2)麻烦:需要把root密码告知每个需要root权限的人。
 
2.sudo
 
2.1sudo的出现背景
        由于su对切换到超级权限用户root后,权限的无限制性,所以su并不能担任多个管理员所管理的系统。如果用su来切换到超级用户来管理系统,也不能明确哪些工作是由哪个管理员进行的操作。特别是对于服务器的管理有多人参与管理时,最好是针对每个管理员的技术特长和管理范围,并且有针对性的下放给权限,并且约定其使用哪些工具来完成与其相关的工作,这时我们就有必要用到sudo。
  通过sudo,我们能把某些超级权限有针对性的下放,并且不需要普通用户知道root密码,所以sudo相对于权限无限制性的su来说,还是比较安全的,所以sudo也能被称为受限制的su;另外sudo是需要授权许可的,所以也被称为授权许可的su;
  sudo执行命令的流程是当前用户切换到root(或其它指定切换到的用户),然后以root(或其它指定的切换到的用户)身份执行命令,执行完成后,直接退回到当前用户;而这些的前提是要通过sudo的配置文件/etc/sudoers来进行授权;
注意:
hyk@hyk-linux:~$sudo apt-get install aaaa
[sudo]password for hyk:
看到没有,执行sudo的时候,我们需要输入的是当前用户hyk的密码,而不是root密码。
 
2.2Sudo的特性:
       §sudo能够限制用户只在某台主机上运行某些命令。
  §sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器。
  §sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票(这个值可以在编译的时候改变)。也就是说,我刚刚输入了sudocat /etc/issue 然后可以再次只需要输入cat/etc/issue即可,不需要再次输入sudo。
  §sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0411。
 
2.3.sudo的使用
权限:在/etc/sudoers中有出现的使用者
  使用方式:sudo-V
  sudo-h
  sudo-l
  sudo-v
  sudo-k
  sudo-s
  sudo-H
  sudo[ -b ] [ -p prompt ] [ -u username/#uid] -s
  用法:sudocommand
  说明:以系统管理者的身份执行指令,也就是说,经由sudo所执行的指令就好像是root亲自执行
  参数:
  -V显示版本编号
  -h会显示版本编号及指令的使用方式说明
  -l显示出自己(执行sudo的使用者)的权限
  -v因为sudo在第一次执行时或是在N分钟内没有执行(N预设为五)会问密码,这个参数是重新做一次确认,如果超过N分钟,也会问密码
  -k将会强迫使用者在下一次执行sudo时问密码(不论有没有超过N分钟)
  -b将要执行的指令放在背景执行
  -pprompt可以更改问密码的提示语,其中%u会代换为使用者的帐号名称,%h会显示主机名称
  -uusername/#uid不加此参数,代表要以root的身份执行指令,而加了此参数,可以以username的身份执行指令(#uid为该username的使用者号码)
  -s执行环境变数中的SHELL所指定的shell,或是/etc/passwd里所指定的shell
  -H将环境变数中的HOME(家目录)指定为要变更身份的使用者家目录(如不加-u参数就是系统管理者root)
  command要以系统管理者身份(或以-u更改为其他人)执行的指令
  范例:
  sudo-l列出目前的权限
  sudo-V列出sudo的版本资讯
 
2.4.sudoers的配置
        sudoers是sudo的主要配置文件,linux下通常在/etc目录下,如果是solaris,缺省不装sudo的,编译安装后通常在安装目录的etc目录下,不过不管sudoers文件在哪儿,sudo都提供了一个编辑该文件的命令:visudo来对该文件进行修改。强烈推荐使用该命令修改sudoers,因为它会帮你校验文件配置是否正确,如果不正确,在保存退出时就会提示你哪段配置出错的。
言归正传,下面介绍如何配置sudoers
首先写sudoers的缺省配置:
#############################################################
#sudoers file.
#
# This file MUST be edited with the 'visudo'command as root.
#
# See the sudoers man page for the detailson how to write a sudoers file.
#
# Host alias specification
#User alias specification
# Cmnd alias specification
# Defaultsspecification
# User privilege specification
root ALL=(ALL)ALL
# Uncomment to allow people in group wheel to run allcommands
# %wheel ALL=(ALL) ALL
# Same thing without apassword
# %wheel ALL=(ALL) NOPASSWD: ALL
# Samples
# %usersALL=/sbin/mount /cdrom,/sbin/umount /cdrom
# %userslocalhost=/sbin/shutdown -hnow
##################################################################
2.4.1.最简单的配置,让普通用户support具有root的所有权限
执行visudo之后,可以看见缺省只有一条配置:
rootALL=(ALL) ALL
那么你就在下边再加一条配置:
supportALL=(ALL) ALL
这样,普通用户support就能够执行root权限的所有命令
以support用户登录之后,执行:
sudosu -
然后输入support用户自己的密码,就可以切换成root用户了
2.4.2让普通用户support只能在某几台服务器上,执行root能执行的某些命令
首先需要配置一些Alias,这样在下面配置权限时,会方便一些,不用写大段大段的配置。Alias主要分成4种
Host_Alias
Cmnd_Alias
User_Alias
Runas_Alias
1)配置Host_Alias:就是主机的列表
Host_AliasHOST_FLAG = hostname1, hostname2, hostname3
2)配置Cmnd_Alias:就是允许执行的命令的列表,命令前加上!表示不能执行此命令.
命令一定要使用绝对路径,避免其他目录的同名命令被执行,造成安全隐患,因此使用的时候也是使用绝对路径!
Cmnd_AliasCOMMAND_FLAG = command1, command2, command3 ,!command4
3)配置User_Alias:就是具有sudo权限的用户的列表
User_AliasUSER_FLAG = user1, user2, user3
4)配置Runas_Alias:就是用户以什么身份执行(例如root,或者oracle)的列表
Runas_AliasRUNAS_FLAG = operator1, operator2, operator3
5)配置权限
配置权限的格式如下:
USER_FLAGHOST_FLAG=(RUNAS_FLAG) COMMAND_FLAG
如果不需要密码验证的话,则按照这样的格式来配置
USER_FLAGHOST_FLAG=(RUNAS_FLAG) NOPASSWD:COMMAND_FLAG
配置示例:
############################################################################
#sudoers file.
#
# This file MUST be edited with the 'visudo'command as root.
#
# See the sudoers man page for the detailson how to write a sudoers file.
#
# Host aliasspecification
Host_Alias EPG = 192.168.1.1, 192.168.1.2
# Useralias specification
# Cmnd alias specification
Cmnd_Alias SQUID= /opt/vtbin/squid_refresh, !/sbin/service, /bin/rm
Cmnd_AliasADMPW = /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd, !/usr/bin/passwdroot
# Defaults specification
# User privilegespecification
root ALL=(ALL) ALL
support EPG=(ALL) NOPASSWD:SQUID
support EPG=(ALL) NOPASSWD: ADMPW
# Uncomment to allowpeople in group wheel to run all command
# %wheel ALL=(ALL) ALL
#Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
#Samples
# %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom
#%users localhost=/sbin/shutdown -hnow
#################################################
注意:每种linux的发行版往往对sudoers文件进行了自己的处理,此时,我们往往需要通过mansudoers来查找相关变量的定义,然后进行设置
 
2.5授权管理sudo实例
1)问题:
用户权限不够:
hyk@hyk-linux:~$cat /etc/shadow
cat:/etc/shadow: Permission denied
2)解决办法:指定用户,授权特定命令
使用Visudo可以查看/etc的代码如下:
Defaults env_reset
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
#Host alias specification
#User alias specification
#Cmnd alias specification
#User privilege specification
root ALL=(ALL:ALL) ALL
#Members of the admin group may gain root privileges
%adminALL=(ALL) ALL
#Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
#See sudoers(5) for more information on "#include"directives:
#includedir/etc/sudoers.d
注意:
env_reset:Ifset, sudo will reset the environment to only contain theLOGNAME, MAIL, SHELL, USER, USERNAME and the SUDO_*
variables. Any variables in the caller's environment thatmatch the env_keep and env_check lists are then added. The default contents of the env_keep and env_checklists are displayed when sudo is run by root withthe -V option. If the secure_path option is set, itsvalue will be used for the PATH environment variable. This flag is on by default. 
secure_path:Pathused for every command run from sudo.This optionis not set by default.
        加入这一行:%guestALL=/bin/cat表示guest用户组可以切换到root下执行cat来查看文件,保存,退出。实际上,由于secure_path的作用,guestone用户已经能够运行more等所有位于/bin下面的命令了
3)验证:
查看guestone的通过sudo能执行哪些命令:
命令行输入:guestone@hyk-linux:~$sudo -l
 
外部参考:
【1】linuxsu与sudo命令 http://www.2cto.com/os/201304/203693.html
分享到:
评论

相关推荐

    su和sudo的区别.txt

    ### su与sudo的区别详解 #### 一、su命令解析及应用 **1.1 su的基本概念与作用** - **su**(switch user)是Linux系统中用于临时切换用户身份的命令,它允许用户以另一个用户的身份执行命令或者交互式地进行操作...

    Linux用户配置sudo权限(visudo)的方法

    在Linux系统中,`sudo`是一个强大的命令,它允许非特权用户以root权限执行特定的命令。配置`sudo`权限是系统管理员的重要任务,以确保系统的安全性和可控性。本文将详细介绍如何使用`visudo`命令为Linux用户配置`...

    linux su命令参数及用法详解-linux切换用户命令.docx

    Linux su 命令参数及用法详解 在 Linux 中,su 命令是一条非常重要的命令,它允许用户切换到其他用户的身份,包括超级用户 root。下面我们将详细解释 su 命令的参数和用法。 su 命令的作用是变更为其他使用者的...

    sudo用法详解

    3. **切换到root用户并保留shell环境**:`sudo -i` 或 `sudo -s`,这将使用户进入root shell,与直接用`su -`效果相似,但使用sudo时,命令历史和环境变量会保持原样。 4. **以特定用户身份运行命令**:`sudo -u ...

    Linux sudo命令用法详解

    Linux sudo命令以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。 使用权限:在 /etc/sudoers 中有出现的使用者。 语法sudo -V sudo -h sudo -l sudo -v sudo -k sudo -s sudo...

    linux sudo命令详解

    简单的说,sudo 是一种权限管理机制,管理员可以授权于一些普通用户去执行一些 root 执行的操作,而不需要知道 root 的密码。 严谨些说,sudo 允许一个已授权用户以超级用户或者其它用户的角色运行一个命令。当然,...

    linux系统sudo命令详解

    比如:运行一些像mount,halt,su之类的命令,或者编辑一些系统配置文件,像/etc/mtab,/etc /samba/smb.conf等。这样以来,就不仅减少了root用户的登陆次数和管理时间,也提高了系统安全性。一. sudo的特点 sudo...

    Linux命令详解词典(绝版)

    3. 权限与安全命令:这方面的命令包括`chmod`用于改变文件权限,`chown`用于改变文件所有者,`chgrp`用于改变文件所属组,`su`和`sudo`用于用户权限切换等。 4. 系统管理命令:这类命令通常用于管理Linux系统,比如...

    sudo应用的详细阐述

    sudo 应用是一种在Linux和Unix系统中广泛使用的命令,它允许普通用户以超级用户(root)或其他特定用户的权限执行命令,但同时提供了细粒度的权限控制和审计功能。相较于传统的su命令,sudo更加安全,因为它不要求...

    linux命令详解之挂载光驱的方法

    ### Linux命令详解之挂载光驱的方法 #### 知识点概述 在Linux系统中,对硬件设备的管理与操作通常是在`/dev`目录下完成的。这其中包括了光驱设备,通常被标识为`/dev/cdrom`。为了能够访问光驱中的数据,必须先将...

    DBA实战配置Linux sudo

    在Linux系统管理中,权限控制至关重要。传统的`su`命令虽然提供了便捷的方式让用户临时获得root权限来执行某些任务,但这同时也带来了安全隐患。比如,如果多个用户都需要访问root权限,则意味着root密码必须共享给...

    linux常用命令详解(rpm)

    在Linux中,`su`和`sudo`命令经常被用来切换用户身份和执行需要更高权限的操作。 ##### 1\. 使用su命令 **su命令**允许用户临时切换到其他用户的身份。 - **用法:** ``` su [OPTION] [user] ``` - **选项:** ...

    Linux-Linux系统操作命令详解

    - `su` 和 `sudo` 用于切换用户,`sudo -i` 可以让普通用户以管理员身份运行命令。 - `ps` 显示当前系统中的进程信息。 - `top` 动态监控系统中运行的程序。 2. **系统管理命令**: - `kill` 发送特定信号给...

    LINUX资料RED HAT命令资料-详解请参考

    - **su**/**sudo**:切换用户或以超级用户权限执行命令。 10. **进程管理**: - **kill**/**pkill**:发送信号结束进程。 - **nohup**:让程序在后台运行并忽略挂断信号。 以上只是Red Hat Linux命令行操作的一...

    BETA-SuperSU-v2.64-20151220185127.zip

    《SuperSU:Android系统的Root权限管理详解》 在Android操作系统的世界里,"Root"一词意味着获取设备的最高权限,即系统级别的访问权限。SuperSU是一款广受欢迎的工具,专门用于帮助用户刷入并管理Android设备的...

    linux详解.pdf

    对于初学者,了解Linux的基本介绍、初次接触的经验、用户管理、文件和目录权限,以及如何编写和运行简单的Java或C程序,这些都是入门的第一步。通过持续学习和实践,你将逐渐精通这个强大的操作系统。

    Linux 实战技能 100 讲.zip

    21 su和sudo.mp4 22 用户和用户组的配置文件介绍,mp4 23 文件与目录权限的表示方法 24 文件权限的修改方法和数字表示方法 25 权限管理以及文件的特殊权限 26 网络管理 27 查看网络配置 28 修改网络配置 29 网络故障...

    linux用户添加root权限参照.pdf

    Linux 操作系统中,添加 root 权限是系统管理员常用的操作之一。本文将详细介绍添加 root 权限的步骤和相关命令的使用。 一、添加普通用户 添加普通用户的命令为 `useradd`,例如添加一个名为 chenjiafa 的用户...

    Linux常用命令和权限设置

    ### Linux常用命令和权限设置详解 #### Linux命令与权限概览 Linux,作为一种高度灵活且功能强大的操作系统,深受开发者和系统管理员的喜爱。其核心优势之一在于丰富的命令行工具,允许用户进行高效、精确的系统...

Global site tag (gtag.js) - Google Analytics