linux 给用户分组?linux系统给用户赋权

大家好,今天来为大家分享linux 给用户分组的一些知识点,和linux系统给用户赋权的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!

linux下账户的权限是:drwx--- 表示是那些权限

首先d表示这个文件是一个文件夹,然后文件的权限一共有9个字符表示,分成三组,分别表示文件所属用户的权限,文件所属用户组的权限,其他人的权限,r表示读权限, w表示写权限, x表示执行权限,你给的这个例子就是说这是个文件夹,并且此文件所属用户拥有读、写、执行三项权限,其余的用户组,其他用户不拥有任何权限(全部都是-)

SVN如何限制某位用户提交代码的权限

服务器端配置权限文件可以控制所有用户的读写权限。

转自:

/***********************************************************/

//SVNSubversion用户权限管理

//资料来源:网络、总结

//2010年7月20日

/***********************************************************/

基本的操作:

以我创建的Svn工程为例子来讲解SVN权限管理的配置

仓库创建路径:D:\SVNLibrary

>>>取消匿名登陆:

打开文件D:\SVNLibrary\conf\svnserve.conf

找到:###anon-access= read

将前面的注释去掉,并将read改为:none

即使:anoe-access=none表示匿名登陆下的用户权限为空。即:系统不支持匿名登陆

说明:

auth-access= write#通过验证的用户可以读和写

auno-access= read#匿名登陆下可以只读文件,即:文件修改后无法提交到服务器

password-db=password#用户保存文件的名称

authz-db=authz#权限管理文件这个是非常重要的,如果我们要对整个工程的文件进行权限分配的时候,就必须将这个行文件前面注释掉,否咋即使我们在权限配置文件里面进行再多的配置都是无效的。这点我已经犯错了。

然后我们在authz文件下面进行权限的分配

在权限分配的时候要注意的问题:

>>>对某个用户,如果只赋给他某个目录的权限,但对上级目录没有赋给,则他不能有上级目录的任何权限

例如某个用户有:/repository/project1的r权,而没有/repository的r权

>>>对于所有的目录,都优先处理设置在这个目录上的权限设置。

例如sai用户:

[/repository]

sai= rw

对于repository目录,他有rw的权限。

[/repository/project1]

sai= r

对于repository下的project1目录,他只有r权限。

则,这个saiy用户只有project1的r权。而repository下其他目录有rw权。

>>>权限分配,只可以分配到某个目录,而不能到某个文件

>>>如果某个目录上没有对某个用户设置权限,则一直向上级目录查找,看是否有权限

例如sai用户

[/repository]

sai=rw

[/repository/project1]

saiya=rw

则sai用户一样拥有/repository/project1的读写权限

>>>分配权限时,=的左边为用户,不能想当然的以,号分开加入多个用户

>>>如果想设置某用户都没有rw的权限,只要=号的右边这空即可

User1=

>>>如果某一个文件夹,对于人任何用户都没有权限

*=

其中*代表所有的人

SVN深入的部分

本章将详细介绍前一章所涉及的两个配置文件, svnserve.conf和 authz.conf,通过对配置逐行的描述,来阐明其中的一些细节含义。

里首先要注意一点,任何配置文件的有效配置行,都不允许存在前置空格,否则程序会无法识别。也就是说,如果你直接从本文的纯文本格式中拷贝了相关的配置行

过去,需要手动将前置的4个空格全部删除。当然了,如果你觉得一下子要删除好多行的同样数目的前置空格是一件苦差使,那么也许 UltraEdit

的“Column Mode”编辑模式,可以给你很大帮助呢。

1 svnserve.conf

arm\conf\svnserve.conf文件,是 svnserve.exe这个服务器进程的配置文件,我们逐行解释如下。

首先,我们告诉 svnserve.exe,用户名与密码放在 passwd.conf文件下。当然,你可以改成任意的有效文件名,比如默认的就是 passwd:

password-db= passwd.conf

下来这两行的意思,是说只允许经过验证的用户,方可访问代码库。那么哪些是“经过验证的”用户呢?噢,当然,就是前面说那些在

passwd.conf文件里面持有用户名密码的家伙。这两行的等号后面,目前只允许 read write none

三种值,你如果想实现一些特殊的值,比如说“read-once”之类的,建议你自己动手改源代码,反正它也是自由软件:

