身份切换与sudo

su命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码。以root身份切换至普通用户则不需要输入密码

su


功能描述:


身份切换,替代用户和组ID运行指令


格式:


su –l username –c ‘command‘

su username

su - username


默认:

Centos 6 命令位置 /bin/su

Centos 7 命令位置 /usr/bin/su   /bin 软链接至 usr/bin


版本


选项


说明


示例


6


- 或 -l


变更身份时,变更环境变量为用户的


-c 指令


执行完指定的指令后,即恢复原来的身份


--session-command=COMMAND


与-c一致,只是不创建新的会话


-m 或 -p


变更身份时,不变更环境变量


-s


指定要执行的shell

su变更时须输入所要变更的用户帐号与密码,这在实际使用中会因为密码而导致安全上的问题,因此,就引出了sudo的实用性。

? sudo能够授权指定用户在指定主机上运行某些命令。 如果未授权用户尝试使用 sudo,会提示联系管理员

? sudo可以提供日志,记录每个用户使用sudo操作

? sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机

? sudo使用时间戳文件来完成类似“检票”的系统,默认存活期为5分钟的“入场券”

sudo


功能描述:


授权使用指用命令


格式:


sudo [-u user] COMMAND


默认:


版本


选项


说明


示例


6


-u user


切换至指定用户, 默认为root


-l 或 -ll


列出用户在主机上可用的和被禁止的命令


-f


指定sudoers文件


-V


显示配置信息


-v


再延长密码有效期限5分钟,更新时间戳


-k


清除时间戳(变为1970-01-01),下次需要重新输密码


-K


与-k一致,同时删除时间戳文件


-b


在后面执行指令


-p


改变询问密码的提示符

如:-p ”password on %h for user %p:"

sudo配置

? 配置文件

/etc/sudoers

/etc/sudoers.d/

sudo 可以解析 /etc/sudoers.d/ 目录中的文件,这样就不需要编辑单一的 /etc/sudoers 文件,可以单独修改一个设置然后放入此目录。目录中配置的格式和 /etc/sudoers一样, 优点包括:

a.可以按指定分类创建文件

b.如果新配置有问题,可以删除这个文件,而不用编辑 /etc/sudoers.

警告: /etc/sudoers格式错误会导致sudo不可用。必须使用visudo编辑该文件防止出错。

#visudo -f /etc/sudoers.d/hunk    读取并编辑/etc/sudoers.d/指定文件

#visudo –c 检查语法

/etc/sudoers: parsed OK

出错的时候,会提示如下信息,按 e 可以直接定位到出现错误的行

#visudo -c

/etc/sudoers: parsed OK

/etc/sudoers.d/hunk: bad permissions, should be mode 0440

/etc/sudoers配置文件

说明 :

1:授权规则

2:授权wheel组在任何位置执行任何指令。

3:设置sudo时免密码

4:这一行并不是注释,在/etc/sudoers.d/目录的文件会一并加载,这样做的好处是,每个用户生成 一个配置文件,方便管理。

配置文件更改后,立即生效

? 时间戳文件

/var/db/sudo

? 日志文件

/var/log/secure

#tail /var/log/secure

? 配置文件支持使用通配符glob

?: 任意单一字符

* : 匹配任意长度字符

[wxc]: 匹配其中一个字符

[!wxc]: 除了这三个字符的其它字符

\x : 转义

[[alpha]] : 字母 示例: /bin/ls [[alpha]]*

更多请参考以前笔记

? 配置文件规则有两类

1、别名定义:不是必须的

2、授权规则:必须的

授权规则格式:

语法格式:

用户 登入主机=(代表用户) 命令

user host=(runas) command

root ALL=(ALL) ALL

? 格式说明:

user: 运行命令者的身份

host: 允许在哪些主机

(runas):以哪个用户的身份,此用户应当有权限运行后面的指令,否则没有意义。

command: 运行哪些命令,这里建议使用绝对路径。使用 逗号; 实现多行指令

其中,command一栏中的sudoedit比较特别,是授权用户编辑文件,而且在普通用户执行时,只需要这样使用:$sudoedit /etc/sudoers.d/hunk

示例:

一个普通用户并没有权限挂载光盘

[[email protected] ~]$mount /dev/sr0 /dvd

mount: only root can do that

设置sudo授权指定用户可以挂载光盘和卸载光盘

# visudo

#hunk   ALL=(root)  /usr/bin/mount /dev/cdrom /dvd,/usr/bin/umount /dvd

