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

超级用户root具有超级管理权限,由于权限太大,如果管理不好,就会对系统安全带来安全隐患。在工作场景中,一般临时性处理工作,都是以普通用户的身份完成,只在必要时才使用超级用户root。

1  su命令

1.1  su介绍

通过su命令可以在用户之间切换,超级用户root向普通用户或虚拟用户切换不需要密码(这就是超极权限所在)。其他普通用户之间或者普通用户切换到root,都需要切换用户的秘密验证。


su参数选项


注释说明


-,-l,--login


使一个shell成为登陆的shell,如执行su - oldboy,表示该用户改变身份为oldboy,并且使用oldboy用户的环境变量配置。


-c,--command=COMMAND


切换到一个shell下,执行一个命令,然后退出所切换的用户环境


-m,--presserve-environment


切换用户时,不重置用户环境变量,-p的功能同-m,这个参数为su的默认值,较少使用


-s,--shell=SHELL


如果/ec/shell允许,则运行指定的shell

su实例:


[[email protected] ~]$ whoami

qinbf

[[email protected] ~]$ su -  #输入的是root的密码

口令:

[[email protected] ~]# whoami

root

[[email protected] ~]# env

HOSTNAME=qinbf

SHELL=/bin/bash

TERM=linux

HISTSIZE=1000

USER=root

……

PWD=/root

LANG=zh_CN.UTF-8

SHLVL=1

HOME=/root

LOGNAME=root

[[email protected] ~]# su - qinbf

[[email protected] ~]$ whoami

qinbf

[[email protected] ~]$ env

HOSTNAME=qinbf

SHELL=/bin/bash

TERM=linux

HISTSIZE=1000

USER=qinbf

…….

PWD=/home/qinbf

LANG=zh_CN.UTF-8

SHLVL=1

HOME=/home/qinbf

LOGNAME=qinbf

[[email protected] ~]$ exit   # exit退出当前用户,这个命令可以用ctrl+d替换

logout

[[email protected] ~]#

总结:su切换到其他用户不加“-”,环境变量是不会改变的,可能会导致异常,比较规范的写法是“su  -  用户”

如何让系统在每一次开机时自动普通用户启动指定的服务脚本?


把要执行的脚本放入开机自启动配置文件/etc/rc.local

su  -  tddoc  -c  ‘/bin/sh /home/tddoc/bin/deploy.sh’

su命令优缺点

su命令为我们管理linux带来方便,但是也带来了很大的安全管理问题,切换到root身份,可以改掉root的密码,让其他用户无法再切换到root。使用su命令切换身份在多个系统管理员共同管理的场合,并不是最好的选择。建议使用sudo代替su。

su致命的缺点:

1)   普通用户必须知道root密码才可以切换到root,这样root密码就泄露开了。

2)   使用su命令切换身份,无法对切换后的身份做精细的控制,可以为所欲为,甚至改掉root密码。

2 sudo命令

通过sudo命令,我们可以把某些超级用户权限分类有针对性(精细)授权给指定的普通用户,并且普通用户不需要知道root密码就可以使用得到的授权。

2.1  sudo执行的流程

1)                 当用户执行sudo时,系统会首先查找/var/run/sudo/%HOME(如果是新用户会先生成此目录)目录中是否有用户时间戳文件,如果时间戳文件过期,则提示用户是否输入自身的密码(不是root或者要切换的用户密码)

2)                 当密码验证成功后,系统会查找/etc/sudoers配置文件,判断用户是否有执行相应sudo命令权限

3)                 如果具备执行相应sudo权限,就会自动由当前用户切换到root,然后以root身份执行该命令

4)                 执行完成后,又会自动直接退回到当前用户shell下。

2.2  sudo语法

sudo  [参数选项] 命令


sudo参数选项


注释说明


-l


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


-v


验证用户的时间戳;当用户运行sudo,输入用户的密码后,在短时间内可以不用输入口令直接运行sudo,可用-v可以跟踪最新的时间戳


-u


指定以某个用户身份执行特定的操作


-k


