linux切换用户 sudo -l,用户身份切换:su,sudo

用户身份切换:su,sudo

su与su -

su 与 su - 的区别:虽然两个都可以从一般用户切换至root,但用 su - 切换时,切换到正常root,用 su 时,很多变量仍旧是一般用户的,很多数据仍无法使用。

例如:

$su

#env |grep 'tianqi'

$su -

#env |grep 'tianqi'

#env |grep 'root'

#su [-lm] [-c 命令] [username]

- :单纯使用-,如“su -”,代表使用login-shell的变量文件读取方式来登陆系统。不加用户名代表切换至root。

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

-m:-m与-p是一样的,表示使用目前的环境设置,而不读取新用户的配置文件。

-c:仅进行一次命令,所以 -c 后面可加上命令。

当普通用户想以root身份执行一次命令时,可以使用 -c 参数:

#su - -c "head -n 3 /etc/passwd"

切换的时候其实是重新读取login-shell,因此若要回到上一层,一定要用 exit 退出。

sudo

用su切换需要知道root密码,不安全,而sudo仅使用自己的密码就可以以其他用户身份执行命令。但并不是所有人都可以执行sudo,而仅是有 /etc/sudoers内的用户才能够执行sudo这个命令。

#sudo [-b] [-u 新用户账号]

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

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

例子:以sshd的身份在 /tmp 下面新建一个名为mysshd的文件

#sudo -u sshd touch /tmp/mysshd

#ll /tmp/mysshd         ==>文件权限是由sshd决定的

要注意,我们无法切换至sshd用户来执行命令,因为他的shell为/sbin/nologin.

想以vbird1的身份新建~vbird1/www 并于其中新建index.html文件

#sudo -u vbird1 sh -c "mkdir ~vbird1/www;cd ~vbird1/www;echo 'this is index.html file'         > index.html"

使用sh -c 命令来执行一连串命令

sudo的执行流程

1.当用户执行sudo时,系统于/etc/sudoers文件中查找该用户是否有执行sudo的权限。

2.当用户具有可执行sudo的权限时,便让用户输入自己的密码来确认。

3.若密码输入成功,便开始进行sudo的后续命令,root执行时不需要密码。

4.若欲切换的身份与执行者身份相同,也不需要输入密码。

visudo 与 /etc/sudoers

/etc/sudoers文件不能用vi去编辑,要用#visudo.

一、单一用户可进行root所有命令与 sudoers 文件语法

#visudo

rootALL=(ALL)ALL

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

对上一格式的解释:

用户账号:系统的哪个账号可以使用sudo这个命令,默认为root。你可以在root那一行的下面加一行你需要加入的用户,比如:vbird1ALL=(ALL)ALL

登陆者的来源主机名:这个账号可由哪一台主机连接过来,这个设置值可以指定客户端主机。

可切换的身份:这个账号可以切换成什么样的身份来执行后续的命令。root可以切换成任何人。

可执行的命令:这个命令必须用绝对路径书写(用which查询绝对路径)。默认root可以执行任何命令。

那个ALL是特殊的关键字,代表任何身份、主机或命令的意思。

vbird1ALL=(ALL)ALL   代表vbird1可以登录任何主机来切换任何身份执行任何命令

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

可以通过用户组功能让几个人管理系统(我有三个用户user1~3)

找到这两行,将前面的 # 去掉,一个是支持群组的,一个是支持免密码功能。% 后面接的是一个用户组之意。

之后用命令#usermod -a -G wheel user1  将user1加入wheel的支持。

三、有限制的命令操作

#visudo

user2ALL=(ALL)/usr/bin/passwd

表示user2可以切换成root执行后面的命令,命令一定要用绝对路径。

试想,既然用户可以切换至root,那么当然就可以改变root的密码了,因此我们得这样设置:

#visudo

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

这样一来,user1可以使用带“passwd”字符的任意命令,但是passwd 与 passwd root 不能执行。

四、通过别名设置visudo

如果要有100个管理员加入,一个一个去设置吗?太麻烦了。我们用别名设置即可。别名可以是命令别名、账号别名、主机别名等。下例以账号别名做一下。

假如我有三个账号:user1~3,设置一个账号别名为 ADMPW,作如下处理:

#visudo

User_Alias ADMPW=user1,user2,user3

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

ADMPWALL=(root)ADMPWCOM

五、sudo的时间问题

你会发现,在我们执行完一次sudo命令时,相隔较短时间再次执行sudo时,不需要输入命令。两次执行sudo间隔在五分钟内则不需要输入密码,记住就行。

六、sudo搭配su的使用方式

使用sudo的缺点就是没执行一次命令,都得加上sudo,这个很麻烦,我们可以这样设置:

User_Alias ADMINS=user1,user2,user3

ADMINSALL=(root)/bin/su -

这样一来,我们就可以用#sudo su -  并输入自己的密码后变成root身份。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值