三周第三次课(4月4日)

时间:2022-07-14 14:23:32

3.7 su命令

  • su用于切换用户
    #命令中有无-的区别;无-切换用户还会在上一个用户的家目录下和上一个用户的配置。加-了会到该目录的家目录下,以及会加载该用户配置文件,这样才能彻底切换用户。
    # 没加 - 
    [root@long1 ~]# su longlong01  # 没有-
    [longlong01@long1 root]$ 
    # 加 - 
    [root@long1 ~]# su - longlong01  # 有 -
    [longlong01@long1 ~]$ 
    
    # 临时用另外的用户身份去创建一条命令但是不用切换用户:su - -c "ccc" uuu
    [root@long1 ~]# su - -c "touch /home/longlong02/susu.txt" longlong02    # 以root身份
    [root@long1 ~]# ls -l /home/longlong02                          
    -rw-rw-r--. 1 longlong02 longlong02 0 8月  16 10:36 susu.txt    # 文件为longlong02创建
  • 切换用户-bash-4.2$ 问题:那是因为该用户没有家目录,用usermod命令设置用户家目录就可以了。
    # 情况一:原用户把家目录路径换到别的地方
    # 解决办法:把家目录路径切换回来
    [longlong01@long1 ~]$ su - longlong02
    -bash-4.2$ 登出
    [root@long1 ~]# usermod -d /home/longlong02 longlong02
    [root@long1 ~]# su - longlong02
    [longlong02@long1 ~]$ 
    
    # 情况二:切换家目录了缺少配置文件
    # 找到系统默认配置文件
    [root@long1 ~]# ls -la /etc/skel/
    drwxr-xr-x.  2 root root   62 6月  28 21:11 .
    drwxr-xr-x. 76 root root 8192 8月  16 10:34 ..
    -rw-r--r--.  1 root root   18 8月   3 2016 .bash_logout        #   
    -rw-r--r--.  1 root root  193 8月   3 2016 .bash_profile       #
    -rw-r--r--.  1 root root  231 8月   3 2016 .bashrc             #
    [root@long1 ~]# cp /etc/skel/.bash* /home/longlong02  # 拷贝这三个文件
    [root@long1 ~]# chown -R longlong02:longlong02 /home/longlong02  # 更改所有组与所有者
    [root@long1 ~]# su - longlong02
    [longlong02@long1 ~]$ 

3.8 sudo命令

可以让A用户临时有B用户的身份或者root用户的身份。

  • visudo:可以查看sudo配置文件
    ......
    # 找到这一句;用户longlong02,longlong01为自己添加
    ## Allow root to run any commands anywhere
    root    ALL=(ALL)       ALL
    #用户         略  获得哪个用户权限       可使用所有命令 
    longlong02    ALL=(ALL)                  ALL
    #用户         略  获得root用户权限       可使指定命令 
    longlong01    ALL=(root)                 /bin/ls, /bin/mv, /bin/cat   ==LONG_CMD(可以把内容替换成这个,以为下面设置了命令别名包含了这些命令)==                                                   VVV LONG_CMD 往下看VVV
    #用户         略  获得root用户权限   不用输入密码  可使指定命令
    longlong03    ALL=(root)                 NOPASSWD: /bin/ls, /bin/mv, /bin/cat
    ...... 
    ## Host Aliases
    #                组库          组名(自己添加)
    # Host_Alias     FILESERVERS = fs1, fs2
    ......
    ## User Aliases
    #            用户库   用户名(自己添加)
    # User_Alias ADMINS = jsmith, mikem
    ......
    ## Networking
    # 命令别名   命令库       自己添加的命令 
    # Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool ==Cmnd_Alias LONG_CMD = /bin/ls, /bin/mv, /bin/cat== (==自己添加的==)  
    ......
    
    # ":set nu":可以查看行数
    # 编辑完输入":wq"退出
  • which ccc:查看命令位置
    [root@long1 ~]# which su
    /bin/su
  • sudo用法
    [longlong01@long1 ~]$ ls /root
    ls: 无法打开目录/root/: 权限不够
    [longlong01@long1 ~]$ sudo ls /root/
    1.txt  2.txt  anaconda-ks.cfg  Readme.txt

3.9 限制root远程登录

  • visudo:可以查看sudo配置文件
    ......
    ## User Aliases
    #            
    # User_Alias ADMINS = jsmith, mikem
    User_Alias LONGS = LONG01, LONG02, LONG03       # 自己添加
    ......
    ## Allow root to run any commands anywhere
    root    ALL=(ALL)       ALL
    #                       (执行这个命令不需要输入密码)
    LONGS   ALL=(ALL)       NOPASSWD: /usr/bin/su   # 自己添加  
    
    # 编辑完使用效果如下,登录root不用输入密码
    [root@long1 ~]# su - longlong01
    上一次登录:三 8月 16 10:32:32 CST 2017pts/0 上
    [longlong01@long1 ~]$ sudo su -
    上一次登录:三 8月 16 20:52:22 CST 2017从 192.168.227.1pts/1 上
    [root@long1 ~]# 
    
    [root@long1 ~]# vi /etc/ssh/sshd_config     # 编辑配置文件,使root用户不能直接登录,只能用普通用户
    ......
    #LoginGraceTime 2m
    #PermitRootLogin yes    # 改成PermitRootLogin no(不允许root用户登录,记得去掉#)
    ......
    [root@long1 ~]# systemctl restart sshd.service  #  重启服务
    
    [longlong01@long1 ~]$ sudo su - root    # 这样可以登录root用户