anon-access= none

auth-access= write

接下来就是最关键的一句呢,它告诉 svnserve.exe,项目目录访问权限的相关配置是放在 authz.conf文件里:

authz-db= authz.conf

然,svn 1.3.2引入本功能的时候,系统默认使用 authz而不是 authz.conf

作为配置文件。不过由于鄙人是处女座的,有着强烈的完美主义情结,看着 svnserve.conf有后缀而 passwd和 authz

没有就是不爽,硬是要改了。

2 authz.conf之用户分组

arm\conf\authz.conf文件的配置段,可以分为两类,``[group]``是一类,里面放置着所有用户分组信息。其余以 [arm:/]开头的是另外一类,每一段就是对应着项目的一个目录,其目录相关权限,就在此段内设置。

首先,我们将人员分组管理,以便以后由于人员变动而需要重新设置权限时候,尽量少改动东西。我们一共设置了5个用户分组,分组名称统一采用 g_前缀,以方便识别。当然了,分组成员之间采用逗号隔开:

[groups]

#任何想要查看所有文档的非本部门人士

g_vip= morson

#经理

g_manager= michael

#北京办人员

g_beijing= scofield

#上海办人员

g_shanghai= lincon

#总部一般员工

g_headquarters= rory, linda

#小秘,撰写文档

g_docs= linda

意到没有, linda这个帐号同时存在“总部”和“文档员”两个分组里面,这可不是我老眼昏花写错了,是因为 svnserve.exe

允许我这样设置。它意味着,这个家伙所拥有的权限,将会比他的同事 rory要多一些,这样的确很方便。具体多了哪些呢?请往下看!

3 authz.conf之项目根目录

接着,我们对项目根目录做了限制,该目录只允许arm事业部的经理才能修改,其他人都只能眼巴巴的看着:

[arm:/]

@g_manager= rw

*= r

[arm:/]表示这个目录结构的相对根节点,或者说是 arm项目的根目录

这里的@表示接下来的是一个组名,不是用户名。你当然也可以将@g_manager=rw这一行替换成 michael=rw,而表达的意义完全一样。

*表示“除了上面提到的那些人之外的其余所有人”,也就是“除了部门经理外的其他所有人”,当然也包括总经理那个怪老头

*= r则表示“那些人只能读,不能写”

4 authz.conf之项目子目录

然后,我们要给总部人员开放日志目录的读写权限:

[arm:/diary/headquarters]

@g_manager= rw

@g_headquarters= rw

@g_vip= r

*=

敢打赌,设计svn的家伙们,大部分都是在 unix/linux平台下工作,所以他们总喜欢使用/来标识子目录,而完全忽视在 MS

Windows下是用\来做同样的事情。所以这儿,为了表示 arm\diary\headquarters这个目录,我们必须使用

[arm:/diary/headquarters]这样的格式。

这里最后一行的*=表示,除了经理、总部人员、特别人士之外,任何人都被禁止访问本目录。这一行是否可以省略呢?

之所以这儿需要将@g_vip=r一句加上,就是因为存在上述这个解释。如果说你没有明确地给总经理授予读的权力,则他会和其他人一样,被*给排除在外。

如果众位看官中间,有谁玩过防火墙配置的话,可能会感觉上述的配置很熟悉。不过这里有一点与防火墙配置不一样,那就是各个配置行之间,没有先后顺序一说。也就是说,如果我将本段配置的*=这一行挪到最前面,完全不影响整个配置的最终效果。

请注意这儿,我们并没有给 arm\diary目录设置权限,就直接跳到其子目录下进行设置了。我当然是故意这样的,因为我想在这儿引入“继承”的概念。

权限具备继承性任何子目录,均可继承其父目录的所有权限,除非它自己被明确设置了其他的权限。也就是说,在 arm目录设置权限后, arm\diary目录没有进行设置,就意味着它的权限与 arm目录一样,都是只有经理才有权读写,其他人只能干瞪眼。

【*=是否可以省略】【用例子引入覆盖】【单用户权限的继承问题】【父目录权限集成与全面覆盖问题】

现在来看看

好了,我们现在掌握了“继承”的威力,它让我们节省了不少敲键盘的时间。可是现在又有一个问题了,

