第一部分 认识用户 Centos 7 系统最小化安装,默认配置,是没有创建其他用户的。作为服务器操作系统,为了安全起见,一般是使用一般用户。这就牵涉到用户、用户组的创建以及删除。...新建一个UID=501,GID=600,30天有效期,家目录为/home/test5的用户test4....可以看到拥有setUID权限,任何用户都有x(执行)权限,故可以执行sudo命令。下面的内容就当作是对setUID权限的理解。.../sudo //修改权限为4755,其中4代表以文件所有者执行 chmod 4755 /usr/bin/sudo 上面的命令意思是,将文件/usr/bin/sudo拥有者改为root,当执行时以root...sudo:有效用户 ID 不是 0,sudo 属于 root 并设置了 setuid 位吗? 解决方法呢,就是刚才说的以root(uid=0)身份运行。
sudo命令工作流程 sudo会读取和解析/etc/sudoers文件,查找调用的用户及权限 提示调用该命令用户的密码,如果有NOPASSWD标志则跳过密码验证. sudo会创建一个子进程,调用setuid...(ytzmdz) 使用sudo id时,将显示用户root的id [ytzmdz@localhost ~]$ sudo id uid=0(root) gid=0(root) groups=0(root)...(即开启第一行,注释第二行),这种状态下是允许所有用户间使用su命令进行切换的 两行都注释也是运行所有用户都能使用su命令,但root下使用su切换到其他普通用户需要输入密码;如果第一行不注释,则root...使用su切换普通用户就不需要输入密码 (pam_rootok)so模块的主要作用是使uid为0的用户,即root用户能够直接通过认证而不用输入密码如果开启第二行,表示只有root用户和...它会保留当前用户的环境变量和工作目录。`sudo` 默认会询问密码,密码是执行命令的用户的密码,可在sudoer 配置文件设置用户执行sudo命令免密。
sudo命令工作流程 sudo会读取和解析/etc/sudoers文件,查找调用的用户及权限 提示调用该命令用户的密码,如果有NOPASSWD标志则跳过密码验证. sudo会创建一个子进程,调用setuid...(USER:GROUP): 表示使用 sudo 可切换的用户或者组,组可以不指定;ALL 表示可以切换到系统的所有用户....rumenz 的密码,而不是root用户的密码。...> id uid=1001(rumenz) gid=1001(rumenz) groups=1001(rumenz) 当使用sudo id时 uid=0(root) gid=0(root) groups...=0(root) sudo -i sudo -i:可以切换到root状态下.
sudo和su之间的区别 su用于用户之间的切换 sudo用于普通用户可以使用root权限来执行命令 su命令是当前用户用来切换到另外一个用户的命令,参数为用户名。...sudo命令工作流程 sudo会读取和解析/etc/sudoers文件,查找调用的用户及权限 提示调用该命令用户的密码,如果有NOPASSWD标志则跳过密码验证. sudo会创建一个子进程,调用setuid...rumenz 的密码,而不是root用户的密码。...> id uid=1001(rumenz) gid=1001(rumenz) groups=1001(rumenz) 当使用sudo id时 uid=0(root) gid=0(root) groups...=0(root) sudo -i sudo -i:可以切换到root状态下.
### sudo和su之间的区别 - su用于用户之间的切换 - sudo用于普通用户可以使用root权限来执行命令 > su命令是当前用户用来切换到另外一个用户的命令,参数为用户名。...` > 当你执行这个命令时,它会询问 rumenz 的密码,而不是root用户的密码。.../sudo ---s--x--x. 1 root root 143248 Jun 28 2018 /usr/bin/sudo ``` > 如果仔细观察文件权限,则发现 sudo 上启用了setuid位...``` > id uid=1001(rumenz) gid=1001(rumenz) groups=1001(rumenz) ``` > 当使用`sudo id`时 ``` uid=0(root) gid...=0(root) groups=0(root) ``` ### `sudo -i` > sudo -i:可以切换到root状态下.
sudo 和 suid 提权 何为suid 可见在权限位置有一个s权限。那么这个s的作用是什么呢? 答案是当其他用户执行该文件时,该文件会以root的身份执行。...UID: 在高权限用户降权后,保留的其原本UID (不展开说) 所以增加了一个s权限,该程序在实际运行时Effective UID就会变为0,即root的UID sudo 就是能把一个命令视作root来执行...crontab管理,非root用户是无法列出root用户的计划任务的,但我们可以列出/etc的系统任务,系统任务默认是root权限运行的 ls -l /etc/cron* 如果我们有幸有权限能更改其中一个任务指定的脚本...在进行特权操作的时候,如果euid不是root,那么系统就会检查是否具有执行特权操作的对应capabilities ,并以此为凭据决定特权操作是否能被执行。...os; os.setuid(0)' -ex '!
看起来大部分是条件一 ruid 有效,这些用例对条件二的测试不足,需要构造一组新的用例进行验证。...不同,满足了上述的条件二;保持 RUID 无效 (-1) 不满足条件一,是不是就能走条件二了?...重新运行: > sudo sh setreuid-setroot.sh ... test set-uid root 29511: ruid 1003, euid 0, suid 0 test setreuid...它在改变 EUID 时是不希望 SUID 变更的,所以这下全明白了:setreuid 这样的设计是为了给 seteuid 切换特权身份留后门,从而有机会再切换回之前的身份。...大意是说 seteuid 到底等价于setreuid(-1,euid) 还是setresuid(-1,euid,-1)要看 glibc 版本,前者在改变 SUID 的逻辑上遵循上面的讨论;后者不遵循,或者说
/clonefd before fork 5433 spawned from 5432 [2] 5432 create 5433 父进程的 printf 不工作但 write 可以工作,符合预期。...root demo1 demo 中的 bar 并不是超级用户,而 set-uid 的大多数场景是超级用户,将 bar 切换为 root 会有什么不同?...最终结论,mac 上的 setuid 函数族表现与 linux 完全一致,特别是在 set-uid root 获取的超级用户权限时的一些表现,可以明确的一点就是这些异常 case 并不是 Linux 独有的...最后需要补充一点的是,set-uid 标志位对脚本文件不生效,原因其实已经在“解释器文件”一节中有过说明:脚本文件只是解释器的输入,真正被启动的进程是解释器,只有将 set-uid 标志加在解释器上才能有效果...进程异常终止虽然不走 exit,但在内核有与正常终止相同的清理逻辑,估且称之为 sys_exit,它的主要工作是关闭进程所有打开文件、释放使用的存储器 (memory) 等。
$cat /etc/passwd |head -n 5 root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin...在 man 为我们运行任何命令的时候,它会调用 setuid(getuid())) (getuid() 返回的是 real user id).因为我们不是 superuser 进程,这个变化只能改变 effective...= man 的用户UID(不会被改变) 当 filter 做完了的时候, man 会调用 setuid(euid).这里, euid 是 man 用户的UID....(这个ID是通过 man 调用 geteuid 来保存的)这个调用是可以的,因为 setuid 的参数和 saved set-user-ID 是相等的。...实际上,我们描述 man 使用 setuid 函数的方法不是特别正确,因为程序可能会 set-user-ID 为 root .这时候, setuid 会把所有三种uid都变成你设置的id,但是我们只需要设置
/etc/group getent group #基本格式a:b:c:d root:x:0:root,roottest a是组名称;b是组密码占位符;c是组编号;d是组中用户名列表,为空不代表没有用户...,当这个组内只要一个用户,且用户名和组名相同时是可以省略的 #需要注意以下几点: root用户组的组号一定为0,如'root:x:0:' 组号1-499是预留给系统软件和服务的,如安装了MySQL,会自动创建一个...echo "root:wgr1TDs2Mnx0XuAv" | chpasswd WeiyiGeek. chage 命令 描述:chage命令是用来修改帐号和密码的有效期限,密码失效是通过此命令来管理的...Docker容器中建议使用gosu而不是sudo; 2.对于脚本执行有严格权限要求的场景; 项目地址:https://github.com/tianon/gosu 安装说明: #CentOS GOSU_VERSION...有效的securebits是noroot、noroot_locked、no_setuid_fixup、no_setuid_fixup_locked和keep_caps_locked。
下面是脚本的输出: $ sudo ....特别是删除用户时,用户的工作目录是不会一并删除的,为了防止下次执行脚本时报警 (工作目录已存在),这里同时删除用户的工作目录 (line 35-38)。...以我们耳熟能详的 access 函数为例,它使用的是实际用户 ID 与实际组 ID 进行访问权限检查,而不是有效用户 ID 和有效组 ID,也就是说 access 返回失败的文件,进程并不一定就不能访问...uid) 进程有效组 ID:egid (effective gid) 进程附加组 ID:supgid (supplementary gid) 进程保存的设置用户 ID:save setuid 进程保存的设置组...egid 也就是目录 ogid,不也能达到一样的效果吗?
在Linux 2.2引入CAPABILITIES前,使用Raw Socket是需要root权限的(当然不是说引入CAPABILITIES就不需要权限了,而是可以通过其他方法解决,这个后说),所以你如果在一些老的系统里...比如,/bin/ping这个程序的所有者是root,它设置了s位,那么普通用户在运行ping时其Effective UID就是0,等同于拥有了root权限。...touhid ALL = (root) NOPASSWD: /usr/bin/find 不输入密码,可以 sudo 执行 find 命令。 这里引入了一个新的概念Effective UID。...可见,在on为false,且Real UID 不等于Effective UID的情况下,这里重新设置了进程的UID: setuid(uid) setuid函数用于设置当前进程的Effective UID...,如果当前进程是root权限或拥有CAP_SETUID权限,则Real UID和Saved UID将被一起设置。
如果该文件是自己创建的, 无法获取锁, 且错误为Resource temporarily unavailable. 如果该文件是进程创建的, 可以获取到锁....查看可知进程用户是自己: [~/codes]$ id rasak uid=1000(rasak) gid=1000(rasak) 组=1000(rasak),4(adm),24(cdrom),27(sudo...查阅文献得知s是指setuid, T指sticky bit: Real, Effective and Saved UserID in Linux 详细讲了三者的作用. setuid 当执行该文件时,...比如sudo: root@host [~]# ls -l /usr/bin/sudo -rwsr-xr-x 1 root root 136808 Jan 31 13:37 /usr/bin/sudo 它的执行内容需要...root权限, 但它能被所有人执行. setuid是否有权限: If uid is the same as the real UID or the saved set-user-ID of the process
其中之一是 setuid 位(八进制4000)。当应用到一个可执行文件时,它把有效用户 ID从真正的用户(实际运行程序的用户)设置成程序所有者的 ID。这种操作通常会应用到一些由超级用户所拥有的程序。...第二个是 setgid 位(八进制2000),这个相似于 setuid 位,把有效用户组 ID 从真正的用户组 ID 更改为文件所有者的组 ID。...这意味着会加载此用户的 shell 环境,并且工作目录会更改到这个用户的家目录。这通常是我们所需要的。如果不指定用户,那么就假定是超级用户。...如果密码输入正确,出现一个新的 shell 提示符,这表明这个 shell 具有超级用户特权(提示符的末尾字符是”#”而不是”$”),并且当前工作目录是超级用户的家目录(通常是/root)。...到目前为止,我们已经知道了权限这类东西是怎样工作的,现在是时候炫耀一下了。我们将展示一个常见问题的解决方案,这个问题是如何设置一个共享目录。
八进制模式:在这种模式下,权限是用三位八进制数表示的,每位分别代表所有者、群组和其他用户的权限。每位的数值是0-7,分别代表不同的权限组合,如: 0:无权限。 1:执行权限。 2:写权限。...请注意,使用chmod修改文件或目录的权限可能需要超级用户(root)权限,因此有时需要在命令前加上sudo。而且,不恰当的权限设置可能会导致安全问题,因此应谨慎操作。...exit 0 这个进阶脚本演示了特殊权限(sticky bit, setuid, setgid)的设置和查看,以及ACL(访问控制列表)的使用和sudo权限提升。...sudo mkdir /chroot_env sudo chroot /chroot_env # 在新的根环境中安装基础系统 echo "安装基础系统..."...请注意,这个脚本主要是为了展示如何将多个高级概念结合在一个脚本中,而不是为了实际执行。在实际应用中,这样的操作通常会分开进行,并且由不同领域的专家分别负责。
许多发行版都内置了对NTP守护进程的支持,但默认情况下可能未启用。您可能需要安装一个ntpd软件包才能使其正常工作。...有几个不同版本的这个系统调用来适应与进程关联的各种用户ID,您将在7.8.1进程所有权、有效UID、真实UID和保存UID中了解到。...can execute a setuid program as long as it has adequate file permissions.o 以root(用户ID为0)身份运行的进程可以使用setuid...sudo和许多其他setuid程序使用setuid()系统调用明确地更改有效和真实用户ID。...此外,即使是设置了setuid root权限的特定目的程序,如果存在漏洞,也可能构成危险。利用以root身份运行的程序中的弱点是系统入侵的主要方法,而此类漏洞利用的数量多得无法计数。
sudo -u 也可以通过指定 UID 的方式来代替用户,当指定的 UID 为 -1 或 4294967295(-1 的补码,其实内部是按无符号整数处理的) 时,因此可以触发漏洞,绕过上面的限制并以 root...身份执行命令: [test_sudo@localhost ~]$ sudo -u#-1 id uid=0(root) gid=1004(test_sudo) 组=1004(test_sudo) 环境=...uid=0(root) gid=1004(test_sudo) 组=1004(test_sudo) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0....> #include int main() { setresuid(-1, -1, -1); setuid(0); printf("EUID: %d, UID: %d...调用了 prepare_cred,可看到默认 EUID 是为 0的
sudo -u 也可以通过指定 UID 的方式来代替用户,当指定的 UID 为 -1 或 4294967295(-1 的补码,其实内部是按无符号整数处理的) 时,因此可以触发漏洞,绕过上面的限制并以 root...身份执行命令: [test_sudo@localhost ~]$ sudo -u#-1 id uid=0(root) gid=1004(test_sudo) 组=1004(test_sudo) 环境=...uid=0(root) gid=1004(test_sudo) 组=1004(test_sudo) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0....> #include int main() { setresuid(-1, -1, -1); setuid(0); printf("EUID: %d, UID: %d\.../a.out EUID: 0, UID: 0 可见,运行后,当前身份变成了 root。
内核漏洞 以root身份运行的程序 已安装的软件 弱密码/重用密码/纯文本密码 内部服务 Suid配置错误 滥用sudo权利 由root调用的可写脚本 路径配置错误 Cronjobs 卸载的文件系统 0x002...是64位吗?...1.诱使内核在内核模式下运行我们的有效负载 2.处理内核数据,例如进程特权3.以新特权启动shell root!...这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性。sudo不是对shell的一个代替,它是面向每个命令的。...由于“ 0”是root用户的UID,因此添加UID为“ 0”的用户将为该用户提供root特权。
Setuid权限:通过Setuid权限,普通用户可以在执行某些特定程序时,拥有与程序所有者相同的权限。也就是说,该程序在执行时,会自动获取其所有者的权限,而不是执行者的权限。...这通常用于一些需要root权限才能执行的程序。 Setgid权限:通过Setgid权限,执行者可以在执行某个程序时,获得该程序所属组的权限,而不是执行者所在的组的权限。...# 设置Setuid权限,以便普通用户执行该程序时可以获得与root用户相同的权限 chmod u+s /usr/bin/passctl 这时候,该程序将以root用户的身份运行,并获得与root用户相同的权限了.../usr/bin/passctl 注意,在实际工作中设置Setuid权限时,需要确保所设置的程序是安全的,避免潜安全风险。...[root@workhost ~]# usermod -g webappgroup tantianran [root@workhost ~]# id tantianran uid=1000(tantianran
领取专属 10元无门槛券
手把手带您无忧上云