鸟哥的linux私房菜学习笔记《二十七》用户身份切换

  1. su
    参数:
    - :单纯使用 - 如“ su - ”代表使用 login-shell 的变量文件读取方式来登陆系统;
    若使用者名称没有加上去,则代表切换为 root 的身份。
    -l :与 - 类似,但后面需要加欲切换的使用者帐号!也是 login-shell 的方式。
    -m :-m 与 -p 是一样的,表示“使用目前的环境设置,而不读取新使用者的配置文件”
    -c :仅进行一次指令,所以 -c 后面可以加上指令

    
    # 切换用户
    
    [kevin@CentOS ~]$ su
    Password: 
    [root@CentOS kevin]# id
    uid=0(root) gid=0(root) groups=0(root),490(sfcb) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
    [root@CentOS kevin]# env | grep kevin
    USER=kevin
    PATH=/usr/lib/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/kevin/bin  #不是root
    MAIL=/var/spool/mail/kevin  # 不是root
    PWD=/home/kevin  # 不是root
    LOGNAME=kevin
    
    # 虽然身份是root,但是很多数据都无法利用
    

    读取的变量设置方式为 non-login shell 的方式,这种方式很多原本的变量不会被改变, 尤其是我们之前谈过很多次的 PATH 这个变量,由于没有改变成为 root 的环境, 因此很多 root 惯用的指令就只能使用绝对路径来执行。

    
    # 只是想要执行一个只有root才能进行的命令,且执行完就回复原本身份
    
    [kevin@CentOS ~]$ head -n 3 /etc/shadow
    head: cannot open `/etc/shadow' for reading: Permission denied
    
    [kevin@CentOS ~]$ su - -c "head -n 3 /etc/shadow"
    Password: 
    root:$6$/FNg5CtP$KsYAYM4LBgkAYbvD5MiPAOSMcmAnohDcANoZspPblw7Eh9MqwlQzhmsyCgvTMg5E.yAWyhWHg/lufHCd6sbU21:17227:0:99999:7:::
    bin:*:15980:0:99999:7:::
    daemon:*:15980:0:99999:7:::
  2. sudo
    此并非所有人都能够执行sudo , 而是仅有规范到 /etc/sudoers 内的用户才能够执行 sudo 这个指令
    参数:
    -b :将后续的指令放到背景中让系统自行执行,而不与目前的 shell 产生影响
    -u :后面可以接欲切换的使用者,若无此项则代表切换身份为 root

    
    # 想要以sshd的身份在/tmp下新建一个名为mysshd的文件
    
    [root@CentOS kevin]# sudo -u sshd touch /tmp/mysshd
    [root@CentOS kevin]# ll /tmp/mysshd 
    -rw-r--r--. 1 sshd sshd 0 Mar 18 16:18 /tmp/mysshd
    
    
    # 以kevin的身份新建~kevin/www并于其中新建index.html文件
    
    [root@CentOS kevin]# sudo -u kevin sh -c "mkdir ~kevin/www; cd ~kevin/www; echo 'This is index.html file' > index.html"
    [root@CentOS kevin]# ll -a ~kevin/www
    total 12
    drwxr-xr-x.  2 kevin kevin 4096 Mar 18 16:20 .
    drwx------. 32 kevin kevin 4096 Mar 18 16:20 ..
    -rw-r--r--.  1 kevin kevin   24 Mar 18 16:20 index.html
    
    # sh -c执行一串指令
    
  3. 但是 sudo 默认仅有 root 能使用啊!为什么呢?因为 sudo 的执行是这样的流程:
    1 . 当使用者执行 sudo 时,系统于 /etc/sudoers 文件中搜寻该使用者是否有执行 sudo 的权
    限;
    2 . 若使用者具有可执行 sudo 的权限后,便让使用者“输入使用者自己的密码”来确认;
    3 . 若密码输入成功,便开始进行 sudo 后续接的指令(但 root 执行 sudo 时,不需要输入密
    码);
    4 . 若欲切换的身份与执行者身份相同,那也不需要输入密码。

    [root@CentOS ~]# visudo
    root    ALL=(ALL)       ALL
    kevin   ALL=(ALL)       ALL
    

    sudo 执行的重点是:“能否使用 sudo 必须要看 /etc/sudoers 的设置值, 而可使用sudo 者是通过输入使用者自己的密码来执行后续的指令串”。因为该文件的内容是有一定的规范
    的,因此直接使用 vi 去编辑是不好的。 此时,我们得要通过 visudo 去修改这个文件。
    visudo 只是利用 vi 将 /etc/sudoers 文件调用出来进行修改而已,所以这个文件就是 /etc/sudoers。

    [root@CentOS ~]# cat /etc/sudoers
    
    ## Allow root to run any commands anywhere 
    
    root    ALL=(ALL)       ALL
    kevin   ALL=(ALL)       ALL

    上面这一行的四个部分意义是:
    1 . “使用者帐号”:系统的哪个帐号可以使用 sudo 这个指令的意思;
    2 . “登陆者的来源主机名称”:当这个帐号由哪部主机连线到本 Linux 主机,意思是这个帐号可能是由哪一部网络主机连线过来的, 这个设置值可以指定用户端计算机(信任的来源的意思)。默认值 root 可来自任何一部网络主机
    3 . “(可切换的身份)”:这个帐号可以切换成什么身份来下达后续的指令,默认 root 可以切换成任何人;
    4 . “可下达的指令”:可用该身份下达什么指令?这个指令请务必使用绝对路径撰写。 默认root 可以切换任何身份且进行任何指令之意。

    
    #我想让 vbird1 可以进行任何身份的任何指令, 就如同上表特殊字体写的那样,其实就是复制上述默认值那一行,再将 root 改成 vbird1 即可:
    
    [kevin@CentOS ~]$ tail -n 1 /etc/shadow
    tail: cannot open `/etc/shadow' for reading: Permission denied
    [kevin@CentOS ~]$ sudo tail -n 1 /etc/shadow
    
    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 kevin: 
    pro3:$6$PddldVqg$q3uHqeICjB1HSXTdB994lFfHFgVySSzG1gtUCEABi3fJtfxK728v47IrAPaysmCu7AYDsTLipLGbI0qu1Z0pK1:17243:0:99999:7:::
    
  4. 利用用户组以及免密码的功能处理visudo

    
    # 新建三个用户,通过用户组的功能让这三个人可以管理系统
    
    [root@CentOS ~]# visudo
    
    # Allows people in group wheel to run all commands
    
    %wheel  ALL=(ALL)   ALL  #修改去掉注释
    
    # 将user1加入wheel用户组的支持
    
    [root@CentOS ~]# usermod -a -G wheel user1
    
    # 上面的设置值会造成“任何加入 wheel 这个群组的使用者,就能够使用 sudo 切换任何身份来操作任何指令”的意思
    
    
    # 以user1的身份运行
    
    [user1@CentOS ~]$ sudo tail -n 1 /etc/shadow
    
    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 user1: 
    pro3:$6$PddldVqg$q3uHqeICjB1HSXTdB994lFfHFgVySSzG1gtUCEABi3fJtfxK728v47IrAPaysmCu7AYDsTLipLGbI0qu1Z0pK1:17243:0:99999:7:::
    
    
    # 以user2的身份运行
    
    [user2@CentOS ~]$ sudo tail -n 1 /etc/shadow
    
    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 user2: 
    user2 is not in the sudoers file.  This incident will be reported.
    
    # 提示user2不在/etc/sudoers文件的设置中
    
  5. 不需要密码即可使用 sudo”

    [root@CentOS ~]# visudo
    
    ## Allows people in group wheel to run all commands
    
    %wheel  ALL=(ALL)       NOPASSWD: ALL  # 修改87行
    
    # %后面代表用户组
    
    
    # NOPASSWD代表免密码
    
  6. 有限制的命令操作
    如果我想要让使用者仅能够进行部分系统任务, 比方说,系统上面的 myuser1 仅能够帮 root 修改其他使用者的密码时,亦即“当使用者仅能使用 passwd 这个指令帮忙 root 修改其他用户的密码”时,
    你该如何撰写呢?可以这样做:

    [root@CentOS ~]# visudo
    
    # Allow root to run any commands anywhere
    
    root    ALL=(ALL)       ALL
    kevin   ALL=(ALL)       ALL
    user1   ALL=(root)      /usr/bin/passwd
    
    
    # 发现这样user1可以修改root密码,需要进行限制:
    
    [root@CentOS ~]# visudo
    
    ## Allow root to run any commands anywhere
    
    root    ALL=(ALL)       ALL
    kevin   ALL=(ALL)       ALL
    user1   ALL=(root)     ! /usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
    
    # 加上感叹号是不可执行的意思
    
  7. 通过别名设置visudo

    
    # 用命令别名处理一下(批处理)
    
    User_Alias ADMPW = user1, user2, myuser1, myuser2
    AMND_Alias ADMPWCOM = !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
    ADMPW   ALL=(ALL)       ADMPWCOM
    

    很多时候我们需要大量执行很多 root 的工作,所以一直使用 sudo 觉得很烦ㄟ!那有没有办法使用 sudo 搭配 su , 一口气将身份转为 root ,而且还用使用者自己的密码来变成 root呢?是有的!而且方法简单的会让你想笑! 我们创建一个 ADMINS 帐号别名,然后这样做:

    [root@CentOS ~]# visudo
    User_Alias ADMINS = pro1, pro2, pro3, myuser1
    ADMINS ALL=(root) /bin/su -
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值