su用户身份切换与sudo提权

su用户切换与sudo提权

因为root用户的权限太大,容易对系统造成强大破坏,安全风险极高,所以通常情况下生产环境的服务器对外都是禁止root用户直接登录的,通常都是使用普通用户来管理系统,为了让普通用户拥有root权限又能保证服务器的安全,就需要用到su与sudo命令。

  • 1、su:切换身份。
    • 优点:简单
    • 缺点:1、需要知道root密码(不安全)。2、权限控制不精细(会获取所有root权限)
  • 2、sudo:提取部分管理员权限,不用切换到root账户下。
    • 优点:1、不需要知道root密码(只用输入自己的密码)。2、权限控制更为精细(可以只获取部分root权限)
    • 缺点:相对复杂

su切换用户

在Linux中shell可以分两类:

  • 登录shell,需要输入用户名和密码才能进入shell。
  • 非登录shell,不需要输入用户名和密码就能进入shell,比如运行bash会开启一个新的会话窗口。

shell的使用有两种:

  • 交互式:等待用户输入执行的命令。
  • 非交互式:执行shell脚本,执行结束后shell自动退出。

bash配置文件(主要保存用户的工作环境)

全局配置文件:

  • /etc/profile
  • /etcprofile.d/*.sh
  • /etc/bashrc

个人配置文件:

  • ~/.bash_profile
  • ~/.bashrc

profile类文件:设定环境变量,登录前运行的脚本和命令。

bashrc类文件:设定本地变量,定义命令别名。

注:如果全局配置和个人配置冲突,以个人配置为准。

配置文件加载顺序

  • 登录式shell

/etc/profile -> /etc/profile.d/*.sh -> ~/.bash_profile -> ~/.bashrc -> /etc/bashrc

  • 非登录式shell

~/.bashrc -> /etc/bashrc -> /etc/profile.d/*.sh

# 非登录式shell:只切换用户身份
su 用户名

# 登录式shell:身份与环境都切换
su - 用户名

# -c选项切换身份执行命令
su - 用户名 -c “命令”
# root切换到普通用户不需要,反之需要。

sudo提权

sudo命令不需要知道root用户密码,并且能仅划分一部分权限给普通用户,相比于su更安全。sudo可以切换

sudo配置

  • 1、visudo命令(会提示语法错误,推荐使用)

    # visudo的本质也是调用vi来修改/etc/sudoers文件,该文件涉及权限问题,如果配置错误会导致系统问题。推荐使用visudo命令,它会在退出时有错误提示。
    -c:检查配置是否正确
    
  • 2、vim /etc/sudoers修改配置文件。

/etc/sudoers配置方式

# 基本格式
user/group	ALL=(ALL)	ALL
  • user/group:

    • 表示允许哪个用户或组可以使用sudo

      • # 可以指定具体某个用户,也可以将多个用户添加到别名里
        User_Alias ADMINS =chirou, panghu
        ADMIN	ALL=(ALL)	ALL
        
        # 指定系统组,在组名前面加上%
        %group	ALL=(ALL)	ALL
        
  • 第一个ALL:

    • 表示允许在哪台主机登录

      • # 可以指定主机ip或主机名,指定的是服务端ip,与从哪个客户端连接无关。
        user	192.168.0.2=(ALL)	ALL
        
        # /etc/sudoers文件可以共享复制到多部主机上,这样只修改一份文件,指定哪个用户可以在哪台主机使用sudo命令,就可以直接拷贝到其他主机上,非该主机用户不能使用sudo,这样就能分主机管理,互不影响。
        
  • 第二个ALL:

    • 表示能转换成哪个用户

      • # 胖虎可以在所有主机上转换成所有用户执行任何命令
        panghu	ALL=(ALL)	ALL
        
  • 第三个ALL:

    • 表示转换后能执行的命令

      • # ALL表示所有命令,可以使用绝对路径指定某些命令
        /usr/sbin/ifconfig,/bin/vim /f1
        
        # 指定不能使用某些命令
        !/bin/vim /f1
        
        # 指定使用某些命令不需要输入密码
        NOPASSWD:/usr/sbin/ifconfig
        
        # 可以使用命令别名
        NOPASSWD:命令别名
        

sudo执行流程

  • 1、普通用户执行sudo命令,会检查/var/db/sudo是否存在时间戳缓存
  • 2、如果存在则不需要输入密码,否则需要输入用户与密码
  • 3、输入密码会检查是否是该用户、是否拥有权限。
  • 4、如果有则执行,没有则报错退出。

sudo常用选项

-l:登录用户下,执行命令显示当前用户有哪些权限。
-k:删除/var/db/sudo下面对应的时间戳的信息,下次执行sudo需要输入当前用户的密码,系统默认是五分钟。
-u:指定用户,可以指定/sbin/nologin用户,不指定则为root。
-b:将命令放入后台运行。
[chirou@duorou ~ ]$ tail /etc/passwd
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
# 指定/sbin/nologin用户
[chirou@duorou ~ ]$ sudo -u gdm touch /tmp/gdm
[sudo] chirou 的密码:
[chirou@duorou ~ ]$ ll /tmp/gdm
-rw-r--r--. 1 gdm gdm 0 10月 31 20:55 /tmp/gdm
原文地址:https://www.cnblogs.com/ChiRou/p/13911886.html