同-K,删除时间戳,下一个sudo命令提供密码。前提是该用户授权中不能有NOPASSWD参数

sudo授权的方法

1)   执行visudo命令

2)   直接修改/etc/sudoers文件

直接修改sudoers配置文件方法有以下需要注意的几点:

  1. echo命令是追加>>,不是重定向>,除了echo外,可以用cat、sed等命令实现此功能;
  2. 修改操作完成一定要执行visudo  -c进行语法检查,这弥补了直接修改的不足
  3. 确保/etc/sudoers权限是正确的(-r--r-----),权限不对会导致sudo功能异常
  4. 及时对授权的操作进行测试,验证是否正确(最好不要退出当前授权窗口)
  5. 确保知道正确root用户密码,以便在出现问题时可以通过普通用户等候执行su-命令切换到root进行恢复。

3)   使用用户组的方式实现sudo授权

通过授权一个用户组的方式来配置/etc/sudoers,这样以后有增加用户需要相同的授权时,直接将用户加入到sa组就可以享受sa组的sudo授权了。

%sa                     ALL=(All)            ALL

#注意用户组授权和普通用户的区别,开头为“%”百分号。sa组同用户一样必须是已经存在的。

2.3  sudo实例:

[[email protected] ~]# useradd sun

[[email protected] ~]# echo "qbf" |passwd --stdin sun

Changing password for user sun.

passwd: all authentication tokens updated successfully.

[[email protected] ~]# su - sun

[[email protected] ~]$ touch /root/sun.txt

touch: 无法触碰 “/root/sun.txt”: 权限不够

[[email protected] ~]$ sudo /root/sun.txt

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 sun:

Sorry, try again.

[sudo] password for sun:

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

方法一:

[[email protected] ~]# visudo

81 ## Allow root to run any commands anywhere

82

83 root    ALL=(ALL)       ALL

84 qinbf   ALL=(ALL)       ALL

85 sun     ALL=(ALL)       ALL #允许sun用户在任何主机、对任何用户、执行任何操作

方法二:

[[email protected] ~]# echo "sun   ALL=(ALL)   ALL">>/etc/sudoers

[[email protected] ~]# visudo -c    #检查/etc/sudoers文件的语法

/etc/sudoers: parsed OK

[[email protected] ~]# ll /etc/sudoers  #检查/etc/sudoers文件的权限

-r--r----- 1 root root 3438 06-05 15:05 /etc/sudoers

方法三:

[[email protected] ~]# grep sa /etc/group

sa:x:801:oldboy6

[[email protected] ~]# echo "%sa   ALL=(ALL)   ALL">>/etc/sudoers

[[email protected] ~]# usermod -G sa sun

验证:

[[email protected] ~]$ sudo touch /root/sun.doc

[[email protected] ~]$ sudo ls -l /root/sun.doc

-rw-r--r-- 1 root root 0 06-05 15:10 /root/sun.doc

3  /etc/sudoers配置文件

3.1    /etc/sudoers的规则大致可分为两类:一类是别名定义,另一类是授权规则;别名定义并不是必须的,但授权规则是必须的。

1)   Host_Alias定义主机别名


# Host_Alias     FILESERVERS = fs1, fs2

# Host_Alias     MAILSERVERS = smtp, smtp2

2)   User_Alias定义用户别名


User_Alias  ADMINS = jsmith, mikem

3)   Runas_Alias定义runas别名

这个别名指定的是“用户身份”,即sudo允许切换至的用户


Runas_Alias SUPER = root

4)   Cmnd_Alias定义命令别名


## Services

#Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig

## Updating the locate database

#Cmnd_Alias LOCATE = /usr/bin/updatedb

3.2 别名实例

实例1:定义用户别名


User_Alias  ADMINS = oldboy,  ett,  %oldboy

#-->定义用户别名ADMINS,包含oldboy,ett及oldboy组的成员

实例2:定义命令别名


Cmnd_Alias  NETWORK = /sbin/ifconfig, /etc/init.d/network

#

1)  所有的命令别名下的成员必须是文件或目录的绝对路径

2) 命令别名超过一行时,可以通过“\”号换行

