小熊奶糖(BearCandy)
小熊奶糖(BearCandy)
发布于 2024-05-28 / 24 阅读
0
0

Linux 用户查看,切换命令sudo命令以及sudoers文件

在Linux操作系统中,用户管理和用户身份切换是系统管理员日常工作中非常重要的部分。下面我将详细介绍Linux中的用户查看命令、用户身份切换命令以及 su -命令中 --的作用。

用户查看命令

  1. whoami:显示当前登录用户的用户名。

    whoami
    
  2. who:显示当前登录系统的所有用户信息。

    who
    
  3. w:显示当前登录系统的用户及其正在执行的进程。

    w
    
  4. users:显示当前登录系统的用户列表。

    users
    
  5. finger:显示用户的信息,包括用户名、主目录、登录Shell、最后一次登录时间等。

    finger [用户名]
    
  6. id:显示当前用户或指定用户的信息,包括用户ID和组ID。

    id [用户名]
    

用户身份切换命令

使用su切换后可使用exit可退回原来的身份

  1. su:切换到其他用户身份,默认情况下不切换环境变量。
    su [用户名]
    
  2. su -:切换到其他用户身份,并切换环境变量,即启动一个登录Shell。
    su - [用户名]
    

"su –"中的"--"作用

su命令中,-(减号)后面紧跟着一个空格,然后是用户名,表示切换用户的同时,环境变量也会跟着改变,即切换到目标用户的环境中,相当于目标用户重新登录了一次。这被称为登录Shell。
如果不加 -,则只是切换了用户身份,但环境变量仍然是原始用户的环境变量,这被称为非登录Shell。登录Shell会读取目标用户的配置文件,如 .bash_profile.bashrc,从而设置相应的环境变量和工作环境。
总结来说,su -命令提供了一个更加完整的用户环境切换,而不仅仅是用户ID和组ID的切换。

使用 su命令切换到root用户确实存在一些安全隐患,尤其是在不恰当或不受控的环境中。以下是一些主要的安全隐患:

  1. 密码暴露风险:在使用 su命令时,需要输入root密码。在共享或公共计算机上使用 su时,密码可能会被旁观者看到,或者在命令历史中留下记录。
  2. 命令历史记录:如果未正确配置Shell,su命令输入的密码可能会被保存在命令历史记录中,这可能会被其他具有访问权限的用户读取。
  3. 提权风险:一旦获得root权限,用户可以做任何事情,包括修改系统文件、安装软件、更改系统配置等。如果用户不小心或故意执行了危险的命令,可能会对系统稳定性造成严重影响。
  4. 滥用风险:在多用户系统中,如果多个用户知道root密码,那么任何一个用户都可以随时切换到root账户,这增加了账户被滥用的风险。
  5. 审计和追踪困难:当多个用户使用同一个root账户时,很难追踪特定的操作是由哪个用户执行的,这给系统审计带来了困难。

为了减少这些风险,可以采取以下措施:

  • 使用sudosudo命令允许特定的用户以root权限执行单个命令,而不是完全切换到root用户。这样可以限制用户可以执行的操作,并减少密码暴露的风险。
  • 配置sudoers文件:通过编辑 /etc/sudoers文件,可以精确控制哪些用户可以执行哪些命令,以及是否需要输入密码。
  • 使用SSH密钥认证:对于远程访问,使用SSH密钥认证代替密码认证,可以提高安全性。
  • 限制root登录:可以在系统中禁用或限制root用户的SSH登录,强制所有管理任务通过sudo执行。
  • 定期更新密码:定期更改root密码,并确保密码足够复杂,以减少被破解的风险。
  • 审计和监控:启用系统审计功能,监控和记录所有用户的敏感操作。

通过采取这些措施,可以在一定程度上降低使用 su命令切换到root用户时的安全风险。

sudo 命令详解

sudo(Substitute User and Do)是一个允许授权用户以其他用户(通常是root用户)的身份执行命令的程序。它可以帮助管理员授权特定的用户执行特定的系统管理任务,而不需要给他们root密码。

基本语法如下:


sudo [选项] 命令

常用选项包括:

  • -u:指定要模拟的用户,默认为root。
  • -l:列出用户可以执行的命令。
  • -k:清除用户的sudo会话时间戳,下次执行sudo时需要重新输入密码。
  • -v:更新用户的sudo会话时间戳,避免在执行多个sudo命令时重复输入密码。

