美文网首页
三周三次课

三周三次课

作者: 艾特梁老师 | 来源:发表于2017-08-17 00:25 被阅读0次

    su切换用户

    • 命令su
      语法:su [-] username
       加“-”的作用是,加上后切换,shell会初始化当前用户的各种变量(.bash_history .bash_profile .bash_logout .bashrc 等);且切换后会直接进入当前用户家目录。不加则环境变量还会是当前shell的变量,切换后还是当前目录。
       root用户切换普通用户时,不需要密码。普通用户su 不加username就是切换root用户,需要输入root密码。
       我们可以在切换时,直接以某一普通用户的身份去执行一条命令,用在脚本中比较合适。
    [root@t1 ~]# su - -c "touch /tmp/zyb.log" zyb
    [zyb@t1 ~]$ ls -l /tmp/zyb.log 
    -rw-rw-r--. 1 zyb zyb 0 8月  16 21:05 /tmp/zyb.log
    [zyb@t1 ~]$ su - bird -c "touch /tmp/bird.log"y
    密码:
    [zyb@t1 ~]$ exit
    登出
    [root@t1 ~]# ls -l /tmp/bird.log 
    -rw-rw-r--. 1 bird bird 0 8月  16 21:26 /tmp/bird.log
    #切换用户名可以在“-” 后面也可以在最后
    

    sudo详解

    为了保证root密码的安全,同时准许某些用户执行一些root才能执行的命令,但是不需要知道root密码,就是sudo命令的作用。
     默认情况下,只有root才能sudo,因为sudo的配置中有一行"root ALL=(ALL)  ALL "。该配置分为三部分,最左侧是用户名,指定某个用户可以拥有sudo执行权,第二部分ALL,是一个用户名,即,指定的用户可以切换到哪个用户的身份,ALL表示所有用户。小括号里面指定主机名或者主机IP,ALL表示所有,最后一个ALL,用来指定可以使用的命令有哪些。如果是多个命令,用英文逗号隔开,命令使用绝对路径。使用命令"visudo"编辑sudo的配置文件/etc/sudoers。

    1. 举例,配置sudo,使zyb用户能够以root用户什么ls /root/下面的文件。
    [root@t1 ~]# su - zyb
    上一次登录:三 8月 16 23:00:31 CST 2017pts/0 上
    [zyb@t1 ~]$ ls /root/
    ls: 无法打开目录/root/: 权限不够
    [zyb@t1 ~]$ exit
    登出
    [root@t1 ~]# visudo  
    #添加 zyb     ALL=(ALL)       /usr/bin/ls
    ## Allow root to run any commands anywhere
    root    ALL=(ALL)       ALL
    zyb     ALL=(ALL)       /usr/bin/ls
    [zyb@t1 ~]$ sudo ls /root
    
    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 zyb: 
    anaconda-ks.cfg  anaconda-ks.cfg.1.bak  linux_note  y.pub
    [zyb@t1 ~]$ sudo ls /root
    anaconda-ks.cfg  anaconda-ks.cfg.1.bak  linux_note  y.pub
    

    zyb用户是不能查看/root下的文件,需要以root身份执行ls。所以配置sudo:
    zyb ALL=(ALL) /usr/bin/ls
    准许zyb使用sudo 以root身份执行ls,zyb第一次执行sudo会有提示,并且需要输入密码,注意是zyb用户的登录密码。再次执行sudo就没有提示。

    1. 设定不需要输入密码执行sudo
      配置sudo,准许bird用户执sudo且不需要密码
    [root@t1 ~]# visudo  
    #添加 bird     ALL=(ALL)       NOPASSWD: /usr/bin/ls
    ## Allow root to run any commands anywhere
    root    ALL=(ALL)       ALL
    zyb     ALL=(ALL)       /usr/bin/ls
    bird     ALL=(ALL)       NOPASSWD: /usr/bin/ls
    [bird@t1 ~]$ sudo ls /root
    anaconda-ks.cfg  anaconda-ks.cfg.1.bak  linux_note  y.pub
    

    /etc/sudoers包含很多配置,可以使用命令man sudoers来获取帮助,下面介绍案例,来了解sudo的常用功能。

    1. 要求设置系统只允许普通用户登录,普通用户登陆后,可以不输入密码就能sudo切换到root账户。
    User_Alias ALLUSERS = zyb, bird, user1, user2  
    #用户别名ALLUSERS虚拟用户包含了4个真实用户 #
    Cmnd_Alias SU = /bin/su  
    #命令别名 SU代表了/bin/su,可以代表多个用“, ”隔开
    ALLUSERS    ALL=(ALL)    NOPASSWD: SU  
    #用户ALLUSERS 可以免密码sudo执行SU命令#  
    

    命令别名,以及用户别名都必须是大写的。以上ALLUSERS,SU如果有小写字母,保存时就会报错,并提醒错误位置。使用visudo编辑sudo配置和自动检查语法,如果直接vi /etc/sudoers,不会检查语法, 所以使用visudo命令来编辑sudo配置。

    1. %groupname ALL=(ALL) ALL
      为每一个需要sudo的用户逐个添加太麻烦,可以直接为某一组用户开通sudo权限,组名前面加%。
    %groupname ALL=(ALL)   ALL
    

    groupname这组用户都具有了sudo权限,接下来只需要让将用户加入到这个group中就行了。

    1. sudo -l 查看当前用户可以sudo的命令
    2. 取消某类程序的执行:
      取消程序某类程序的执行,要在命令动作前面加上!号; 在本例中也出现了通配符的*的用法;
    beinan ALL=(ALL)  /usr/sbin/*, /sbin/*, !/usr/sbin/fdisk 
    

    把这行规则加入到/etc/sudoers中,本规则表示beinan用户在所有可能存在的主机名的主机上运行/usr/sbin和/sbin下所有的程序,但fdisk 程序除外。

    不允许远程用户登录root

    此方法只适用于通过ssh远程登录linux的时候,修改配置文件/etc/ssd/ssd_config,在文件中查找"#PermitRootLogin yes" 这句话,将yes改为no。就表示不允许远程root用户登录。保存配置文件,重启sshd服务:service sshd restart

    相关文章

      网友评论

          本文标题:三周三次课

          本文链接:https://www.haomeiwen.com/subject/egjwrxtx.html