二十四、账号管理(三)

king's blog
本节我们来了解下,linux下如何切换账号及普通用户如何获取root权限,比如现在的登陆用户是weblogic,想切换成oracle用户。主要内容如下:
一、su
二、sudo

一、su

用su切换用户有以下几种用法
1、su username 或 su -m username 或 su -p username—–>表示直接切换成username,不读取username的环境变量
2、su – username 或 su -l username———————>表示直接切换成username,且读取username的环境变量
3、su – -c “command”———————————–>表示普通用户执行一次root用户的指令

注意:如果su后面不带用户名,则表示切换成root用户;如果是从root用户切换成其他用户,则不需要输入密码

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#1.当前的登陆用户为weblogic,且输出PATH环境变量
weblogic@ETS157:~> whoami
weblogic
weblogic@ETS157:~> env | grep 'PATH'
MANPATH=/usr/local/man:/usr/share/man
XNLSPATH=/usr/share/X11/nls
PATH=/weblogic/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/opt/kde3/bin:/usr/lib/mit/bin:/usr/lib/mit/sbin:/opt/project/jdk1.6.0_38/bin
INFOPATH=/usr/local/info:/usr/share/info:/usr/info

#2.通过"su oracle"切换成oracle用户,且输出PATH环境变量(没变化)
weblogic@ETS157:~> su oracle
Password:
oracle@ETS157:/weblogic> whoami
oracle
oracle@ETS157:/weblogic> env | grep 'PATH'
MANPATH=/usr/local/man:/usr/share/man
XNLSPATH=/usr/share/X11/nls
PATH=/weblogic/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/opt/kde3/bin:/usr/lib/mit/bin:/usr/lib/mit/sbin:/opt/project/jdk1.6.0_38/bin
INFOPATH=/usr/local/info:/usr/share/info:/usr/info

#3.通过"su - oracle"切换成oracle用户,且输出PATH环境变量(有变化)
weblogic@ETS157:~> su - oracle
Password:
oracle@ETS157:~> env | grep 'PATH'
MANPATH=/usr/local/man:/usr/share/man
XNLSPATH=/usr/share/X11/nls
PATH=/opt/oracle/product/11.2.0/dbhome_1/bin:/opt/oracle/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/X11R6/bin:/usr/games:/opt/kde3/bin:/usr/lib/mit/bin:/usr/lib/mit/sbin:/opt/project/jdk1.6.0_38/bin
INFOPATH=/usr/local/info:/usr/share/info:/usr/info

4.weblogic用户执行ifconfig命令(只有root用户才能执行ifconfig,普通用户需执行/sbin/ifconfig)
weblogic@ETS157:~> su - -c ifconfig
Password:
eth1      Link encap:Ethernet  HWaddr 08:00:27:94:E1:4D
          inet addr:10.80.13.1  Bcast:10.80.13.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe94:e14d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:251508623 errors:0 dropped:217529 overruns:0 frame:0
          TX packets:66521257 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:30296470556 (28892.9 Mb)  TX bytes:34936398031 (33317.9 Mb)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:31638987 errors:0 dropped:0 overruns:0 frame:0
          TX packets:31638987 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:5254600080 (5011.1 Mb)  TX bytes:5254600080 (5011.1 Mb)

后话,用su能很方便的进行用户切换,但如果是切换成root用户则需要知道root用户的密码,对多人系统来说,这非常不安全,那有其他办法解决吗?请继续往下看

二、sudo

承接上面的疑问,不输入root用户密码的前提下,能否拥有root用户的权限,当然,sudo应运而生。sudo可以以其他用户的身份去执行某些任务,下面我们来看看具体的用法。

命令格式:
sudo [-b] [-u username] command

参数说明:
-b : 表示在后台子shell中执行command
-u : 表示以username的身份执行command

例子:

1
2
3
4
5
6
7
8
9
10
11
12
#1.以weblogic用户的身份创建/opt/project/test2目录
ETS157:~ # sudo -u weblogic mkdir /opt/project/test2
ETS157:~ # ll -d /opt/project/test2
drwxr-xr-x 2 weblogic wasgroup 4096 Mar 21 10:09 /opt/project/test2


#2.以weblogic用户的身份,执行多个命令(说明:sh -c表示执行一串指令)
ETS157:~ # sudo -u weblogic sh -c "mkdir /opt/project/test3 ; \
> cd /opt/project/test3 ; echo 'successful' > result.txt"

ETS157:~ # cat /opt/project/test3/result.txt
successful

从上面的例子可以看出,root用户是可以以任意用户的身份去执行命令,且不需要输入密码。那反过来呢?weblogic用户可以以root用户的身份去执行命令吗?是否可以是由/etc/sudoers文件决定的(该文件有专门的语法,不能用vi进行修改,需用visudo进行打开修改),sudo的执行流程如下:
1、用户执行sudo时,系统在/etc/sudoers中查找该使用者是否有执行sudo的权限
2、如果使用者有sudo的执行权限,则让使用者输入自己的用户密码,以此确认
3、若密码正确,则开始进行执行sudo后面的指令(root执行sudo,不需要输入密码)
4、若切换的身份与执行者身份相同,也不需要输入密码

