su以及sudo高级用法

su(switch user)命令允许用户切换到另一个用户账户,通常用于临时获得超级用户(root)权限。虽然 su的基本用法很简单,但它也有一些高级用法和配置选项,可以帮助系统管理员更灵活地管理和控制用户权限。以下是一些 su的高级用法和技巧:

 1. 基本用法

切换到 root 用户:

  su -

  这将切换到 root 用户,并加载 root 用户的环境变量。

切换到其他用户:

  su - username

  这将切换到指定的用户,并加载该用户的环境变量。

 2. 不加载目标用户的环境变量

不加载目标用户的环境变量:

  su username

  这将切换到指定的用户,但不会加载该用户的环境变量,而是保留当前用户的环境变量。

 3. 一次性执行命令

以其他用户身份执行单个命令:

  su - username -c "command"

  这将切换到指定的用户,并执行指定的命令,然后返回到当前用户。

 4. 配置文件

su的行为可以通过 /etc/pam.d/su和 /etc/login.defs文件进行配置。

 5. PAM 配置

PAM(Pluggable Authentication Modules)允许对 su的认证和授权过程进行细粒度的控制。常见的 PAM 配置文件是 /etc/pam.d/su。

限制特定用户使用 su:

  在 /etc/pam.d/su文件中,可以使用 pam_wheel.so模块来限制只有特定用户组的成员才能使用 su。例如:

  auth       required   pam_wheel.so use_uid

  这将要求用户必须属于 wheel组才能使用 su。

记录 su的使用:

  可以使用 pam_tally2.so模块来记录 su的使用次数和失败尝试。例如:

  account    required   pam_tally2.so

 6. 登录定义

/etc/login.defs文件包含了一些与用户登录和切换相关的配置选项。

设置 su的超时时间:

  可以在 /etc/login.defs文件中设置 SU_TIMEOUT,以限制 su会话的持续时间。例如:

  SU_TIMEOUT 300

  这将设置 su会话的最大持续时间为 300 秒(5 分钟)。

 7. 使用 sudo替代 su

虽然 su是一个强大的工具,但在许多情况下,使用 sudo可能更加安全和灵活。sudo允许更细粒度的权限控制,并且可以记录每个命令的执行情况。

 8. su和 sudo的组合使用

有时,su和 sudo可以结合使用,以实现更复杂的权限管理。

使用 sudo切换到 root 用户:

  sudo su -

  这将使用 sudo切换到 root 用户,并加载 root 用户的环境变量。

使用 sudo切换到其他用户:

  sudo su - username

  这将使用 sudo切换到指定的用户,并加载该用户的环境变量。

 9. 安全注意事项

限制 su的使用:尽量限制普通用户使用 su切换到 root 用户,可以使用 pam_wheel.so模块来限制只有特定用户组的成员才能使用 su。

记录 su的使用:确保 su的使用被记录在系统日志中,以便审计和安全审查。

定期审核权限:定期检查和审核用户的权限配置,确保没有不必要的权限分配。

 示例

以下是一些具体的 su命令示例:

切换到 root 用户并加载环境变量:

  su -

切换到 john用户并加载环境变量:

  su - john

以 john用户身份执行单个命令:

  su - john -c "ls -l /home/john

使用 sudo切换到 root 用户:

  sudo su -

用 sudo切换到 john用户:

  sudo su - john

sudo 是一个非常强大的命令,允许用户以其他用户(通常是 root)的身份执行命令。除了基本用法之外,sudo 还有许多高级功能和配置选项,可以帮助系统管理员更精细地控制用户权限。以下是一些 sudo 的高级用法和配置技巧:

 1. 配置 sudoers 文件

sudo 的配置文件是 /etc/sudoers。直接编辑这个文件可能会导致语法错误,因此建议使用 visudo 命令来编辑,它会检查语法错误并防止损坏配置文件。

sudo visudo

 2. 常见的 sudoers 条目

允许用户执行特定命令:

  user ALL=(ALL:ALL) NOPASSWD: /usr/bin/command

  这条规则允许 user 在任何主机上以任何用户身份执行 /usr/bin/command 命令,并且不需要输入密码。

允许用户执行多个命令:

  user ALL=(ALL:ALL) NOPASSWD: /usr/bin/command1, /usr/bin/command2

允许用户执行特定命令集:

  Cmnd_Alias FILECMDS = /bin/chown, /bin/chmod, /bin/chgrp

  user ALL=(ALL:ALL) NOPASSWD: FILECMDS

允许用户执行特定目录下的所有命令:

  user ALL=(ALL:ALL) NOPASSWD: /path/to/directory/*

限制用户只能以特定用户身份执行命令:

  user ALL=(specific_user:ALL) NOPASSWD: /usr/bin/command

 3. sudo 命令选项

-l:列出用户可以执行的命令。

  sudo -l

-u:指定以哪个用户身份执行命令。

  sudo -u otheruser command

-i:以目标用户的登录 shell 执行命令。 

  sudo -i -u otheruser

-k:立即撤销 sudo 的时间戳,下次使用 sudo 时需要重新输入密码。

-K:撤销 sudo 的时间戳并删除缓存的凭证。

-v:更新 sudo 的时间戳,延长密码的有效期。

 4. sudo 时间戳

sudo 有一个时间戳机制,默认情况下,用户在首次成功使用 sudo 后的一段时间内(通常是15分钟)无需再次输入密码。可以通过配置 sudoers 文件来调整这个时间:

Defaults timestamp_timeout=30

这将时间戳的有效期设置为30分钟。

 5. sudo 日志记录

sudo 会记录所有通过 sudo 执行的命令,日志通常位于 /var/log/auth.log(Debian/Ubuntu)或 /var/log/secure(Red Hat/CentOS)。可以使用 grep 查看特定用户的 sudo 记录:

grep sudo /var/log/auth.log

 6. sudo 环境变量

sudo 可以控制传递给命令的环境变量。默认情况下,sudo 会清理环境变量,以防止安全漏洞。可以在 sudoers 文件中配置环境变量的传递:

Defaults env_keep += "MYVAR"

这将保留 MYVAR 环境变量。

 7. sudo 脚本

可以使用 sudo 执行脚本,但需要注意脚本的安全性。确保脚本没有安全漏洞,避免在脚本中使用危险的命令。

sudo /path/to/script.sh

 8. sudo 和 NOPASSWD

NOPASSWD 标记可以让用户在执行某些命令时不需要输入密码,但应谨慎使用,因为它可能带来安全风险。确保只对可信用户和必要的命令使用 NOPASSWD。

 9. sudo 和 sudoers.d

在现代 Linux 发行版中,sudo 支持 /etc/sudoers.d 目录,可以在这个目录下创建多个配置文件,每个文件包含特定的 sudo 规则。这样可以更容易地管理和维护复杂的 sudo 配置。

sudo visudo -f /etc/sudoers.d/myrules

 10. sudo 和 PAM

sudo 可以与 PAM(Pluggable Authentication Modules)集成,实现更复杂的认证和授权机制。例如,可以配置 PAM 以要求用户在使用 sudo 时进行二次认证。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值