linux 给用户root权限?linux获得root权限
linux如何赋予用户sudo权限
"linux如何赋予用户sudo权限"这个问题其实问的并不准确,因为根本没有"sudo"这个权限,这个问题应该说成“Linux系统的sudo命令如何让非特权的普通用户具有了执行特权操作的权限?”下面我就来解释一下这个问题。
sudo能够赋予普通用户特权的根本原因,是一个叫set-user-ID的权限位及其所对应的运行机制带来的:"---s--x--x"中的"s"。
其实系统中还有很多带这个S位的程序,比如:
我们管这个位叫set-user-ID位,简称suid位。同样的,还有一个set-group-ID位,简称sgid位,当然suid位比较常见。
suid位一般给一个可执行程序设置,其主要作用就是“让运行带有suid位程序的进程的有效用户ID(euid)等于这个程序文件的属主ID”。这样说可能对于不了解的人有点难懂,下面我们详细说一下。
比如如果有一个文件它的属性如下:
那么比如我用userB执行这个程序,那么运行起来的进程的euid等于userA,而不等于userB。
那这有什么用呢?如果上面的userA是一个普通用户,那用处不太大,就是改变了进程的euid(还是有作用的)。但是如果上面的userA是root,那作用就很大了,因为如果一个进程的euid变成了root(0),那这个进程就获得了root的特权,因为它相当于在代替root做事(当然不是完全等同于root亲自执行,但是几乎等同了)。所以你看到sudo的属主就是root,我们习惯性管属主是root的suid位叫“suid root”位,你和行内的人一提suid root,他就能知道你在说什么。
设置SUID位
相信很多初学Linux的人都很熟悉0777这个权限,也就是rwxrwxrwx,分别表示属主、属组和其它人的读写执行权限。也经常能看到有人说给Linux系统所有文件都改成0777,是不是就无敌了。对于这样天真的孩子我只能说你将系统安全机制想的太简单了,这还只是冰山一角而已。
即使光讨论permission bits,也不止0777这么多,777上面还有更多呢。比如我们这里提到的set-user-id位就是其中一个,其定义是:
你要设置这个位,就可以写04777或者04111等。比如有一个文件的权限是0644:
那么我要给它加S位,就可以写:
我们看到这里有一个大"S",这就是set-user-id位。有人可能问了,这个S不就占了"x"的位置了吗?如果再设置上x的权限,比如04744,那会怎么样呢?答案是:
是的,S+x就变成了小"s",这个小s就是我们这个回答的重点,也就是具有执行权的程序同时具有suid位。
设置suid位的方法除了你直接写04xxx以外,用u+s这种方式也可以,比如:
这样可以方便的增加或去掉suid位。当然有set-user-id位,也有set-group-id位,不过sgid位和sudo没有关系,我们本回答不讲。
用程序说话
为了更直观的理解,我们用一个程序来说明一下suid位的作用。假设我现在的系统上有一个id是1000的用户叫test,还有一个id是1001的用户叫userA,当然还有id是0的root用户,我用test用户作为测试用户,编写并执行下面的程序(mytest.c):
这个程序编译后得到的可执行程序现在的属性是:
我用uid是1000的用户test来执行它:
接下来我们(用root用户操作)改变这个文件的属主:
再用id为1000的test用户执行:
结果进程的uid和euid还是1000(test)。
现在我(用root用户操作)给这个程序设置suid位:
再用test用户用执行:
这次我们看到进程的euid变成了1001,不再是1000了,这个1001就是userA的ID:
这就是suid位的作用,但是在程序文件的属主是普通用户的情况下,除了能获得属主相同的euid外,没有别的影响。
因为现代Linux系统已经区别于过去的Unix系统,分出了各种细节的权能(具体可man capabilities),为了能看一下当前程序的特权,我修改了一下程序,将特权信息打出来:
编译后重新将suid位设置好,属主改为userA(跟上面一样),再用test用户执行:
我们看到euid变成了1001,最后一行那个"="的意思你可以简单理解为"All=nothing",也就是什么特权都没有。这里我不想展开解释capabilities的东西,展开的话又够另一个篇章了。
现在我们将mytest的属主变成root,然后还用test用户执行:
这次我们看到进程的uid还维持是test用户的id=1000,但是euid变成了0,而且当前的特权是"=ep",也就是"ALL=ep",“ep”分别表示Effective特权集和Permitted特权集,也就是这两个特权集都是满的,这里我不展开解释Permitted, Effective和Inheritable特权集合的概念了,总之这里你可以理解为当前进程具有全部的特权。
这就是suid root的作用,让一个程序即使被普通用户执行,也可以越权。sudo程序就是借助suid root这个特性获得的特权,让普通用户可以执行特权操作。
结语:
这里说的一些概念只是Linux安全相关的冰山一角,感兴趣的可以自己去学习更多。上面之所以euid是0的进程直接就具有了全部特权,那是从古老的Unix系统至今的一种使用习惯的继承,现在的Linux系统其实可以配置成将root超级用户的特权分开分给几个具有不同用途的管理员,而取消root的使用,我们也做过这样的课题和研究,也确实能做到分权,但是目前对于普通的使用者来说将系统配成那样过于不便,所以目前的系统状态仍然是主流。但是将来系统去root化是一个研究方向和发展趋势。
关于sudo我还写过下面一个回答,感兴趣的可以看一下,并不属于技术问题。
如何在linux中 用root用户给其他用户权限
、添加用户,首先用adduser命令添加一个普通用户,命令如下:#adduser tommy//添加一个名为tommy的用户#passwd tommy//修改密码 Changing password for user tommy. New UNIX password://在这里输入新密码 Retype new UNIX password://再次输入新密码 passwd: all authentication tokens updated successfully. 2、赋予root权限方法一:修改/etc/sudoers文件,找到下面一行,把前面的注释(#)去掉## Allows people in group wheel to run all commands%wheel ALL=(ALL) ALL然后修改用户,使其属于root组(wheel),命令如下:#usermod-g root tommy修改完毕,现在可以用tommy帐号登录,然后用命令 su-,即可获得root权限进行操作
linux用户赋权限命令chmodlinux用户赋权限
linux权限设置?
操作步骤/方法
1.进入linux系统,按目录依次进入需要设置权限的文件。主要命令:cd(切换目录)ls(查看文件)
2.设置文件权限前,先查看文件权限。命令:ls-lxxx.xxx
3.我们可以看到文件的具体权限,分别用r,w,x,-表示对应权限。
4.每一个权限对应一个相对的组织,比如所有者,组,其他用户
5.接下来我们改变文件权限,在linux可读r可用4表示,可写W可用2表示,X用1,那么文件的最高权限等于4+2+1=7,两两或者三个组合即可赋予文件具体权限,命令:chmod664XXX.XXX
6.赋予完成我们可利用命令再次查看文件权限,数值是否跟我们设定的一致。
在linux中怎么给文件夹赋权限?
可以使用chmod-R权限值目录或文件例如:改变testdir及其目录下所有的文件和目录的权限为750#chmod-R750testdir#manchmod可以得到:OPTIONS-R,--recursivechangefilesanddirectoriesrecursively意思是:chmod命令有个选项-R可以通过“递归”的方式改变文件和目录的权限。
linux下怎么给软件赋读写权限?
chmoda+w为所有用户赋写权限chmoda+r为所有用户赋读权限
linux赋予权限命令?
很高兴本问题!此观点仅供参考,如有纰漏,请尽情斧正!
chgrp命令,用于修改文件和目录的所属组;
chown命令,用于修改文件和目录的所有者和所属组;
chmod命令,可以修改文件或目录的权限;
umask命令,可以令新建文件和目录拥有默认权限。
linux怎么创建root用户?
linux创建root用户步骤如下:
1、添加用户:adduserphroot
2、设置密码:passwdphroot
3、输入密码:!#%12122121
4、加入用户组:usermod-a-Gwheelphroot
5、为sudoers赋编辑权限:chmod-vu+w/etc/sudoers
6、编辑vi/etc/sudoers
7、ROOT下方加入:phrootALL=(ALL)ALL
8、撤销sudoers编辑权限:chmod-vu+w/etc/sudoers