属性具备覆盖性质子目录若设置了属性,则完全覆盖父目录。

5 authz.conf的其他注意点

父目录的 r权限,对子目录 w权限的影响

这个问题专门提出来,是因为在1.3.1及其以前的版本里面,有个bug,即为了子目录的写权限,项目首目录必须具备读权限。因此现在使用了1.3.2版

本,就方便了那些想在一个代码库存放多个相互独立的项目的管理员,来分配权限了。比如说央舜公司建立一个大的代码库用于存放所有员工日志,叫做

diary,而arm事业部只是其中一个部门,则可以这样做:

[diary:/]

@g_chief_manager= rw

[diary:/arm]

@g_arm_manager= rw

@g_arm= r

样,对于所有arm事业部的人员来说,就可以将 svn://192.168.0.1/diary/arm

这个URL当作根目录来进行日常操作,而完全不管它其实只是一个子目录,并且当有少数好奇心比较强的人想试着 checkout一下

svn://192.168.0.1/diary的时候,马上就会得到一个警告“Access deni”,哇,太酷了。

默认权限

如果说我对某个目录不设置任何权限,会怎样?马上动手做个试验,将:

[diary:/]

@g_chief_manager= rw

改成:

[diary:/]

#@g_chief_manager= rw

这样就相当于什么都没有设置。在我的 svn 1.3.2版本上,此时是禁止任何访问。也就是说,如果你想要让某人访问某目录,你一定要显式指明这一点。这个策略,看起来与防火墙的策略是一致的。

只读权限带来的一个小副作用

若设置了:

[arm:/diary]

*= r

则svnserve认为,任何人,都不允许改动diary目录,包括删除和改名,和新增。

也就是说,如果你在项目初期创建目录时候,一不小心写错目录名称,比如因拼写错误写成 dairy,以后除非你改动 authz.conf里面的这行设置,否则无法利用 svn mv命令将错误的目录更正。

改进

1对中文目录的支持

午上班的时候,Morson来到 Michael

的桌子前面,说道:“你是否可以将我们的北京办、上海办目录,改成用中文的,看着那些拼音我觉得很难受?” Michael

心想,还好这两天刚了解了一些与 unicode编码相关的知识,于是微笑地回答:“当然可以,你明天下午就可以看到中文目录名称了。”

使用 svn mv指令,将原来的一些目录改名并 commit入代码库,改名后的目录结构如下:

arm

├─工作日志

│├─总部人员

│├─北京办

│└─上海办

├─公司公共文件参考目录

└─临时文件存放处

修改代码库的 authz.conf文件,将相应目录逐一改名

使用 UltraEdit将 authz.conf文件转换成不带 BOM的 UTF-8格式

配置文件转换成 UTF-8格式之后,Subversion就能够正确识别中文字符了。但是这里需要注意一点,即必须保证 UTF-8文件不包含

BOM。BOM是 Byte Order Mark的缩写,指 UNICODE文件头部用于指明高低字节排列顺序的几个字符,通常是 FFFE

,而将之用 UTF-8编码之后,就是 EFBBBF。由于 UTF-8文件本身不存在字节序问题,所以对 UTF-16

等编码方式有重大意义的 BOM,对于 UTF-8来说,只有一个作用——表明这个文件是 UTF-8格式。由于 BOM

会给文本处理带来很多难题,所以现在很多软件都要求使用不带 BOM的 UTF-8文件,特别是一些处理文本的软件,如 PHP、 UNIX

脚本文件等,svn也是如此。

目前常用的一些文本编辑工具中,MS Windows自带的“记事本”里面,“另存为”菜单保存出来的

UTF-8格式文件,会自动带上 BOM。新版本 UltraEdit提供了选项,允许用户选择是否需要 BOM,而老版本的不会添加

BOM。请各位查看一下自己常用的编辑器的说明文件,看看它是否支持这个功能。

利用 UltraEdit,我们可以将 BOM去掉。方法是,首先利用“UTF-8 TO ASCII”菜单将文件转换成本地编码,通常是GB2312码,然后再使用“ASCII TO UTF-8(UNICODE Editing)”来转换到 UTF-8即可。

linux系统组成部分linux系统组

如何在linux上用命令实现用户和组的管理?

