网站建设怎么建好,西安千度网站建设,wordpress 影视源码,租房合同模板免费下载文章目录命令介绍原理相关文件通配符和命令 su 的比较常用选项几个重要选项的解读-k 选项-s 选项-i 选项su、sudo su、sudo -i 的区别查看日志文件参考示例以用户 mysql 的身份执行命令 pwd以用户 root 的身份执行命令 pwd以 root 的权限执行上一条命令以 root 的权限编辑指定的…
文章目录命令介绍原理相关文件通配符和命令 su 的比较常用选项几个重要选项的解读-k 选项-s 选项-i 选项su、sudo su、sudo -i 的区别查看日志文件参考示例以用户 mysql 的身份执行命令 pwd以用户 root 的身份执行命令 pwd以 root 的权限执行上一条命令以 root 的权限编辑指定的文件普通用户切换成 root 身份使用 root 的身份执行最近一条指令使用 sudo 切换 Shell 类型切换成指定的用户显示当前用户可以用 sudo 执行哪些命令通过加入群组的方式给普通用户授权命令介绍
substitute user identity to do替换身份去执行缩写为 sudo。
sudo 命令用来以其他身份来执行命令预设的身份为 root。在 /etc/sudoers 中设置了可执行 sudo 指令的用户。若其未经授权的用户企图使用 sudo则会发出警告的邮件给管理员。用户使用 sudo 时必须先输入密码之后有 5 分钟的有效期限超过期限则必须重新输入密码。
简单的说sudo 是一种权限管理机制管理员可以授权一些普通用户去执行一些 root 执行的操作而不需要知道 root 的密码。普通用户必须在文件 /etc/sudoers 中进行有关授权才能使用命令 sudo。
更加正确地说法是sudo 允许一个已授权用户以超级用户或者其它用户的角色运行一个命令。当然能做什么不能做什么都是通过安全策略来指定的。sudo 支持插件架构的安全策略并能把输入输出写入日志。第三方可以开发并发布自己的安全策略和输入输出日志插件并让它们无缝的和 sudo 一起工作。默认的安全策略记录在 /etc/sudoers 文件中。而安全策略可能需要用户通过密码来验证他们自己。也就是在用户执行 sudo 命令时要求用户输入自己账号的密码。如果验证失败sudo 命令将会退出。
原理
sudo 使一般用户不需要知道超级用户的密码即可获得权限。首先超级用户将普通用户的名字、可以执行的特定命令、按照哪种用户或用户组的身份执行等信息登记在特殊的文件中通常是 /etc/sudoers即完成对该用户的授权此时该用户称为“sudoer”在一般用户需要取得特殊权限时其可在命令前加上 sudo此时 sudo 将会询问该用户自己的密码以确认终端机前的是该用户本人回答后系统即会将该命令的进程以超级用户的权限运行。之后的一段时间内默认为5分钟可在 /etc/sudoers 自定义使用 sudo 不需要再次输入密码。
sudo 命令的运行需经历如下几步
当用户运行 sudo 命令时系统会先通过 /etc/sudoers 文件验证该用户是否有运行 sudo 的权限 确定用户具有使用 sudo 命令的权限后还要让用户输入自己的密码进行确认。出于对系统安全性的考虑如果用户在默认时间内默认是 5 分钟不使用 sudo 命令此后使用时需要再次输入密码 密码输入成功后才会执行 sudo 命令后接的命令。
显然能否使用 sudo 命令取决于对 /etc/sudoers 文件的配置默认情况下此文件中只配置有 root 用户。默认情况下 sudo 命令只有 root 身份可以使用。
相关文件
配置文件 /etc/sudoers /etc/sudoers.d/
时间戳文件 /var/db/sudo
日志文件 /var/log/secure
通配符
?:匹配任意一个字符
*:匹配任意数量的任意字符
[wxc]:匹配其中一个字符
[!wxc]:除了这三个字符的其它字符
\x:转义
[[alpha]]:表示匹配任意一个英文字母。示例/bin/ls [[alpha]]*和命令 su 的比较
相对于使用 su 命令还需要新切换用户的密码sudo 命令的运行只需要知道自己的密码即可甚至于我们可以通过手动修改 sudo 的配置文件使其无需任何密码即可运行。
常用选项
选项说明-b在后台执行指令-e 或 --edit编辑文件而非执行命令等效于 sudoedit-i 或 --login以目标用户身份登录 shell可同时指定一条命令。其实就是相当于使用目标用户的身份重新登录 shell-H将HOME环境变量设为新身份的HOME环境变量-k结束密码的有效期限也就是下次再执行sudo时便需要输入密码。强迫使用者在下一次执行 sudo 时输入密码不论有没有超过 N 分钟-l列出目前用户可执行与无法执行的指令。显示出自己执行 sudo 的使用者的权限。用于显示当前用户可以用 sudo 执行那些命令-p改变询问密码的提示符号即可以更改问密码的提示语其中 %u 会代换为使用者的帐号名称%h 会显示主机名称-sshell执行指定的shell。执行环境变量 SHELL 中所指定的 shell 或是 /etc/passwd 里所指定的 shell-S从标准输入流替代终端来获取密码-u用户以指定的用户作为新的身份。若不加上此参数则预设以root作为新的身份-v延长密码有效期限5分钟。因为 sudo 在第一次执行时或是在 N分钟内没有执行N 预设为五会提示输入密码这个参数是重新做一次确认如果超过N分钟也会提示输入密码-V显示版本信息-h显示帮助
几个重要选项的解读
-k 选项
考虑下这种情况 输入密码后你刚刚运行了几个 sudo 驱动的命令而 sudo 会话默认保持 5 分钟。假设在这会话期间你需要让某些人访问你的终端但你不想让他们可以使用 sudo你将会怎么做没错-k 选项允许用户提前结束 sudo 会话的有效期。
以下是 sudo 帮助页面的解释 -k, --reset-timestamp 不带任何命令使用时撤销用户缓存的凭据。换句话讲下一次使用sudo将会要求输入密码。使用这个参数不需要密码也可以放到一个 ./logout文件中来撤销 sudo 权限。 当与一个命令或者一个可能需要密码的操作一起用时这个参数将会导致sudo忽略用户缓存的凭据。结果是sudo要求输入密码如果这是被安全策略所要求的而且不会更新用户缓存的凭据。 -s 选项
有时你的工作要求你运行一堆需要 root 权限的命令你不想每次都输入密码。你也不想通过改变/etc/sudoers文件调整sudo会话的过期时限。
这种情况下你可以用 sudo 的 -s 选项。以下是 sudo 帮助页面的解释 -s,–shell 如果设置了 SHELL 环境变量或者调用用户的密码数据库指定了 shell就运行该 shell 。如果指定了命令命令将会通过 shell 的 -c参数将命令传递给该 shell 执行。如果没有指定命令会执行一个交互式 shell。 所以基本上这命令参数做的是
1.启动一个新的 shell至于是哪一个 shell参照 SHELL 环境变量赋值。如果 $SHELL 是空的将会用 /etc/passwd 中定义的 shell。 2.如果你用 -s 参数传递了一个命令名例如sudo -s whoami实际执行的是 sudo /bin/bash -c whoami。 3.如果你没有尝试执行其他命令也就是说你只是运行 sudo -s你将会得到一个有 root 权限的交互式的 shell。 4.请记住-s 命令行参数给你一个有 root 权限的 shell但那不是 root 环境 —— 还是执行的你自己的 .bashrc。例如在 sudo -s 运行的新 shell 里执行 whoami 命令仍会返回你的用户名而非 root 。
-i 选项
-i 选项和 -s 选项相像。然而还是有点区别。一个重要的区别是 -i 给你的是 root 环境意味着原用户的 .bashrc 被忽略。这就像没有显式地用 root 登录也能成为 root 。此外你也不用输入 root 用户密码。
su、sudo su、sudo -i 的区别
补充…
查看日志文件
在 ubuntu 中sudo 的日志默认被记录在 /var/log/auth.log 文件中。当我们执行 sudo 命令时相关日志都是会被记录下来的。比如下图中显示的就是一次执行 sudo 命令的日志
在 CentOS 中查看日志 /vat/log/secure
[rootlocalhost ~]# tail /var/log/secure
Apr 5 13:55:58 localhost su: pam_unix(su-l:session): session opened for user tom by root(uid0)
Apr 5 13:56:11 localhost su: pam_unix(su-l:session): session closed for user tom
Apr 5 13:56:17 localhost passwd: pam_unix(passwd:chauthtok): password changed for tom
Apr 5 13:56:17 localhost passwd: gkr-pam: couldnt update the login keyring password: no old password was entered
Apr 5 13:56:23 localhost su: pam_unix(su-l:session): session opened for user tom by root(uid0)
Apr 5 13:56:43 localhost sudo: tom : TTYpts/0 ; PWD/home/tom ; USERroot ; COMMANDlist
##tom以管理员身份执行了list命令
Apr 5 14:00:50 localhost sudo: tom : TTYpts/0 ; PWD/home/tom ; USERroot ; COMMAND/usr/sbin/useradd test1
##tom以管理员身份执行了useradd命令添加用户test1
Apr 5 14:00:50 localhost useradd[2128]: new group: nametest1, GID501
Apr 5 14:00:50 localhost useradd[2128]: new user: nametest1, UID501, GID501, home/home/test1, shell/bin/bash
Apr 5 14:07:15 localhost su: pam_unix(su-l:session): session closed for user tom以后可以查看日志文件分析主机是否遭到入侵攻击或者查看某用户登录进来并使用特殊权限执行了哪些指令等。所以我们要实时监控此文件的动向。
参考示例
以用户 mysql 的身份执行命令 pwd
当前登录用户是 root我要以 mysql 的身份执行命令 pwd命令如下
[roothtlwk0001host ~]# sudo -u mysql pwd
/root以用户 root 的身份执行命令 pwd
当前登录用户是 mysql我要以 root 的身份执行命令 pwd命令语句如下
[mysqlhtlwk0001host root]$ sudo pwd
[sudo] mysql 的密码
mysql 不在 sudoers 文件中。此事将被报告。注 1.sudo 没有使用选项 -u 来指定其它用户默认是 root 用户 2.从上面输出结果可以知道使用命令 sudo需要输入当前登录用户自己的密码 3.当前登录用户没有在 /etc/sudoers 文件中所以不能使用命令 sudo
这个命令相当于使用 root 超级用户重新登录一次 shell只不过密码是当前登录用户的密码。而且重要是该命令会重新加载 /etc/profile 文件以及 /etc/bashrc 文件等系统配置文件并且还会重新加载 root 用户的 $SHELL 环境变量所对应的配置文件 比如root 超级用户的$SHELL 是 /bin/bash则会加载 /root/.bashrc 等配置。如果是 /bin/zsh则会加载 /root/.zshrc 等配置执行后是完全的 root 环境。
以 root 的权限执行上一条命令
如果由于你忘了使用 sudo 而导致命令行返回一个错误只需输入 sudo !! 就可以用 sudo 来执行上一条指令
[mysqlhtlwk0001host ~]$ sudo !!以 root 的权限编辑指定的文件
[roothtlwk0001host mysql]# sudo -e /root/student.txt使用命令 sudo如果没有使用选项 -u 指定用户默认是 root 用户。这条命令等效下面这条指令
[roothtlwk0001host mysql]# sudoedit /root/student.txt普通用户切换成 root 身份
当前登录用户是 mysql想切换成用户 root可以执行下面的命令
[mysqlhtlwk0001host ~]$ sudo -i
[sudo] mysql 的密码注 1.这里是输入用户 mysql 自己的登录密码。 2.必须在文件 /etc/sudoers 中配置用户 mysql 有关 sudo 的权限即授权用户 mysql 才能使用命令 sudo。 3.选项 -i表示以目标用户 root 登录 shell这样切换成用户 root 后相关的运行环境也改变成用户 root 的运行环境感觉好像就是以用户 root 登录 shell 一样其实还是有区别的具体需要参阅手册。
也可以使用命令 su 切换成 root 用户
[mysqlhtlwk0001host ~]$ su root
密码这里需要输入用户 root 的登录密码。
使用 root 的身份执行最近一条指令
如果由于你忘了使用 sudo 而导致命令行返回一个错误只需输入 sudo !! 就可以用 sudo 来执行上一条指令。
使用 sudo 切换 Shell 类型
如果你需要执行很多条需要 root 权限的命令你可以临时切换整个命令行 shell 来取得 root 级别的访问权限。方法就是先输入sudo -s回车后再键入你的密码。
感觉 -s 选项有点类似 -i 选项都可以切换指定用户身份。
切换成指定的用户
[roothtlwk0001host ~]# sudo -u mysql -i
[mysqlhtlwk0001host ~]$ 或者
[roothtlwk0001host ~]# sudo -u mysql -s
[mysqlhtlwk0001host root]$ 感觉 -s 选项有点类似 -i 选项都可以切换成指定的用户身份。但是两者肯定有区别我没有研究出本质的区别目前可以知道的就是使用选项 -i 切换后当前工作目录会改成目标用户的家目录而选项 -s 则没有改变但是这点并不是很重要我查看了两种选项切换后的环境变量也都改成了目标用户的环境变量。
重要请注意 su 命令也能让你切换用户默认切换到 root 。这个命令需要你输入 root 密码。为了避免这一点你可以使用 sudo 执行它
[mysqlhtlwk0001host root]$ sudo su
[sudo] mysql 的密码
[roothtlwk0001host ~]# 这样你只需要输入你的登录密码。
显示当前用户可以用 sudo 执行哪些命令
[lamplocalhost ~]$ sudo -l
[sudo] password for lamp: # 需要输入lamp用户的密码
User lamp may run the following commands on this host:
(root) /sbin/shutdown -r now可以看到lamp 用户拥有了 shutdown -r now 的权限。这时lamp 用户就可以使用 sudo 执行如下命令重启服务器
[lamplocalhost ~]$ sudo /sbin/shutdown -r now通过加入群组的方式给普通用户授权
ubuntu 系统默认创建了一个名为 sudo 的组。只要把用户加入这个组用户就具有了 sudo 的权限。 至于如何把用户加入 sudo 组您可以直接编辑 /etc/group 文件当然您得使用一个有 sudo 权限的用户来干这件事
$ sudo vim /etc/group在 sudo 组中加入新的用户要使用逗号分隔多个用户
sudo:x:27:nick,jack或者您可以使用 usermod 命令把用户 jack 添加到一个 sudo 用户组中
$ sudo usermod -a -G sudo jack上面的设置中我们把用户 jack 添加到了 sudo 组中所以当用户 jack 登录后就可以通过 sudo 命令以 root 权限执行命令了