下面我们来看看/etc/sudoers的文件内容,并了解下几种常用的场景
备注:以下例子均在Radhat中执行通过。

1、某一用户能执行root所有的指令,相当于管理员

例子:

1
2
3
4
5
6
7
8
9
10
11
12
#1.增加weblogic用户,可执行root所有的指令,如42行
ETS157:~ # visudo
 ...
 39
 40 # User privilege specification
 41 root ALL=(ALL) ALL
 42 weblogic All=(All) All  <-------------新增行
 ...

#2.验证,现在可否用webloigc用户以root的身份去查看/etc/shadow
weblogic@ETS157:~> sudo  head -1 /etc/shadow
at:*:16377:0:99999:7:::

Notes:
weblogic All=(All) All中3个All分别代表的含义如下:
weblogic: 代表登入者的账号
第一个All:代表登入者的来源主机名,All表示所有,不受限制
第二个All:代表可切换的身份,All表示可切换成任意身份
第三个All:代表可下达的指令,All表示所有指令

2、利用群组及免密码的功能处理visudo

做法是先将某个group添加到/etc/sudoers文件中,再将相应的用户添加到该group组中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#1.步骤1,将某个group添加到/etc/sudoers文件中
ETS157:~ # visudo
...
 # Uncomment to allow people in group wheel to run all commands
 44 # %wheel ALL=(ALL) ALL
 45 GroupA ALL=(ALL) ALL ------------------>新增的,表示GroupA组的人,都能使用sudo切换任何身份来操作任何指令,且需要密码
 46 # Same thing without a password
 47 GroupB ALL=(ALL) NOPASSWD: ALL--------->新增的,表示GroupB组的人,都能使用sudo切换任何身份来操作任何指令,但不需要密码
 48
...

#2.步骤2,将用户添加到GroupA,GroupB
usermod -a -G GroupA user1,user2
usermod -a -G GroupA suer3,user4
3、限制用户只能操作某些命令

前面两种方式,列表中的用户均能修改root用户的密码,那怎样才能限制呢?看下面的例子

1
2
3
4
5
[root@ReapsCindaQA1 ~]# visudo
#在文件末尾添加52行的内容,表示user1用户可以修改除root以外其他用户的密码
...
52 user1 All=(root) !/usr/bin/passwd,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root
...

上面的例子表示,user1用可以以root用户身份修改除root之外任何用户的密码,也就是只能执行(passwd username命令,但username != root),且不能执行passwd命令(不带参数,表示修改修改root的密码

4、加入到visudo中的用户太多,可使用别名的方式

如果加入到visudo中的用户太多,可使用别名的方式,请看下面的例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#1.添加53~55行的内容,注意User_Alias,Cmnd_Alias是关键词,不能变;同时USER_LIST,COMMAND_LIST名字可任意,但必须是全部是大写。下面的例子表示weblogic,oracle用户可切换以root用户的角色修改除root用户以外其他用户的密码
[root@ReapsCindaQA1 ~]# visudo
...
53 User_Alias USER_LIST=weblogic,oracle
54 Cmnd_Alias COMMAND_LIST=!/usr/bin/passwd,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root
55 USER_LIST ALL=(root) COMMAND_LIST
...

#2.验证,以oracle用户去修改root,weblogic用户的密码
#2.1,修改root用户的密码,不允许
[oracle@ReapsCindaQA1 ~]$ sudo passwd
[sudo] password for oracle:
Sorry, user oracle is not allowed to execute '/usr/bin/passwd' as root on ReapsCindaQA1.site.

#2.2,修改root用户的密码,不允许
[oracle@ReapsCindaQA1 ~]$ sudo passwd root
[sudo] password for oracle:
Sorry, user oracle is not allowed to execute '/usr/bin/passwd root' as root on ReapsCindaQA1.site.

#2.3,修改非root用户的密码,比如weblogic用户,允许
[oracle@ReapsCindaQA1 ~]$ sudo passwd weblogic
Changing password for user weblogic.
New password:
BAD PASSWORD: it is too short
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updated successfully.
[oracle@ReapsCindaQA1 ~]$
5、su和sudo配合使用

su和sudo配合使用,效果更好,比如将配置的用户一口气将身份转换为root,请看下面的例子

1
2
3
4
5
6
7
8
9
10
11
12
13
#1.将用户king切换成root用户权限
[root@ReapsCindaQA1 ~]# visudo
...
57 User_Alias USER_LIST_ADMIN=weblogic
58 USER_LIST_ADMIN All=(root) /bin/su -
...

#2.验证效果,此时用webloigc用户登陆,只要输入"sudo su -" 并输入自己的密码,则立刻变成root的身份且不用知道root用户的密码
[weblogic@ReapsCindaQA1 ~]$ sudo su -
[sudo] password for weblogic:
[root@ReapsCindaQA1 ~]# whoami
root
[root@ReapsCindaQA1 ~]
Tags:
文 / 甲乙丙丁
LEAVE A REPLY

loading