Linux基础知识--4.LInux用户和用户组以及权限管理
一.Linux用户和用户组
Linux操作系统是一个多用户、多任务的操作系统。有时可能多个用户在linux系统上操作一个任务,有时可能完成多个任务。用户的主要作用就是完成用户本身要完成的任务,不同用户所具有的权限也不同,所以能完成的任务也是有不尽相同。组:个人理解就是将用户和权限关联在一起的“容器”,我们可以把执行相同任务的用户加入同一个组内。
当登录linux系统时要输入linux用户账号,但是linux主机不会是认识你的“账号名称”,它只会识别用户的ID号,每个登录系统的用户至少要包括两个ID,一个是用户ID(UID),另一个是组ID(GID)。
1. 在linux系统中用户可分为三类:根用户(管理员用户),系统用户和普通用户。
根用户root用户:可以操作系统任何文件和资源,拥有最高权限。
root:UID为0 GID为0
系统用户:这类用户不具有登录系统的能力,但是系统运行不可缺少的用户,比如bin、daemon、ftp、mail等。这类用户都是系统自身拥有的,而非后来添加。当然后续添加也行。
系统用户的UID:1-499 但是在CentOS7上UID是:1-999
GID:1-499 CentOS7上GID为:1-999
普通用户:这类用户是用来登录系统,有自己的家目录,但是权限有限。
普通用户的UID为500+ 在CentOS7上UID为:1000+
GID:500+ CentOS7上GID为:1000+
2.Linux用户组:
linux组的分类:基本组,私有组和附加组(也称额外组)
基本组:linux在创建用户的时候会同时创建和用户名相同的组,这个组就是基本组,不能把用户从这个组删除。
附加组:附加组也称额外组,是除基本组之外用户所在的其他组。用户可以从附加组中删除。
私有组:私有组就是一个linux用户的基本组在没有其他用户添加到此组,就称基本组属于这个用户的私有组。
3.linux中和用户、组相关的配置文件及文件内容的意义:
/etc/passwd:用户及其属性信息
/etc/shadow:用户密码及其相关信息
/etc/group:组及其属性信息
/etc/gshadow:组密码及其相关信息
1./etc/passwd文件中各字段含义:
用户名:密码:UID:GID:用户注释信息:用户家目录:默认shell
apache:x:48:48:Apache:/var/www:/sbin/nologin
2./etc/shadow文件中个字段的含义:
bin:*:15980:0:99999:7:::
用户名:加密之后的密码:最近一次更改密码的日期:密码的最小使用期限:最大密码使用期 限:密码警告时间段:密码过期恕限时间:账户过期时间:保留字段
注意:最近一次更改密码的日期:是从1970年1月1日到最近一个修改密码的天数。
密码最小使用期限:便是两次修改密码之间所需的最小天数,0表示没有。
密码最大使用期限:指的是密码保持有效的天数。
密码警告时间段:表示从系统警告用户到用户密码正式失效的天数。
密码过期恕限时间:如果用户过了警告时间仍没有从新设定密码,致使密码失效。用户仍然可以使用这个失效的密码在n天内登陆系统,若在这个期间人没有更改密码,则账号失效。
3./etc/group文件中各字段的含义:
bin:x:1:bin,daemon
组名:组密码:GID:以当前组为附加组的用户列表(分隔符为逗号)
4./etc/gshadow文件中各字段的含义:
bin:::bin,daemon
组名:组密码:组管理者:组成员
4.linux 用户和组相关的管理命令:
(1)用户创建:useradd
useradd [options] LOGIN
常用选项:
-u UID:指定UID
-g GID:指定GID
-c "COMMENT":用户注释信息
-d directory:指定用户的家目录
-s SHELL:指定用户的shell
-G group1,group2,...:指定用户的附加组,组事先要存在
-r:创建系统用户
和用户创建相关的一些文件和目录:
/etc/login.defs /etc/shells /etc/skel /etc/default/useradd
/etc/login.defs:此文件是创建用户时的一些限制,比如可以配置密码的最大过期天数,密码 最大长度等。该文件对root用户无效。
/etc/shells:该文件存在当前系统支持的shell
/etc/skel:该目录下存放了一些隐藏文件和目录。在建立用户时,用户初始化用户根目录。系 统会将此目录下的所有文件和目录都复制到新建用户的根目录,并且将用户的属主与用户组调整为与此根目录相同。
/etc/default/useradd:通过useradd添加用户时的规则文件。
(2)删除用户:userdel
useradd [options] login
useradd -r UserName:连同用户的家目录一并删除
(3)用户属性的修改:usermod
usermod [OPTION] login
常用选项:
-u UID:修改UID
-g GID:修改GID
-G group1,group,..:新附加组,原来的附加组将覆盖,如果不想覆盖使用-a选项,表append
-s shell:指定新的shell
-c "COMMENT":新的注释信息
-d HOME:修改家目录,一般和-m选项连用。表示将原有家目录的内容一直新的家目录中
-l Login_name:修改用户名
-L:锁定用户
-U:解锁用户
-e YYYY-MM-DD:指明用户账号过期日期
-f INACTIVE:设定非活动期限
(4)给用户添加密码:passwd
passwd [OPTIONS] UserName:修改指定用户的密码,仅root用户权限
passwd :修改当前登录系统用户的密码
常用选项
-l:锁定指定用户
-u:解锁指定用户
-n mindays:指定密码最短使用期限
-x maxdays:指定密码最大使用期限
-w warndays:指定提前多少天开始警告
-i inactivedays:非活动期限
--stdin:从标准输入接收用户密码:
eg:echo "PASSWORD" | passwd --stdin USERNAME
(5)组创建:groupadd
groupadd [OPTION]... group_name
常用选项:
-g GID:指明组ID
-r:创建系统组
(6)删除组:groupdel
groupdel GroupName
eg: groupdel admingroup
(7)组属性修改:groupmod
groupmod [OPTION].. group
常用选项:
-n group_name:修改组名
-g GID:修改组ID
(8)组密码创建:gpasswd
让某个用户组具有一个管理员,这个用户组管理员能够管理那些账号可以加入/移除该用户组。
gpasswd [option] group
常用选项:
-a user:将user添加至指定组中
-d user:删除用户user的以当前组为组的附加组
-A user1,user2,...:设置有管理权限的用户列表
其中newgrp命令是临时切换到一个加密组中,如果用户本不属于此组,则需要组密码
(9)修改用户属性:chage
chage [OPTION]... LOGIN
常用格式:
-l:列出用户密码的相关信息:
-m mindays:修改密码的最小天数
-M maxdays:修改密码的最大天数
-I:密码过期后,锁定账号的天数
-d:指定密码最后修改的日期
-E:有效期,0表示立即过期,-1表示永不过期
-W:密码过期前,开始警告的天数。
(10)还有其他命令:chsh,finger,chfn。
chsh:修改用户的shell
chfn:change your finger information
finger:finger - user information lookup program
# finger zkc
Login: zkc Name: Personal
Directory: /home/zkc Shell: /bin/bash
Never logged in.
No mail.
No Plan.
二.Linux 权限管理
Linux的文件权限主要针对三类对象:属主(u),属组(g),其他(o)
每个文件针对每类访问者都定义了三类权限:读r,写w,执行x
我们可以使用ls -la查看某个文件的属性和文件名。如:[root@localhost ~]# ls -la
total 64
dr-xr-xr-x. 21 root root 4096 Aug 15 22:37 ..
-rw-------. 1 root root 1201 Aug 14 21:19 anaconda-ks.cfg
-rw-------. 1 root root 2138 Aug 15 22:36 .bash_history
-rw-r--r--. 1 root root 18 May 20 2009 .bash_logout
-rw-r--r--. 1 root root 176 May 20 2009 .bash_profile
-rw-r--r--. 1 root root 276 Aug 14 21:51 .bashrc
分别表示文件的类型和文件的权限,连接数,属主,属组,文件大小,文件最后被修改的时间,文件名。
1.文件的类型有一下几种:
-:普通文件。
d:目录文件。
l:连接文件
b:块设备文件.
c:字符设备文件
s:套接字文件
p:管道文件
2.文件对应属主,属组和其他的属性:rwx
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7
目录和文件的权限意义:
1.权限对文件的意义:
r:可读取文件的内容,可以用文件查看类工具获取其内容
w:可以编辑,新增或者修改文件内容(但不包含删除)
x:该文件具有可执行的权限。可以把此文件提请内核启动为一个进程。
2.权限对目录的意义:
r:表示具有读取目录结构列表的权限。可以使用ls命令查看目录下的文件列表
w:这个可写入的权限对目录来说很强大。表示具有更改该目录结构列表的权限,包括:
新建新的文件与目录
删除已经存在的文件或目录(不论该文件的权限为何)
将已经存在的文件或目录进行重命名
转移该目录内的文件,目录位置
x:可以使用ls 命令查看目录下的文件列表,以及可以用cd转换到此目录下。
修改文件和目录权限:chmod
chmod [OPTION]... MODE FILE
-R:可递归修改权限
修改一类用户的所有权限:如:
a=rwx,u=rwx,g=rwx,o=rwx
uo=rw...
此类修改权限之后将会把以前的权限覆盖
eg:
修改一类用户的某些位的权限:
u+rwx u-rwx o+x a+x 等。。
eg:[root@localhost ~]# ll a.txt
-r-xr--r-x. 1 root root 6 Aug 16 03:04 a.txt
[root@localhost ~]# chmod a+w a.txt
[root@localhost ~]# ll a.txt
-rwxrw-rwx. 1 root root 6 Aug 16 03:04 a.txt
chmod [OPTION]... --reference=Rfile File...
查看Rfile文件的权限,将File文件的权限修改为同Rfile.
eg:[root@localhost ~]# ll a.txt
-rwxrw-rwx. 1 root root 6 Aug 16 03:04 a.txt
[root@localhost ~]# vim b.txt
[root@localhost ~]# ls -l b.txt
-rw-r--r--. 1 root root 6 Aug 16 03:34 b.txt
[root@localhost ~]# chmod --reference=a.txt b.txt
[root@localhost ~]# ls -l b.txt
-rwxrw-rwx. 1 root root 6 Aug 16 03:34 b.txt
修改文件和目录的属主和属组:chown(仅root用户)
chown [OPTION]... [OWNER][:[GROUP]] FILE...
-R:可递归修改权限
用法:chown owner file
chown owner:group file
chown :group file
chown [OPTION]... --reference=RFile File...
修改文件File的属主属组同Rfile的属主属组
eg:[root@localhost ~]# chown zkc.zkc a.txt
[root@localhost ~]# ll a.txt
-rwxrw-rwx. 1 zkc zkc 6 Aug 16 03:04 a.txt
[root@localhost ~]# chown --reference=b.txt a.txt
root@localhost ~]# ll a.txt
-rwxrw-rwx. 1 root root 6 Aug 16 03:04 a.txt
修改文件的属组:chgrp
chgrp [OPTION]... GROUP File
chgrp [OPTION]... --reference=Rfile File...
eg:[root@localhost ~]# chgrp zkc a.txt
[root@localhost ~]# ll a.txt
-rwxrw-rwx. 1 root zkc 6 Aug 16 03:04 a.txt
[root@localhost ~]# chgrp --reference=b.txt a.txt
[root@localhost ~]# ll a.txt
-rwxrw-rwx. 1 root root 6 Aug 16 03:04 a.txt
文件或目录创建时的遮罩码:umask
对文件:创建文件时的权利:666-umask
如果某类用户的权限减得结果中存在x权限,将其权限加1.
相对目录:777-umask
Linux文件系统上的特殊权限:SUID,SGID,Sticky
1.通过前面学习Linux文件系统有普通权限:r,w,x
2.Linux中的安全上下文:
前提:进程必须有属主和属组。也就是文件有属主和属组
a.任何一个可执行程序文件是否能能够执行,成为进程,取决于对这个文件发起者对这个文件是否拥有执行的权限。
b.启动为程序之后,其进程的属主为发起者,进程的属组为发起者所属的组
c.进程访问文件时的权限,取决于进程的发起者。
1.进程的发起者属于文件的属主;则使用文件属主的权限
2.进程的发起者属于文件的属组;则使用文件属组的权限
3.有文件'其他'的权限
3.SUID:
任何一个可执行程序文件是否能启动为进程,取决于一个程序文件是否拥有执行的权限。
可执行程序文件启动为进程之后,其进程的属主为源文件的属主(而不再属于发起者)
权限设置:
chmod u+s File..
chmod u-s File..
s这个标志出现在文件所有者的x权限上的。
SUID权限只对二进制程序有效
执行者对已该程序需要具有x的执行权限
本权限仅在执行程序的过程中有效。
eg:命令chmod只能root用户才能使用,虽然chmod的二进制文件的权限为:-rwxr-xr-x;
但是普通用户还是不能执行此命令!!如:[root@localhost tmp]# ls -l /bin/chmod
-rwxr-xr-x. 1 root root 50048 Nov 22 2013 /bin/chmod
[zkc@localhost tmp]$ whoami
zkc
[zkc@localhost tmp]$ chmod a+w test.sh
chmod: changing permissions of `test.sh': Operation not permitted
为此二进制文件添加s权限,再次执行以下,结果如下:[root@localhost tmp]# chmod u+s /bin/chmod
[root@localhost tmp]# ls -l /bin/chmod
-rwsr-xr-x. 1 root root 50048 Nov 22 2013 /bin/chmod
切换到普通用户:
[zkc@localhost tmp]$ chmod a+w test.sh
[zkc@localhost tmp]$ ls -l test.sh
-rwxrw-rw-. 1 root root 40 Aug 16 04:49 test.sh
/bin/chmod添加s权限后,普通用户能够执行命令chmod,这只是普通用户"暂时"拥有root的权限。
4.SGID:
常用功能:
a.设置在目录上:
1.默认情况下,用户创建文件时,其属组为此用户所属的基本组;一旦某目录被设定了SGID的权限,则对此目录有写权限的用户,在此目录中所创建文件的属组就为此目录所属的属组!! 2.如果用户对此目录有r和x权限,用户还可以进入此目录中。
b.针对文件进行设置:SGID对二进制程序有用,二进制文件的执行者需要有x权限。当执行者执行此二进制程序文件时,执行具有该程序用户组的权限:
权限设定:
chmod g+s File/DIR
chmod g-s File/DIR
eg:在/tmp目录下创建一个目录kk。在没有向kk目录设置g+s权限时,普通用户(此普通用户对此目录有写权限)在此目录下创建的文件的属组还是普通用户所属的组:如:[root@localhost tmp]# ls -ld kk
drwxrxrwx. 2 root root 4096 Aug 16 06:30 kk
[zkc@localhost kk]$ ls -l a
-rw-rw-r--. 1 zkc zkc 0 Aug 16 06:35 a
向目录kk添加g+s权限,添加权限之后,所创建的文件是目录所属的属组[root@localhost tmp]# chmod g+s kk
[root@localhost tmp]# ls -ld kk
drwxr-srwx. 2 root root 4096 Aug 16 06:36 kk
[zkc@localhost kk]$ touch zkc
[zkc@localhost kk]$ ls -l
total 0
-rw-rw-r--. 1 zkc zkc 0 Aug 16 06:35 a
-rw-rw-r--. 1 zkc root 0 Aug 16 06:38 zkc
当其他用户在有SGID权限的目录下创建文件时,文件的属组都为目录所属的组,因此,用户之间可以相互删除对方的文件,这样做是不安全的。所以就出现了第三种特殊权限Sticky。
5.Sticky:
这个特殊权限只对目录有效,对文件无效。对目录的作用有:
1.当用户对此目录有w,x权限时,既具有写入的权限
2.当用户在此目录下创建文件或目录时,仅自己或root才有权限删除此文件
权限设定:
chmod o+t DIR...
chmod o-t DIR...
eg:在一个目录下,此目录对其他用户有w权限。先以不同用户创建文件,查看是否能相互删除文件,然后在设置Sticky权限之后,在此查看能否相互删除文件。
a.在不设定Sticky权限的情况下[root@localhost tmp]# ls -ld test
drwxr-xr-x. 2 root root 4096 Aug 16 06:59 test
[root@localhost tmp]# chmod o+w test
[root@localhost tmp]# ls -ld test
drwxr-xrwx. 2 root root 4096 Aug 16 06:59 test
转到普通用户:[zkc@localhost test]$ touch zkc
[zkc@localhost test]$ ls -l
total 0
-rw-rw-r--. 1 zkc zkc 0 Aug 16 07:05 zkc
[kk@localhost test]$ touch kk
[kk@localhost test]$ ls -l
total 0
-rw-rw-r--. 1 kk kk 0 Aug 16 07:05 kk
-rw-rw-r--. 1 zkc zkc 0 Aug 16 07:05 zkc
查看是否能删除对方文件:[zkc@localhost test]$ rm -rf kk
[zkc@localhost test]$ ls
zkc
发现能删除对方文件
b.设定Sticky权限:[root@localhost tmp]# chmod o+t test
[root@localhost tmp]# ls -ld test
drwxr-xrwt. 2 root root 4096 Aug 16 07:06 test
在kk用户下删除zkc用户创建的文件zkc:kk@localhost test]$ rm -rf zkc
rm: cannot remove `zkc': Operation not permitted
[kk@localhost test]$ ls -l
total 0
-rw-rw-r--. 1 zkc zkc 0 Aug 16 07:05 zkc
设定Sticky权限之后,虽然目录test的其他(o)权限有w权限,但是不能删除其他用户所创建的文件!
特殊权限的权限位:
SUID :4 SGID:2 Sticky:1
SUID:user,占据属主的执行权限位:
s:属主拥有x权限
S:属主没有x权限
GUID:group,占据属组的执行权限位:
s:属组拥有x权限
S:属组没有x权限
Sticky:other,占据other的执行权限位:
t:other拥有x权限
T:other没有x权限
到此Linux基础中的用户,组,权限和特殊权限基本知识点介绍结束。。