这种写法也可以,runas为空时,默认以root身份

#hunk    ALL= /usr/bin/mount /dev/cdrom /dvd,/usr/bin/umount /dvd

支持通配符

#hunk    ALL=/usr/bin/mount /dev/sr* /dvd,/usr/bin/mount /dev/cdrom /dvd,/usr/bin/umount /dvd

普通用户使用方式:

# sudo mount /dev/sr0 /dvd

第一次的时候,会验证密码,以后每隔5分钟会重新验证密码

$sudo mount /dev/sr0 /dvd

mount: /dev/sr0 is write-protected, mounting read-only

注意:

sudo的字符串必须与sudoers配置文件要一模一样,否则就是不匹配

一些特殊的写法:

rushmore = NOPASSWD: /bin/kill, PASSWD: /bin/ls, /usr/bin/lprm

NOPASSWD:不需要输入密码

PASSWD:需要输入密码

Defaults:hunk runas_default=user10

#1004    ALL=(root) /usr/sbin/,!/usr/sbin/ifconfig

! 排除或者理解为不能执行

Defaults:默认行为

[email protected]_List

Defaults:User_List

Defaults!Cmnd_List

Defaults>Runas_List

示例:

Defaults        syslog=auth

Defaults>root       !set_logname

Defaults:FULLTIMERS !lecture

Defaults:hunk   !authenticate   不进行身份验证

[email protected]    log_year, logfile=/var/log/sudo.log 指定这些主机的日志相关

Defaults!PAGERS     noexec

sudo别名

语法格式:

别名有四种类型:


别名关键字


赋值示例


User_Alias


User_Alias ADMINS = hunk, tom


Host_Alias


Host_Alias FILESERVERS = fs1, fs2

Host_Alias DNSSERVERS = 114.114.114.114,8.8.8.8


Runas_Alias


Runas_Alias OP = root


Cmnd_Alias


Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum

Cmnd_Alias SERVICES =  /sbin/chkconfig, /usr/bin/systemctl start

别名格式:[A-Z]([A-Z][0-9]_)*

为sudo命令定义PATH环境变量

当你使用sudo去执行一个程序时,处于安全的考虑,这个程序将在一个新的、最小化的环境中执行,也就是说,诸如PATH这样的环境变量,在sudo命令下已经被重置成默认状态了。所以当一个刚初始化的PATH变量中不包含你所要运行的程序所在的目录,用sudo去执行,你就会得到"command not found"的错误提示。

要想改变PATH在sudo会话中的初始值,用文本编辑器打开/etc/sudoers文件,找到"secure_path"一行,当你执行sudo 命令时,"secure_path"中包含的路径将被当做默认PATH变量使用。

Defaults    secure_path = $PATH:/sbin:/bin:/usr/sbin:/usr/bin

一些示例

授权 ls /usr/local/protected

$ sudo ls /usr/local/protected

以www的身份编辑指定的文件

$ sudoedit -u www ~www/htdocs/index.html

以组成员身份adm的查看日志

$ sudo -g adm more /var/log/syslog

以jim的身份且使用主组为audio的身份编辑指定文件

$ sudoedit -u jim -g audio ~jim/sound.txt

允许关机

$ sudo shutdown -r +15 "quick reboot"

在使用*号时,要特别注意安全问题

%operator ALL = /bin/cat /var/log/messages*

当以上规则时,可以匹配为

$ sudo cat /var/log/messages.1

也可以匹配为

$ sudo cat /var/log/messages /etc/shadow

是不是相当的危险?

可以这么设定

%operator ALL = /bin/cat /var/log/messages*,!/bin/cat /var/log/message* *

原文地址:http://blog.51cto.com/191226139/2059648

时间: 2024-10-20 12:23:05

身份切换与sudo的相关文章

chapter14:Linux帐号管理之(1)身份切换

我们都是使用一般帐号登录系统的,但是如何让一般用户转变成root用户呢,有两种方法: (1) su:这个命令要有root的密码. (2) sudo:这个命令只要有自己的密码就可以了,但是要进行设置. 一.su 可以进行任何身份切换. su [-lm] [-c命令] [username] 有没有加上-区别很大.涉及到login-shell与nologin-shell的变量读取方法. (1)不加- 可以看到,此时用户身份为root ,但是PATH是chuiyuan的,也就是说读取变量的设置方式为no

Linux课程笔记 用户身份切换命令

