Chinaunix首页 | 论坛 | 博客
  • 博客访问: 783071
  • 博文数量: 143
  • 博客积分: 2077
  • 博客等级: 大尉
  • 技术积分: 2393
  • 用 户 组: 普通用户
  • 注册时间: 2012-09-28 12:57
文章存档

2016年(2)

2015年(3)

2014年(3)

2013年(41)

2012年(94)

分类: LINUX

2012-10-14 16:50:24

用户身份切换: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
root ALL=(ALL) ALL
用户账号      登陆者的来源主机名=(可切换的身份) 可执行的命令
对上一格式的解释:
用户账号:系统的哪个账号可以使用sudo这个命令,默认为root。你可以在root那一行的下面加一行你需要加入的用户,比如:vbird1 ALL=(ALL) ALL
登陆者的来源主机名:这个账号可由哪一台主机连接过来,这个设置值可以指定客户端主机。
可切换的身份:这个账号可以切换成什么样的身份来执行后续的命令。root可以切换成任何人。
可执行的命令:这个命令必须用绝对路径书写(用which查询绝对路径)。默认root可以执行任何命令。
  那个ALL是特殊的关键字,代表任何身份、主机或命令的意思。

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

二、利用用户组以及免密码的功能处理visudo
  可以通过用户组功能让几个人管理系统(我有三个用户user1~3)
  找到这两行,将前面的 # 去掉,一个是支持群组的,一个是支持免密码功能。% 后面接的是一个用户组之意。
  之后用命令#usermod -a -G wheel user1  将user1加入wheel的支持。

三、有限制的命令操作
#visudo
user2 ALL=(ALL) /usr/bin/passwd
  表示user2可以切换成root执行后面的命令,命令一定要用绝对路径。
试想,既然用户可以切换至root,那么当然就可以改变root的密码了,因此我们得这样设置:
  #visudo
user1 ALL=(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
ADMPW ALL=(root) ADMPWCOM


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


六、sudo搭配su的使用方式
  使用sudo的缺点就是没执行一次命令,都得加上sudo,这个很麻烦,我们可以这样设置:
  User_Alias ADMINS=user1,user2,user3
  ADMINS ALL=(root) /bin/su -
  这样一来,我们就可以用#sudo su -  并输入自己的密码后变成root身份。









阅读(3194) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~