用户、组、权限

一、用户和组

1、用户(UID):

1>是对现实的一种抽象, 系统中所有用户都存储在/etc/passwd

2>分类

    管理员[0]

    系统用户 [1-499]: 专门用于运行服务的用户,不需要登录系统

    一般用户 [500-60000]: 可以登录系统获取资源

3>常用命令:useradd,userdel,usermod,passwd, chsh, chfn, finger,id,chage

 

2、组(GID):

1>是一类用户的集合, 系统中所有组都存储在/etc/group,一个用户可以属于多个组,一个组中也可以包含多个用户(m:n)

2>用户组类别

    私有组:创建用户时,如果没有为其指定所属的组,系统会自动为其创建一个与用户名同名的组;

    基本组:用户的默认组

    附加组:默认组以外的其他组

3>常用命令: groupadd,groupdel,groupmod, gpasswd

  

二、linux系统中的权限表示(ls、chmod)

1、其中根据所有者、所属组和其它分为三组权限,每组详解如下:

    第一位:r(read),可读取

    第二位:w(write),可写入

    第三位: 

        x(execute),可执行

        s(setid),[本身没有执行权限,则显示为S]运行某程序时,相应进程的属主是程序文件自身的属主(组),而不是调用者

        t(sticky),常用于设置目录,在该目录中每个人都可以创建文件,删除自己的文件,但不能删除别人创建的文件;

        注:st对应特殊权限位[即0220中的第一个八进程位]

2、rwx权限针对文件和目录的区别如下:

 

文件

目录

Read

可以使用类似cat等命令查看文件内容

可以对此目录执行ls以列出内部的所有文件

Write

可以编辑或者删除此文件

可以在此目录创建文件

eXecute

可以在命令提示符下当做命令提交给内核运行

[默认有可执行权限]可以使用cd切换此目录,也可以使用ls -l查看内部文件的详细信息

3、常用命令:chown, chgrp, chmod,umask.


三、用户、进程、文件和权限

在Unix进程中涉及多种用户ID和用户组ID。用户ID是个整型数,为了说明方便一般直接使用用户名来代表不同的UID。

[ unix类系统中一般有两种标识,一种是对用户友好的标识,一般是以字符串的形式表示;另一种是对机器友好的标识,一般以整数的形式表示,两者有一定的对应关系。] 

ID种类

作用

RUID(实际用户ID)

用于在系统中标识一个用户是谁,当用户使用用户名和密码成功登录后一个UNIX系统后就唯一确定了他的RUID

EUID(有效用户ID)

用于系统决定用户对系统资源的访问权限,通常情况下等于RUID

SUID(设置用户ID)

用于对外权限的开放。跟RUID及EUID是用一个用户绑定不同,它是跟文件而不是跟用户绑定


下面就拿passwd这个程序来分析,linux系统的密码都存在了/etc/shadow这个文件里。

查看/etc/shadow文件的属性如下:


    从上可以看出/etc/shadow文件是一个属于root用户及shadow组的文件,并且只有EUID为root的用户具有读的权限(注意此处用的是EUID,不是其它的ID)

当你在steve用户(EUID此时也为steve)的shell下试图用vim打开这个文件时会提示权限不允许。至于连root用户也只有读的权限我猜是为了不鼓励root用户

使用vim类的编辑器去直接修改它,而要采用passwd命令来修改这个文件。用过UNIX系统的人都知道,任何一个用户都可以使用passwd这个命令来得新设定

自己的密码。

    但从上面已经知道,非root用记是无法读这个文件的,那么普通用户是如何做到修改这个文件的呢?我们知道passwd这个命令实际执行的程序是/usr/bin/passwd, 

查看这个文件属性如下:


    对应文件存取标志的s位就是通常说的SUID位,另外可以看到所有用户都有执行的这个程序权力。当steve用户执行passwd命令的时候,Shell会fork出一个子进程,

此时进程的EUID还是steve,然后exec程序/usr/bin/passwd。exec会根据/usr/bin/passwd的SUID位会把进程的EUID设成root,   此时这个进程都获得了root权限, 

得到了读写/etc/shadow文件的权限, 从而steve用户可完成密码的修改。 exec退出后会恢复steve用户的EUID为steve.这样就不会使steve用户一直拥有root权限。

我们可以测试一下,用root用户把/usr/bin/passwd的SUID位去掉,然后steve用户用命令passwd去更新密码会提示如下错误: 

passwd: Authenticationtoken manipulation error。 

这就是因为/usr/bin/passwd程序的SUID去掉后,steve用户虽然可以执行该程序,但因为/usr/bin/passwd/的SUID没有设置,这样exec后进程的EUID仍为steve的原因。

 

四、理清linux中各种用户ID关系

       看到上面文件根据用户划分权限,用户又分真实用户,有效用户,对于我这种头脑简单的人来说早以摸不到头脑了~下面就来一起疏理下吧。

       Unix中一切皆文件,文件根据权限位判定用户是否具有读取和执行权限。用户读取文件的时候需要借助程序(不借助程序再NB的你也没办法读吧???),

程序代表用户来读取文件,即:用户A —> 进程(代理A) —> 文件由于这个比较复杂,我们先分两步分析,最后总结在一起。