visudo 命令详解

visudo是一个编辑 /etc/sudoers文件的专用工具,它提供了语法检查功能,以防止配置错误导致无法执行sudo命令。visudo使用默认的文本编辑器来打开 sudoers文件,通常是 vi

使用 visudo时,应该非常小心,因为 sudoers文件的错误配置可能会导致用户无法执行sudo命令,甚至无法以root身份登录系统。

sudoers 配置文件详解

sudoers文件是 sudo的配置文件,通常位于 /etc/sudoers。它定义了哪些用户可以以root权限执行哪些命令。sudoers文件的语法非常严格,任何错误都会导致 sudo命令无法正常工作。

sudoers文件的基本格式如下:


用户 主机=命令

  • 用户:可以是一个用户或用户组,前面加上 %表示用户组。
  • 主机:指定该规则适用的主机,可以用 ALL表示所有主机。
  • 命令:允许执行的命令,可以用 ALL表示所有命令。

sudoers文件还支持别名,可以将多个用户、主机或命令组合在一起,便于管理。

实际案例

假设我们想要允许用户 john在主机 myserver上以root权限执行 /bin/cat/bin/ls命令,但不允许执行其他命令。我们可以这样配置 sudoers文件:


john myserver=(root) NOPASSWD: /bin/cat, /bin/ls

这表示 johnmyserver上执行 /bin/cat/bin/ls时不需要输入密码。

如果我们想要允许用户组 admins的所有成员在任何主机上执行所有命令,可以这样配置:


%admins ALL=(ALL) ALL

这表示 admins组中的所有用户都可以在任何主机上执行所有命令。

最后,使用 visudo编辑 sudoers文件时,一定要确保语法正确,避免造成系统管理上的麻烦。

sudoerssudo命令的配置文件,它定义了哪些用户可以以超级用户的权限执行哪些命令。这个文件通常位于 /etc/sudoers,并且应该使用 visudo命令来编辑,因为它会进行语法检查,以防止配置错误。

sudoers 文件的结构

sudoers文件由几个主要部分组成:

  1. 别名定义:可以在 sudoers文件中定义用户、主机、命令和用户的别名。

    • 用户别名(User_Alias)
    • 主机别名(Host_Alias)
    • 命令别名(Cmnd_Alias)
    • 用户组别名(Runas_Alias)
  2. 权限规则:定义了谁可以执行哪些命令,以及如何执行。

  3. 杂项设置:包括默认值和其他选项。

别名定义

别名可以用来简化 sudoers文件的维护。例如,如果你有一组用户需要执行相同的命令,你可以为他们定义一个用户别名。


User_Alias ADMINS = user1, user2, user3

同样,你可以为主机和命令定义别名:


Host_Alias FILESERVERS = fs1, fs2

Cmnd_Alias FILE_CMDS = /bin/ls, /bin/rm, /bin/mv

权限规则

权限规则指定了哪些用户或用户组可以在哪些主机上执行哪些命令。每条规则由四个部分组成:用户、主机、用户模拟(Runas)和命令。


user  MACHINE=COMMANDS

例如:


joe  ALL=(root) /bin/kill, /bin/ps

这允许用户 joe在所有主机上以 root用户的身份执行 /bin/kill/bin/ps命令。

杂项设置

sudoers文件还包含一些默认设置,例如:

  • Defaults:设置默认选项,如是否提示输入密码、命令日志等。
  • env_reset:重置环境变量,以防止用户篡改环境。
  • env_keep:指定哪些环境变量应该被保留。

实际案例

假设我们想要允许 dev用户组中的所有用户在不输入密码的情况下执行 /usr/sbin目录下的所有命令,可以这样配置:


%dev ALL=(ALL) NOPASSWD: /usr/sbin/

如果我们想要允许用户 alice在任何主机上以 bob用户的身份执行所有命令,可以这样配置:


alice ALL=(bob) ALL

安全建议

  • 使用 visudo编辑 sudoers文件,而不是直接编辑。
  • 保持 sudoers文件的简洁和有序。
  • 定期审查 sudoers文件,确保权限是最小的必要权限。
  • 使用别名来简化权限规则的维护。
  • 避免使用 NOPASSWD,除非绝对必要。
  • 确保 sudoers文件的权限是 0440,只有 root用户可以读写。

评论