你好,游客 登录 注册 搜索
背景:
阅读新闻

Linux账号管理

[日期:2013-04-25] 来源:Linux社区  作者:zhang_ruihua [字体: ]

五、用户身份切换

 

1.su命令

语法:su [-lm] [-c 命令] [username]

参数:

[- ]:单纯使用- 表示使用login-shell的变量文件读取式来登录系统,如果没有用户名,则表示切换为root身份。

[-l]:与 - 类似,但后面需要接欲切换的用户账号,也是login-shell的方式

[-m]:表示使用目前的环境设置,而不读取新用户的配置文件

[-c]:仅进行一次命令,后面接需要执行的命令

 

注意:若要完整地切换到新用户的变量,必须使用“us - username”或者“su -l username”的方式,并且使用root切换成为任何用户时,并不需要输入新用户名。

 

2.sudo命令

sudo可以以其它用户的身份执行命令(通常是使用root的身份来执行命令),但并非所有人都能够执行sudo,仅有/etc/sudoers内的用户才能执行sudo命令。

语法:sudo [-b] [-u 新用户账号]

参数:

[-b]:将后面的命令让系统自行执行,而不与目前的shell产生影响

[-u]:后面可以接欲切换的用户,若无此项则代表切换身份为root

 

root用户使用sudo命令以user1的身份在/home/user1/下面创建的test.txt文件所属用户为user1:

[root@hs-uf21 ~]# sudo -u user1 touch/home/user1/test.txt

[root@hs-uf21 ~]# ll -a /home/user1/test.txt

-rw-r--r-- 1 user1 user1 0 Apr 23 22:29 /home/user1/test.txt

 

3.visudo/etc/sudoers

若想要除了root之外的其他账号使用sudo命令执行属于root的权限命令,则root需要先使用visudo去修改/etc/sudoers文件,让该账号能够使用全部或部分的root的命令功能。也可以直接使用vi或者vim编辑,但sudoers文件有自己的语法结构,如果设置错误会导致sudo命令无法使用。

 

系统默认只有root用户才可以执行sudo命令:

[Oracle@hs-uf21 ~]$ sudo -u user1 touch/home/user1/test.txt

Password:

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

 

使用visudo命令修改/etc/sudoers文件,使oracle使用可以使用sudo执行root用户的全部命令:

[root@hs-uf21 ~]# visudo

# sudoers file.

root ALL=(ALL) ALL

oracle ALL=(ALL) ALL <<==增加此行

[root@hs-uf21 ~]# su - oracle

[oracle@hs-uf21 ~]$ sudo -u user1 touch/home/user1/test2.txt

[oracle@hs-uf21 ~]$ sudo ls -al /home/user1/test2.txt

-rw-r--r-- 1 user1 user1 0 Apr 23 22:43 /home/user1/test2.txt

 

说明:

root ALL=(ALL) ALL

[用户账号][登录者的来源主机名][(可切换的身份)][可执行的命令]

[用户账号]:系统的那个账号可以使用sudo命令,默认账号只有root。

[登录者的来源主机名]:这个账号由那台主机连接到本Linux主机,默认root可以来自任何一台网络主机。

[(可切换的身份)]:这个账号可以切换成什么身份来执行后续的命令,默认root可以切换成使用用户。

[可执行的命令]:这个命令必须使用绝对路径,默认root可以切换任何身份,且执行任何命令。

 

用oracle用户查看/etc/shadow文件会提示没有权限,但使用sudo可以查看:

[oracle@hs-uf21 ~]$ head -n 10 /etc/shadow

head: cannot open `/etc/shadow' for reading:Permission denied

[oracle@hs-uf21 ~]$ sudo head -n 10 /etc/shadow

Password:

root:$1$yI2Xb6os$9C5hnN3POy6sdl0TY8FZv.:15805:0:99999:7:::

.........

 

利用用户组以及免密码的功能处理visudo:

[root@hs-uf21 ~]# visudo

# sudoers file.

# %wheel ALL=(ALL) ALL

%user1 ALL=(ALL) ALL <<==增加此行,使用用户组可以使用用户组user1下面的用户可以使用sudo命令

 

[user1@hs-uf21 ~]$ head /etc/shadow

head: cannot open `/etc/shadow' for reading:Permission denied