为了更清楚的说明这个过程,引用一张大神lvyilong316的一幅图片,谢谢:)


###当进程代表用户A打开文件进行读取时,内核会进行如下权限测试:

0. 若进程的有效用户ID是0(超级用户),则允许访问。

1. 若进程的有效用户ID等于文件的所有者ID,那么进行文件所有者访问权限的测试(与open的参数对比),对应图中的1。

2. 若进程的有效组ID或进程的附加组ID之一等于文件的组ID,则进行文件所属组的权限测试,对应图中的2.

3. 测试文件的Other访问权限。

注:如果第1步中进程有效用户ID等于文件所有者ID,但相应权限的测试不符合,则不会进入第2步的组测试。对于2,3步也同理。

 流程图如下:


    

可以看出来上面只是“进程(代理A) —> 文件”这一部分,现在再来看“用户A —> 进程(代理A)”这一部分:


###用户执行进程的过程:

1、  每个用户登录后都对应一个uid,一个gid,一组附加组id;

2、  每个程序文件和普通文件一样拥有文件所有者id,文件所有组id,并具有相应rwx权限;

3、 用户打开文件时进行流程图描述流程的x权限测试(只不过此时不是有效ID而是用户ID);

4、  当a.用户是超级用户或b.用户id和文件所有者id相同且文件所有者具有x权限或c.用户的gid和文件的所属组id相同且文件所属组具有x权限或d.文件的other具有x权限,则用户可执行此程序,产生进程(上图绿色部分);

5、 用户的uid变成进程的实际用户id,用户的gid变成进程的实际组id,用户的附加组id变成进程的附加组id;

6、 当程序文件没有设置设置用户id位(SUID)时进程的有效用户id等于进程的实际用户id;

7、 当程序文件设置了设置用户id位(SUID时,进程的有效用户id保存到进程保存的设置用户id”,之后进程的有效用户id变为程序文件的所有者id;

 

    将两部分结合起来可以直接使用大神lvyilong316的一幅图片,再次向大神致敬:)



五、sudo简介

 1、系统安全的一个重要的原则就是权限越小越好,root密码知道的人越少越好。有些情况下必须使用root权限,但是又不想让别人知道root密码,该怎么办呢? 

–>sudo来帮你:)Sudo是Unix/Linux平台上的一个非常有用的工具,它允许系统管理员分配给普通用户一些合理的“权利”,让他们执行一些只有超级用户或

其他特许用户才能完成的任务。sudo有以下特点:

    1> sudo能够限制指定用户在指定主机上运行某些命令;

    2>sudo可以提供日志,忠实地记录每个用户使用sudo做了些什么,并且能将日志传到中心主机或者日志服务器;

    3>sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机,它默认的存放位置是/etc/sudoers;

    4>sudo使用时间戳文件来完成类似“检票”的系统。当用户执行sudo并且输入密码后,用户获得了一张默认存活期为5分钟的“入场券”(默认值可以在编译的时候改变)。超时以后,用户必须重新输入密码;

    5>给用户尽可能少的权限但仍允许完成他们的工作;

2、sudo命令

    sudo程序本身就是一个设置了SUID位的二进制文件。它的所有者是root,所以每个用户都可以像root那样执行该程序。设置了SUID的程序在运行时

可以给使用者以所有者的EUID。这也是为什么设置了SUID的程序必须小心编写。但是设置一个命令文件的SUID和用sudo来运行它是不同的概念,它们起着不同的作用。

sudo的配置都记录在/etc/sudoers文件中,我们下面将会详细说明。配置文件指明哪些用户可以执行哪些命令。要使用sudo,用户 必须提供一个指定用户名和密码。

注意:sudo需要的不是目标用户的密码,而是执行sudo的用户的密码。如果不在sudoers中的用户通过sudo执 行命令,sudo会向管理员报告这一事件。用户可以

通过sudo -v来查看自己是否是在sudoers 之中。如果是,它还可以更新你的“入场券”上的时间;如果不是,它会提示你,但不会通知管理员。


常用的选项:

    –l,列出当前用户可以执行的命令。只有在sudoers里的用户才能使用该选项。

    -u username,以指定用户的身份执行命令。后面的用户是除root以外的,可以是用户名,也可以是uid。

    -k,清除“入场卷”上的时间,下次再使用sudo时要再输入密码。

配置文件:

    配置sudo必须通过编辑/etc/sudoers文件,而且只有超级用户才可以修改它,还必须使用visudo编辑。之所以使用visudo有两个原因:一是它能够防止两个用户同时修改它;

二是它也能进行有限的语法检查。所以,即使只有你一个超级用户,你也最好用visudo来检查一下语法。

foobarALL=(ALL)ALL    /*像root一样拥有至高权限*/

foobarlocalhost=/sbin/ifconfig,/bin/ls   /*只能像root那样使用ls和ifconfig*/

ALL:指网络中的主机。我们后面把它改成了主机名,它指明foobar可以在此主机上执行后面的命令。

ALL:指目标用户。是以谁的身份去执行命令。

ALL:是指命令名。

例如,我们想让foobar用户在linux主机上以jimmy或rene的身份执行kill命令,这样编写配置文件:foobarlinux=(jimmy,rene)/bin/kill

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值