用户和组管理

资源分派:

Authentication:认证

Authorization:授权

Accouting:审计

Audition


token, identity(username/password)


Linux用户:Username/UID

管理员:root, 0

普通用户:1-65535

系统用户:1-499, 1-999

对守护进程获取资源进行权限分配;

登录用户:500+, 1000+

交互式登录;


Linux组:Groupname/GID

管理员组:root, 0

普通组:

系统组:1-499, 1-999

普通组:500+, 1000+


Linux安全上下文:

运行中的程序:进程 (process)


以进程发起者的身份运行:

root: cat

tom: cat


进程所能够访问的所有资源的权限取决于进程的发起者的身份;


Linux组的类别:

用户的基本组(主组):

组名同用户名,且仅包含一个用户:私有组

用户的附加组(额外组):


Linux用户和组相关的配置文件:

/etc/passwd:用户及其属性信息(名称、UID、基本组ID等等);

/etc/group:组及其属性信息;

/etc/shadow:用户密码及其相关属性;

/etc/gshadow:组密码及其相关属性;


/etc/passwd:

name:password:UID:GID:GECOS:directory:shell


用户名:密码:UID:GID:GECOS:主目录:默认shell


/etc/group:

group_name:password:GID:user_list


组名:组密码:GID:以当前组为附加组的用户列表(分隔符为逗号)


/etc/shadow

用户名:加密了的密码:最近一次更改密码的日期:密码的最小使用期限:最大密码使用期限:密码警告时间段:密码禁用期:账户过期日期:保留字段


加密机制:

加密:明文--> 密文

解密:密文--> 明文

单向加密:提取数据指纹

md5: message digest, 128bits

sha1: secure hash algorithm, 160bits

sha224: 224bits

sha256: 256bits

sha384: 384bits

sha512: 512bits


雪崩效应:初始的条件的微小改变,将会引起结果的巨大改变;

定长输出:


密码的复杂性策略:

1、使用数字、大写字母、小写字母及特殊字符中至少3种;

2、足够长;

3、使用随机密码;

4、定期更换;不要使用最近曾经使用过的密码;


用户和组相关的管理命令:

用户创建:useradd

useradd [options] LOGIN

-u UID: [UID_MIN, UID_MAX], 定义在/etc/login.defs

-g GID:指明用户所属基本组,可为组名,也可以GID;

-c "COMMENT":用户的注释信息;

-d /PATH/TO/HOME_DIR: 以指定的路径为家目录;

-s SHELL: 指明用户的默认shell程序,可用列表在/etc/shells文件中;

-G GROUP1[,GROUP2,...[,GROUPN]]]:为用户指明附加组;组必须事先存在;

-r: 创建系统用户

CentOS 6: ID<500

CentOS 7: ID<1000


默认值设定:/etc/default/useradd文件中

useradd -D 

-s SHELL


练习:创建用户gentoo,附加组为distro和linux,默认shell为/bin/csh,注释信息为"Gentoo Distribution"; 


组创建:groupadd

groupadd [OPTION]... group_name


-g GID: 指明GID号;[GID_MIN, GID_MAX]

-r: 创建系统组;

CentOS 6: ID<500

CentOS 7: ID<1000


查看用户相关的ID信息:id

id [OPTION]... [USER]

-u: UID

-g: GID

-G: Groups

-n: Name


切换用户或以其他用户身份执行命令:su

su [options...] [-] [user [args...]]


切换用户的方式:

su UserName:非登录式切换,即不会读取目标用户的配置文件;

su - UserName:登录式切换,会读取目标用户的配置文件;完全切换;


Note:root su至其他用户无须密码;非root用户切换时需要密码;


换个身份执行命令:

su [-] UserName -c 'COMMAND'


选项:

-l:“su -l UserName”相当于“su - UserName”


用户属性修改:usermod

usermod [OPTION] login


-u UID: 新UID

-g GID: 新基本组