3) 在定义时,可以使用正则表达式,如/usr/bin/passwd [A-Za-z]*。

实例3:定义Runas别名


Runas_Alias  OP = root, oldboy

特别说明:runas别名的定义也不多见

3.3  /etc/sudoers配置文件中的授权规则

oldboy      ALL=(ALL)    ALL

#-->授权中的所有ALL字符串必须大写。其中,第一、二个ALL字符串不大写的话,visudo语法检查可以过,但是授权实际配置达不到配置需求,最后一个ALL必须大写,否则visudo语法检查通不过。

这一行代表的意思是:

授权用户    主机=(指定的可切换的用户) 可以执行的命令动作

因此,上面一行授权内容的实际意思就是,oldboy用户可以在所有的主机上,切换到所有用户,执行所有的命令。

如果忽略上面括号的内容,如写成:

oldboy      ALL=         ALL

那么只能切换到root执行所有命令。

如果希望在执行命令时不提示密码,就用这个NOPASSWD:ALL语法来授权

如果不希望执行某个命令,那么就在这个命令前面加上“!”

3.4  /etc/sudoers配置文件授权规则实例

在/etc/sudoers文件的末尾添加以下两行:

Cmnd_Alias USER_ADMIN = /usr/sbin/useradd, /usr/sbin/userdel, !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root

test  ALL=(ALL)    USER_ADMIN

"/etc/sudoers" 109L, 3595C 已写入

[[email protected] ~]# visudo -c

/etc/sudoers: parsed OK

[[email protected] ~]# ll /etc/sudoers

-r--r----- 1 root root 3595 06-08 10:07 /etc/sudoers

[[email protected] ~]$ vi .bash_profile

#修改test用户的环境变量,添加以下黄色部分的变量

PATH=$PATH:$HOME/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

[[email protected] ~]$ source .bash_profile

[[email protected] ~]$ sudo useradd bifeng

[sudo] password for test:

[[email protected] ~]$ sudo passwd bifeng

Changing password for user bifeng.

New UNIX password:

Retype new UNIX password:

Sorry, passwords do not match.

New UNIX password:

Retype new UNIX password:

passwd: all authentication tokens updated successfully.

[[email protected] ~]$ sudo passwd root

[sudo] password for test:

Sorry, user test is not allowed to execute ‘/usr/bin/passwd root‘ as root on test2.localdomain.

[[email protected] ~]$ sudo passwd

[sudo] password for test:

Sorry, user test is not allowed to execute ‘/usr/bin/passwd‘ as root on test2.localdomain.

再添加一行:

Cmnd_Alias USER_CHANGE = /bin/chown

修改test的权限:

test  ALL=(ALL)    USER_ADMIN, NOPASSWD: USER_CHANGE

[[email protected] ~]$ sudo /bin/chown sun.sun /root/sun.txt

[[email protected] ~]$

#-----à不再需要密码提示

3.5 sudo配置文件/etc/sudoers授权规则注意事项总结:

1)   授权规则中的所有ALL字符串必须为大写字母

2)   Cmnd_Alias USERCMD = /usr/sbin/useradd, /usr/sbin/userdel, !/usr/bin/passwd、/usr/bin/passwd[A-Za-z]*, /bin/chown, !/usr/bin/passwd root

允许执行的命令是有顺序的,从老师的测试结果来看,命令的顺序是从后面向前,即把允许执行的命令放在禁止命令的后面

3)   一行内容超长可以用“\”斜线换行

4)   “!”叹号表示非,就是命令取反的意思,即禁止执行的命令。

5)   测试之前要记得修改普通用户的环境变量.bash_profile文件,把root的环境变量加入到普通用户的后面。

3.6 远程执行sudo命令

在默认情况下,我们是无法通过ssh远程执行sudo命令的

在/etc/sudoers有这样的配置:


53 # Disable "ssh hostname sudo <cmd>", because it will show the password in clear.

54 #         You have to run "ssh -t hostname sudo <cmd>".

55 #

56 Defaults    requiretty