超级用户root具有超级管理权限,由于权限太大,如果管理不好,就会对系统安全带来安全隐患.在工作场景中,一般临时性处理工作,都是以普通用户的身份完成,只在必要时才使用超级用户root. 1  su命令 1.1  su介绍 通过su命令可以在用户之间切换,超级用户root向普通用户或虚拟用户切换不需要密码(这就是超极权限所在).其他普通用户之间或者普通用户切换到root,都需要切换用户的秘密验证. su参数选项 注释说明 -,-l,--login 使一个shell成为登陆的shell,如执行su

Linux系统中切换用户身份su与sudo的用法与实例

日常操作中为了避免一些误操作,更加安全地管理系统,通常使用的用户身份都为普通用户,而非root.当需要执行一些管理员命令操作时,再切换成root用户身份去执行. 普通用户切换到root用户的方式有:su和sudo. 1,su - (su为switch user,即切换用户的简写) 格式:su -l USERNAME(-l为login,即登陆的简写) -l可以将l省略掉,所以此命令常写为su - USERNAME 如果不指定USERNAME(用户名),默认即为root,所以切换到root的身份的命

sudo身份切换

sudo更改身份: 我们知道,使用 su 命令可以让普通用户切换到 root 身份去执行某些特权命令,但存在一些问题,比如说:仅仅为了一个特权操作就直接赋予普通用户控制系统的完整权限: 当多人使用同一台主机时,如果大家都要使用 su 命令切换到 root 身份,那势必就需要 root 的密码,这就导致很多人都知道 root 的密码: 考虑到使用 su 命令可能对系统安装造成的隐患,最常见的解决方法是使用 sudo 命令,此命令也可以让你切换至其他用户的身份去执行命令. 相对于使用 su 命令还需

用户身份切换之初窥企业远程用户没root还有root权限

一直很困扰我,既然企业不让用root不能登录,那怎么操作文件呢? 原来...... su -    用来切换初始变量 $PATH $HOME等 sudo 用的时候会su到root需要root的密码,这样很不安全.我们就会修改配置文件(不输入root密码 )   /etc/sudoers  或者直接打visudo     ,如果没有命令安装一下吧  yum install -y sudo 在 root    ALL=(ALL)       ALL     下面按照格式添加一行你的创建中意的用户名获

夺命雷公狗---linux NO:27 linux下的密码管理和用户切换以及sudo的使用

我们在windows下用户名是可以设置空密码登录的,但是在linux 里面必须要设置一个密码才可以登录,否则会失败的... 在linux 下设置密码可以使用  passwd  这个命令来进行设置... 但是这里的  passwd  并非是  etc   目录下的passwd  我们可以用 which  来查看一下他是那个的passwd,如下所示: 很明显他是存放在  usr/bin/passwd  里面的... 那么我们先用passwd 命令将一个用户设置一个密码(这方法只是针对root 用户而

Linux用户身份切换

su   -  用来初始化环境变量 $PATH $HOME等sudo  su到root需要输入root的密码不安全 visudo 编辑/etc/sudoers 配置文件  没有命令需安装 yum install -y sudo格式: user   host=(as_user)  commands比如:  aming  ALL=(root)   /bin/ls    //它的意思是,让aming这个普通用户,拥有root的权限,针对ls这个命令. 应用:只允许使用普通账户登陆,而普通账户登录后,可

linux安全--用户账号--文件系统--用户切换与sudo提权

系统加固(服务器的本地安全) 1 用户账户安全 2 文件系统安全(系统配置文件的安全 服务的配置) 重要的数据文件 挂载的文件系统  mount 文件权限的种类  rwx     suid    sgid   T位     facl ++++++++++++++++++++++++++++++++++++++++++ 阻止普通用户关机: 建一个700文件夹 mkdir -m 700 文件夹名 cd /etc/security/console.spps mv  poweroff reboot ha

Linux命令_用户身份切换

命令 su 格式为:su [ - ] username,后面可以跟 - ,也可以不跟. 普通用户的su命令不加username时,就相当于切换到root用户,反之亦然.当su 命令加上 - 后,会初始化当前用户的各种环境变量. 如果不加 - 切换到root用户时,当前目录没有变化:而如果加上 - 切换到root账户时,当前目录为root账户的家目录. 注:当由root切换到普通用户时,不需要输入密码. 命令 sudo 由于切换到zoctopus账户后当前目录还是 /root,zoctopus账户