-G GROUP1[,GROUP2,...[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项,表示append;

-s SHELL:新的默认SHELL;

-c 'COMMENT':新的注释信息;

-d HOME: 新的家目录;原有家目录中的文件不会同时移动至新的家目录;若要移动,则同时使用-m选项;

-l login_name: 新的名字;


-L: lock指定用户

-U: unlock指定用户


-e YYYY-MM-DD: 指明用户账号过期日期;

-f INACTIVE: 设定非活动期限;


给用户添加密码:passwd

passwd [OPTIONS] UserName: 修改指定用户的密码,仅root用户权限

passwd: 修改自己的密码;


常用选项:

-l: 锁定指定用户

-u: 解锁指定用户


-n mindays: 指定最短使用期限

-x maxdays:最大使用期限

-w warndays:提前多少天开始警告

-i inactivedays:非活动期限;


--stdin:从标准输入接收用户密码;

echo "PASSWORD" | passwd --stdin USERNAME


Note: /dev/null, bit buckets

     /dev/zero, 


删除用户:userdel

userdel [OPTION]... login

-r: 删除用户家目录;


组属性修改:groupmod

groupmod [OPTION]... group

-n group_name: 新名字

-g GID: 新的GID;


组删除:groupdel

groupdel GROUP


组密码:gpasswd

gpasswd [OPTION] GROUP


-a user: 将user添加至指定组中;

-d user: 删除用户user的以当前组为组名的附加组


-A user1,user2,...: 设置有管理权限的用户列表


newgrp命令:临时切换基本组;

如果用户本不属于此组,则需要组密码;


修改用户属性:chage

chage [OPTION]... LOGIN

-d LAST_DAY

-E, --expiredate EXPIRE_DATE

-I, --inactive INACTIVE

-m, --mindays MIN_DAYS

-M, --maxdays MAX_DAYS

-W, --warndays WARN_DAYS


其它命令:chfn, chsh, finger


命令总结:useradd, groupadd, su, id, usermod, userdel, groupmod, groupdel, passwd, newgrp, pwck, gpasswd, chage, chsh, chfn, finger


权限管理:

文件的权限主要针对三类对象进行定义:

owner: 属主, u

group: 属组, g

other: 其他, o


每个文件针对每类访问者都定义了三种权限:

r: Readable

w: Writable

x: eXcutable


文件:

r: 可使用文件查看类工具获取其内容;

w: 可修改其内容;

x: 可以把此文件提请内核启动为一个进程;


目录:

r: 可以使用ls查看此目录中文件列表;

w: 可在此目录中创建文件,也可删除此目录中的文件;

x: 可以使用ls -l查看此目录中文件列表,可以cd进入此目录;


--- 000 0

--x 001 1

-w- 010 2

-wx 011 3

r-- 100 4

r-x 101 5

rw- 110 6

rwx 111 7


例如:

640: rw-r-----

rwxr-xr-x: 755


修改文件权限:chmod

chmod [OPTION]... OCTAL-MODE FILE...


-R: 递归修改权限


chmod [OPTION]... MODE[,MODE]... FILE...

MODE:

修改一类用户的所有权限:

u=

g=

o=

ug=

a=

u=,g=


修改一类用户某位或某些位权限

u+

u-


chmod [OPTION]... --reference=RFILE FILE...

参考RFILE文件的权限,将FILE的修改为同RFILE;


修改文件的属主和属组:

仅root可用;


修改文件的属主:chown

chown [OPTION]... [OWNER][:[GROUP]] FILE...


用法:

OWNER

OWNER:GROUP

:GROUP


Note: 命令中的冒号可用.替换;


-R: 递归


chown [OPTION]... --reference=RFILE FILE...


修改文件的属组:chgrp

  chgrp [OPTION]... GROUP FILE...

        chgrp [OPTION]... --reference=RFILE FILE...


        -R


    文件或目录创建时的遮罩码:umask

    FILE: 666-umask

    Note: 如果某类的用户的权限减得的结果中存在x权限,则将其权限+1

    DIR: 777-umask


    umask: 查看

    umask #: 设定


SUID, SGID, Sticky


1 权限

r, w, x


user, group, other


2 安全上下文

前提:进程有属主和属组;文件有属主和属组;

(1) 任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限;

(2) 启动为进程之后,其进程的属主为发起者;进程的属组为发起者所属的组;

(3) 进程访问文件时的权限,取决于进程的发起者:

(a) 进程的发起者,同文件的属主:则应用文件属主权限;

(b) 进程的发起者,属于文件的属组;则应用文件属组权限;

(c) 应用文件“其它”权限;


3 SUID

(1) 任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限;

(2) 启动为进程之后,其进程的属主为原程序文件的属主;


权限设定:

chmod u+s FILE... 

chmod u-s FILE...


4 SGID

默认情况下,用户创建文件时,其属组为此用户所属的基本组;

一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组;


权限设定:

chmod g+s DIR...

chmod g-s DIR...


5 Sticky

对于一个多人可写的目录,如果设置了sticky,则每个用户仅能删除自己的文件;


权限设定:

chmod o+t DIR...

chmod o-t DIR...


SUID SGID STICKY

000 0

001 1

010 2

011 3

100 4

101 5

110 6

111 7


chmod 4777 /tmp/a.txt


几个权限位映射:

SUID: user, 占据属主的执行权限位;

s: 属主拥有x权限

S:属主没有x权限

SGID: group,  占据group的执行权限位;

s: group拥有x权限

S:group没有x权限

Sticky: other, 占据ohter的执行权限位;

t: other拥有x权限

T:other没有x权限