根据注释我们可以知道,这个“Default  requiretty”就是禁止我们通过ssh远程执行sudo命令的明确配置,但是禁止执行的远程ssh  sudo  命令格式为“ssh  hostname  sudo  <cmd>”,禁止的原因是因为会明文显示密码,但是我们可以通过“ssh  -t  hostname sudo  <cmd>”的方式

4 配置sudo命令审计

4.1 日志文件配置

1)安装sudo,syslog命令服务

yum  install  sudo syslog


[[email protected] ~]# yum install sudo syslog

2)配置系统日志/etc/syslog.conf

echo  “local2.debug    /var/log/sudo.log” >>/etc/syslog.conf


31news.=crit                             /var/log/news/news.crit

32news.=err                             /var/log/news/news.err

33news.notice                           /var/log/news/news.notice

34local2.debug                          /var/log/sudo.log

3) 配置/etc/sudoers

增加配置“Defaults      logfile=/var/log/sudo.log”>>/etc/sudoers

4) 重启syslog内核日志记录器

/etc/init.d/syslog  restart


[[email protected] ~]# /etc/init.d/syslog restart

关闭内核日志记录器:                                       [确定]

关闭系统日志记录器:                                       [确定]

启动系统日志记录器:                                       [确定]

启动内核日志记录器:                                       [确定]

5) 测试sudo日志审计配置结果


[[email protected] ~]$ sudo useradd bill

[[email protected] ~]$ sudo passwd bill

Changing password for user bill.

New UNIX password:

Retype new UNIX password:

passwd: all authentication tokens updated successfully.

[[email protected] ~]$ sudo useradd lily

[[email protected] ~]$ passwd lily

passwd: Only root can specify a user name.

[[email protected] ~]$ sudo passwd lily

Changing password for user lily.

New UNIX password:

Retype new UNIX password:

passwd: all authentication tokens updated successfully.

[[email protected] ~]$ sudo chown root.root /root/sun.txt

[[email protected] ~]# tail /var/log/sudo.log

6月  8 11:02:45 : test : TTY=pts/1 ; PWD=/home/test ; USER=root ;

COMMAND=/usr/sbin/useradd bill

6月  8 11:02:52 : test : TTY=pts/1 ; PWD=/home/test ; USER=root ;

COMMAND=/usr/bin/passwd bill

6月  8 11:03:32 : test : TTY=pts/1 ; PWD=/home/test ; USER=root ; COMMAND=list

6月  8 11:03:51 : test : TTY=pts/1 ; PWD=/home/test ; USER=root ; COMMAND=validate

6月  8 11:04:12 : test : TTY=pts/1 ; PWD=/home/test ; USER=root ;

COMMAND=/usr/sbin/useradd lily

6月  8 11:04:22 : test : TTY=pts/1 ; PWD=/home/test ; USER=root ;

COMMAND=/usr/bin/passwd lily

6月  8 11:07:04 : test : TTY=pts/1 ; PWD=/home/test ; USER=root ;

COMMAND=/bin/chown root.root /root/sun.txt

4.2 日志写到其他主机:
  1. 配置syslog服务器配置文件(/etc/sysconfig/syslog)中添加:

SYSLOGD_OPTIONS=”-m O -r -x”  # -r是指接收远程日志的意思

重启syslog服务器

/etc/init.d/syslog   restart

  1. 客户端配置

编辑/etc/syslog.conf

修改

local2.debug   /var/log/sudo.log

修改为

local2.debug   @中央服务器的IP

 

时间: 2024-08-03 20:55:18

Linux课程笔记 用户身份切换命令的相关文章

Linux课程笔记 用户和用户组管理

1.用户管理的文件 1.1  /etc/skel目录 /etc/skel目录是用来存放新用户配置文件的目录,当我们添加用户时,这个目录下的所有文件会自动改被复制到新添加的用户的家目录下. 示例:在/etc/skel目录下创建一个文件,看看新创建的用户家目录下是否有这个文件 [[email protected] skel]# ll -a /etc/skel/ 总计 56 drwxr-xr-x  2 root root  4096 06-02 20:02 . drwxr-xr-x 92 root r