Linux上用命令实现本地用户和组的管理

本地用户和组:管理文件和进程等等

本地用户和组:

1)root:超级管理员系统创建的第一个账户

特点:

id为:0

家目录:/root

具有系统的完全控制权:小心使用。

#id

uid=0(root)gid=0(root)groups=0(root)context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

#

2)普通用户:不具有管理员权限

特点:

id范围:

1000=id=60000

家目录:/home/用户名

#idstudent

uid=1000(student)gid=1000(student)groups=1000(student),10(wheel)

#

3)服务用户:为服务提供权限

特点:

id范围:

0id1000

家目录:应用程序服务目录

#idapache

uid=48(apache)gid=48(apache)groups=48(apache)

#

如果是yum,rpm安装的软件:由rpm包中的脚本创建服务账户

Includeconf.modules.d/*.conf

#

#Ifyouwishhttpdtorunasadifferentuserorgroup,youmustrun

#httpdasrootinitiallyanditwillswitch.

#

#User/Group:Thename(or#number)oftheuser/grouptorunhttpdas.

#Itisusuallygoodpracticetocreateadedicateduserandgroupfor

#runninghttpd,aswithmostsystemservices.

#

Userapache

Groupapache

#'Main'serverconfiguration

#

本地组:

1)主组:一个用户一定要属于某个主组中。当些用户在创建文件时,给文件的归属组

2)从属组:用户容器,组织和管理用户权限管控

作用:

文件:

进程:

$ps-ux

USERPID%CPU%MEMVSZRSSTTYSTATSTARTTIMECOMMAND

student321780.00.4930529360?Ss15:000:00/usr/lib/system

student321820.00.32537767072?S15:000:00(sd-pam)

student321880.00.21594124980?S15:000:00sshd:student@p

student321890.00.22339124864pts/0Ss15:000:00-bash

student322930.30.21594085192?D15:430:00sshd:student@p

student322940.30.22339124924pts/1Ss15:430:00-bash

student323190.50.22339404804pts/1S15:430:00/bin/bash

student323410.00.22693123876pts/1R+15:430:00ps-ux

$

账户文件:

1)/etc/passwd:保存用户信息

#cat/etc/passwd|grepstudent

student:x:1000:1000:StudentUser:/home/student:/bin/bash

用户名密码uid主组ID描述家目录登录shell

#

#cat/etc/passwd|grep-wroot:x

root:x:0:0:root:/root:/bin/bash

#

#cat/etc/passwd|grepapache

apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin

服务账号无法登录系统

#

2./etc/shadow:保存用户密码的HASH,密码的有效性信息,密码修改时间,账户有效期。

#

#ls-l/etc/shadow

----------.1rootroot1014Mar2911:39/etc/shadow

#

#

#cat/etc/shadow|grepstudent

student:$6$8oIjLCsc$/n1iQXYh1E6.uOEuJKgioqAtmqm2TQmkJGF2RwyteIr1tIfrPdiRYgWe6Sjen5/eMij2uHM/a1tue/QRlo3X80:18038:0:99999:7:::

#

密码的HASH:sha512

8oIjLCsc$/n1iQXYh1E6.uOEuJKgioqAtmqm2TQmkJGF2RwyteIr1tIfrPdiRYgWe6Sjen5/eMij2uHM/a1tue/QRlo3X80

18038:天数密码最后一次修改的时间从1970-01-01+18038天之后那一天

0:密码最少使用天数0没有限制用户随时可以改密码

99999:天数,密码最大修改时间永久200多年

7:warning警告时间,当密码快到最后修改时间前7天,通知用户修改。

::天数失效时间inactive用户密码过了最后修改时间,未改变密码,再过多少天,账户将被锁定

::账户有效期

创建用户和组:

创建时,没有密码:

#useraddzhangsan

#useraddlisi

#idzhangsan

uid=1001(zhangsan)gid=1001(zhangsan)groups=1001(zhangsan)

#idlisi

uid=1002(lisi)gid=1002(lisi)groups=1002(lisi)

#

无法登录:与PAM有关

$

$su-zhangsan

Password:

Password:

su:Authenticationfailure

$

设置密码:

#

#cat/etc/passwd|grepzhangsan

zhangsan:x:1001:1001::/home/zhangsan:/bin/bash

#cat/etc/shadow|grepzhangsan

zhangsan:!!:18350:0:99999:7:::#!!未设置密码

#

#passwdzhangsan

Changingpasswordforuserzhangsan.

Newpassword:

BADPASSWORD:Thepasswordisshorterthan8characters

Retypenewpassword:

passwd:allauthenticationtokensupdatedsuccessfully.

#

#

#cat/etc/shadow|grepzhangsan

zhangsan:$6$3wxuXomVbQ58wQcK$oQW6injgldxa2N/Pt4tCPDVRqWRVGw.UNZdxE4R0nhEt8K/3UDKzxap6ReIReEvDpG.GdwjpMiiDh7.f6DJNQ0:18350:0:99999:7:::

#

chage可以查看用户密码属性

#chage-lzhangsan

Lastpasswordchange:Mar29,2020

Passwordexpires:never

Passwordinactive:never

Accountexpires:never

Minimumnumberofdaysbetweenpasswordchange:0

Maximumnumberofdaysbetweenpasswordchange:99999

Numberofdaysofwarningbeforepasswordexpires:7

#

创建组:从属组

#

#groupaddit

#

#

#groupaddsales

#

#

#

#cat/etc/group

root:x:0:

bin:x:1:

daemon:x:2:

sys:x:3:

adm:x:4:

tty:x:5:

disk:x:6:

lp:x:7:

mem:x:8:

kmem:x:9:

wheel:x:10:student

cdrom:x:11:

mail:x:12:postfix

man:x:15:

dialout:x:18:

floppy:x:19:

games:x:20:

tape:x:33:

video:x:39:

ftp:x:50:

lock:x:54:

audio:x:63:

users:x:100:

nobody:x:65534:

dbus:x:81:

utmp:x:22:

utempter:x:35:

input:x:999:

kvm:x:36:

render:x:998:

systemd-journal:x:190:

systemd-coredump:x:997:

systemd-resolve:x:193:

tss:x:59:

polkitd:x:996:

rpc:x:32:

unbound:x:995:

ssh_keys:x:994:

sssd:x:993:

setroubleshoot:x:992:

rpcuser:x:29:

insights:x:991:

cockpit-ws:x:990:

sshd:x:74:

chrony:x:989:

tcpdump:x:72:

student:x:1000:

printadmin:x:988:

libstoragemgmt:x:987:

slocate:x:21:

postdrop:x:90:

postfix:x:89:

apache:x:48:

zhangsan:x:1001:

lisi:x:1002:

it:x:1003:组成员列表

sales:x:1004:

#

#idstudent

uid=1000(student)gid=1000(student)groups=1000(student),10(wheel)

#

将用户添加进组:zhangsan,加入it组,lisi,sales组

#idstudent

uid=1000(student)gid=1000(student)groups=1000(student),10(wheel)

#usermod-aGitzhangsan

#

#

#usermod-aGsaleslisi

#

#

#idzhangsan

uid=1001(zhangsan)gid=1001(zhangsan)groups=1001(zhangsan),1003(it)

#idlisi

uid=1002(lisi)gid=1002(lisi)groups=1002(lisi),1004(sales)

#

删除用户:

#useraddandy

默认删除,保留用户的文件:

#

#userdelandy

#

#

#useraddandy#重建andy会不一样,uid会不同

useradd:warning:thehomedirectoryalreadyexists.

Notcopyinganyfilefromskeldirectoryintoit.

Creatingmailboxfile:Fileexists

#

#useradduser1

#useradduser2

#idandy

uid=1003(andy)gid=1005(andy)groups=1005(andy)

#userdel-rany

userdel:user'any'doesnotexist

#

#userdel-randy#不保留用户的文件。家目,邮箱文件,skel文件都会

#

#

#idandy

id:‘andy’:nosuchuser

#useraddandy

#idandy

uid=1006(andy)gid=1008(andy)groups=1008(andy)

#

从组中移除用户:

#

#idzhangsan

uid=1001(zhangsan)gid=1001(zhangsan)groups=1001(zhangsan),1003(it)#zhangsan主组,it从属组

#

命令:

#gpasswd-dzhangsanit

Removinguserzhangsanfromgroupit

#

#

#idzhangsan

uid=1001(zhangsan)gid=1001(zhangsan)groups=1001(zhangsan)

#

#

#usermod-aGitzhangsan

#

#

#idzhangsan

uid=1001(zhangsan)gid=1001(zhangsan)groups=1001(zhangsan),1003(it)

#

#

#

#groupszhangsan

zhangsan:zhangsanit

#

直接修改文件:

#vim/etc/group

#cat/etc/group|grepit:

it:x:1003:

#

删除组:

#groupaddtest

#

#

#groupdeltest

创建自定义用户和组:

实验:用户名mary,指定用户id2000,家目录/maryhome,不用登录系统描述thisismaryuser

#

#useradd-u2000-d/maryhome-s/sbin/nologin-c"thisismary"mary

#

#idmary

uid=2000(mary)gid=2000(mary)groups=2000(mary)

#cat/etc/passwd|grepmary

mary:x:2000:2000:thisismary:/maryhome:/sbin/nologin

#

#su-mary

Lastlogin:SunMar2916:48:49CST2020onpts/0

Thisaccountiscurrentlynotavailable.

#

创建自定义组:指定组id

#groupadd-g3000group1

#cat/etc/group|grepgroup1

group1:x:3000:

#

linux属主和属组的区别?

区别如下:

linux的一切都是文件。Linux系统按文件所有者、文件所有者同组用户和其他用户来规定了不同的文件访问权限。

属主是某个文件的拥有者,属组是某个文件拥有者所在的组,对于文件来说,它都有一个特定的所有者,也就是对该文件具有所有权的用户。同时,在Linux系统中,用户是按组分类的,一个用户属于一个或多个组。文件所有者以外的用户又可以分为文件所有者的同组用户和其他用户。

linux系统组与用户组的区别?

Linux是多用户多任务操作系统,换句话说,Linux系统支持多个用户在同一时间内登录,不同用户可以执行不同的任务,并且互不影响。不同用户具有不问的权限,每个用户在权限允许的范围内完成不见的任务,Linux正是通过这种权限的划分与管理,实现了多用户多任务的运行机制。每个用户都有唯一的用户名和密码。在登录系统时,只有正确输入用户名和密码,才能进入系统和自己的主目录。用户组是具有相同特征用户的逻辑集合。简单的理解,有时我们需要让多个用户具有相同的权限,所有用户就具有了和组一样的权限,这就是用户组。将用户分组是Linux系统中对用户进行管理及控制访问权限的一种手段,通过定义用户组,很多程序上简化了对用户的管理工作。Linux用户和组的关系用户和用户组的对应关系有以下4种:一对一:一个用户可以存在一个组中,是组中的唯一成员;一对多:一个用户可以存在多个用户组中,此用户具有这多个组的共同权限;多对一:多个用户可以存在一个组中,这些用户具有和组相同的权限;多对多:多个用户可以存在多个组中,也就是以上3种关系的扩展。

在centoslinux中,命令的组成有?

、常用缩写习惯

cd==changedieectory##更改当前工作目录

dd==diskdump##磁盘转存

df==diskfree##磁盘自由

du==diskusage##磁盘详情

pwd==printworkingdirectory##打印当前工作目录

ps==processesstatus##工程状态

ps==promptstrings##提示字符串

su==substituteuser##切换用户

rc==runcommand##运行命令

tcl==toolcommandlanguage##工具命令语言

cups==commandunixprintingsystem##unix命令打印系统

apt==advancedpackagingtool##先进的包装工具

bg==background##背景、隐藏位置

fg==foreground##前景

ping==packetinternetgrouper##网络检测

--------------------------------------------------------------------------------------

如果首字母后为h,通常为改变的意思,需要保留

chsh==changeshell

chmod==changemode##更改模式

chown==changeowner##更改所有者

chgrp==changegroup##变更群组

bash==bourneagainshell##

zsh==zshell##

ksh==kornshell##

ssh==secureshell##安全命令

---------------------------------------------------------------------------------------

递归缩写类

gnu==gnuisnotunix##

php==phphypertextpreprocessor##

RPM==RPMpackagemanager

WINE==WINEisnotanemulator##

PNG==PNGisnotGIF##

nano==nanoisanothereditor##nano是另一个编辑器

阅读剩余
THE END