[user1@hs-uf21 ~]$ sudo head /etc/shadow

Password:

root:$1$yI2Xb6os$9C5hnN3POy6sdl0TY8FZv.:15805:0:99999:7:::

bin:*:15805:0:99999:7:::

 

使用visudo编辑/etc/sudoers文件,可以让用户免输出密码执行sudo命令:

[root@hs-uf21 ~]# visudo

# sudoers file.

# %wheel ALL=(ALL) NOPASSWD: ALL

%user1 ALL=(ALL) NOPASSWD: ALL

[root@hs-uf21 ~]# su user1

[user1@hs-uf21 root]$ sudo head /etc/shadow

root:$1$yI2Xb6os$9C5hnN3POy6sdl0TY8FZv.:15805:0:99999:7:::

注意:本次使用sudo执行命令没有输入密码。

 

有限制的操作命令:

 

[root@hs-uf21 ~]# visudo

# User privilege specification

root ALL=(ALL) ALL

oracle ALL=(ALL) ALL

adminpwd ALL=(root) /usr/bin/passwd

[adminpwd@hs-uf21 ~]$ sudo passwd user1

Changing password for user user1.

New UNIX password:

BAD PASSWORD: it is based on a dictionary word

Retype new UNIX password:

passwd: all authentication tokens updatedsuccessfully.

只执行sudopasswd时提示更改root用户的密码:

[adminpwd@hs-uf21 ~]$ sudo passwd

Changing password for user root.

New UNIX password:

 

使用visudo命令修改/etc/sudoers文件,全adminpwd用户只能使用除了root的之外的其它用户的密码:

[root@hs-uf21 ~]# visudo

# User privilege specification

root ALL=(ALL) ALL

oracle ALL=(ALL) ALL

#adminpwd ALL=(root) /usr/bin/passwd <<==此行更改为下面的写法

adminpwd ALL=(root) !/usr/bin/passwd,!/usr/bin/passwdroot,/usr/bin/passwd [A-Za-z]*

[root@hs-uf21 ~]# su - adminpwd

[adminpwd@hs-uf21 ~]$ sudo passwd

Sorry, user adminpwd is not allowed to execute'/usr/bin/passwd' as root on hs-uf21.

 

通过别名设置visudo:

[root@hs-uf21 ~]# visudo

# sudoers file.

# User alias specification

User_Alias ADMINPWD = oracle, adminpwd,user1

# Cmnd alias specification

Cmnd_Alias ADMINCMD =!/usr/bin/passwd,!/usr/bin/passwd root,/usr/bin/passwd [A-Za-z]*

# User privilege specification

root ALL=(ALL) ALL

#oracle ALL=(ALL) ALL

#adminpwd ALL=(root) !/usr/bin/passwd,!/usr/bin/passwdroot,/usr/bin/passwd [A-Za-z]*

ADMINPWD ALL=(root) ADMINCMD

 

 

[root@hs-uf21 ~]# su oracle

[oracle@hs-uf21 root]$ sudo head /etc/shadow

Password:

Sorry, user oracle is not allowed to execute'/usr/bin/head /etc/shadow' as root on hs-uf21.

[oracle@hs-uf21 root]$ sudo passwd

Sorry, user oracle is not allowed to execute'/usr/bin/passwd' as root on hs-uf21.

[oracle@hs-uf21 root]$ sudo passwd user3

Changing password for user user3.

New UNIX password:

BAD PASSWORD: it is based on a dictionary word

Retype new UNIX password:

passwd: all authentication tokens updatedsuccessfully.

 

注意:User_Alias,Cmnd_Alias,Host_Alias的名称一定要使用大写。

linux
相关资讯       Linux账号 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款