Linux系列笔记 - 用户以及用户组命令

一.前言 这一系列的随笔笔记,并不是详细的说明的命令的原理,只是简单的记录, 以备后期的查看以及复习 二.直接输入命令问题 有时候,我们在用 useradd groupadd等命令时,直接在终端输入的话,会提示,无此命令或者命令不存在的消息 这个原因是因为,我们直接输入的命令,都是在 /usr/bin 目录下的命令,而 我们的 useradd groupadd命令,是在 /usr/sbin 目录下 所以,有以下两种方法解决: 1. 在 /usr/sbin 目录下,运行 相应的命令 即可 2. 建

Linux课程笔记 Day04 课上内容总结

1. Crond介绍 1.0 定时任务比较及cron语法 Linux的任务调度可以分为两类: 系统自身执行的任务 用户执行的工作 Linux系统下另外两种定时任务软件: at:适合仅执行一次的调度任务,需要启动一个名为atd的服务 anacron:这个命令主要用于非7*24小时开机的服务器,anacron并不能指定具体时间执行任务,而是以天为周期或者在系统每次开机后需要执行的任务,它会检测停机期间应该进行,但是并没有进行的crontab任务工作,执行一遍. 这两种比较少用 指令语法: Cront

Linux自学笔记——用户和组管理

资源分派: Authentication:认证 Authorization:授权 Accouting:审计 Audition token,identity(username/password) linux用户:username/UID 管理员:root,0 普通用户:1-65535 系统用户:1-499,1-999 对守护进程获取资源进行权限分配: 登录用户:500+,1000+ 交互式登录: Linux组:groupname/GID 管理员组:root,0 普通组: 系统组:1-499, 1-

linux学习笔记一:获取命令帮助

linux命令超多,忘记命令的使用方式.格式是很平常的事 囧.能够使用系统自带的帮助文件获取到相关的信息是学习linux的必备基本功! 下面记录几个常用的帮助命令,只为加深本菜的记忆,有不对的地方请看到这篇博文的大大加以指导,感激不尽! 简要介绍下命令,命令分为两大种类. 一种为shell自带的一些基础命令,称为内部命令.该类命令集成在shell内部,执行速度比外部命令快. 还有一种称为外部命令,该类命令是额外安装的,开机不自动加载,在需要使用时通过路径查找(printenv中的PATH项),加

Linux命令_用户身份切换

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

Linux学习笔记——用户、组管理命令及常用选项

用户管理命令: useradd  userdel usermod passwd  id finger chsh  chfn chmod chown  su 组管理命令: groupadd groupdel groupmod gpasswd   chgrp 用户类型分为:用户u:owner.组g:group.其他o:other   三种类型 文件权限包含:r  w  x  执行权限 文件与目录之间关于rwx 权限的区别 : 文件: r :可读  ,可以使用cat 等命令查看 w : 可写  ,可以

Linux课程笔记 Day03 课程内容总结

1. 软硬链接的介绍和实践 1.1链接的概念 在linux系统中,链接分为硬链接和软链接.在默认不带参数的情况下,执行ln命令创建的是硬链接. 链接是指通过索引节点来进行链接.在linux系统中,多个文件名指向同一个索引节点是正常且允许的,这种是硬链接.硬链接的作用之一是允许一个文件有多个有效路径防止误删除源数据. 文件系统中,只要文件的索引节点还有一个以上的链接,只删除其中一个链接并不影响索引节点和其他的链接(即数据实体并未删除).只有当最后一个链接被删除,此时如果有新数据要存储到硬盘时,被删

linux应用之用户管理相关命令

1. useradd useradd 命令可以创建一个新的用户帐号,其最基本用法为: useradd 用户名 如输入以下命令: useradd newuser 系统将创建一个新用户 newuser,该用户的Home 目录为/home/newuser. useradd 命令的参数较多,常用的组合为: useradd 用户名 -g 组名–G 组名-d Home 目录名-p 密码 其中:-g 指定该用户的首要组 -G 指定该用户的次要组 -d 指定该用户的Home 目录 -p 指定该用户的密码 如输入