Linux-用户、组和权限

Red-Hat-Logo-2013

本章内容

解释Linux的安全模型

解释用户帐号和组群帐号的目的

用户和组管理命令

理解并设置文件权限

默认权限

特殊权限

ACL

 

安全3A

资源分派:

Authentication:认证

Authorization:授权

Accouting|Audition:审计

 

用户user

令牌token,identity

Linux用户:Username/UID

管理员:root, 0

普通用户:1-65535

系统用户:1-499, 1-999 (CentOS7)

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

登录用户:500+, 1000+(CentOS7)

交互式登录

 

用户一登录,系统就会发一个令牌token,

 

Linux中建一个帐号,会自动建一个同名的组,称为私有组

 

组group

Linux组:Groupname/GID

管理员组:root, 0

普通组:

系统组:1-499, 1-999(CENTOS7)

普通组:500+, 1000+(CENTOS7)

 

组的类别

Linux组的类别

用户的主要组(primary group)

用户必须属于一个且只有一个主组

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

用户的附加组(supplementary group)

一个用户可以属于零个或多个辅助组

 

qjy g1 read g2 wrie g3 read 累加权限 read write

qjy,mage g1

 

 

Linux用户和组的主要配置文件

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

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

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

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

 

pwunconv     将口令从/etc/shadow转换回/etc/passwd里显示,不太安全,因谁都能看

 

修改passwd文件,可更改用户的UID,把root的UID改成1000,qjy改成0,则qjy是#,root是$

 

第1项:login name:登录用名(qjy)

第2项:passwd:密码(X)

第3项:UID:用户身份编号(1000)

第4项:GID:登录默认所在组编号(1000)

第5项:GECOS:用户全名或注释

例如qjy用户,chfn qjy可修改

finger qjy能看得更直观一些

第6项:home directory:用户主目录(/home/qjy)

若修改后家目录不存在,则登录后会自动进入/目录

但用户的家目录里有一些配置文件,修改后需拷到新目录里

新建帐号的时候,系统会自动从ls /etc/skel -a目录复制新配置文件到家目录

cp -r /etc/skel/.[^.]* /data/qjy/

第7项:shell:用户默认使用shell(/bin/bash)

默认shell可通过chsh -s /bin/csh qjy来修改

cat /etc/shells

注意有一个shell叫/sbin/nologin,可使一个帐号无法登陆、切换,很多服务都用的是/sbin/nologin,以防黑客利用,在创建帐号的时候即可直接指定

 

/etc/shadow

record:行  field:列

RHEL 5:$1指md5

Centos6和7:$6 sha512

$6$ Qb/LXy1YnfBRf59T:第二个$号是盐salt

加密算法可以自己指定

 

shadow文件格式

登录用名

用户密码:一般用sha512加密

从1970年1月1日起到密码最近一次被更改的时间

密码再过几天可以被变更(0表示随时可被变更)

密码再过几天必须被变更(99999表示永不过期)

密码过期前几天系统提醒用户(默认为一周)

密码过期几天后帐号会被锁定

从1970年1月1日算起,多少天后帐号失效

双(单)!是锁定的意思

加锁和解锁命令

usermod -L qjy    加锁

usermod -U qjy   解锁,解一个!,CentOS 6之后就不允许解锁后空口令了,必需要加一个密码

passwd -e qjy      使qjy帐号的密码立即过期,需立即改口令

chage -d 0 qjy     同样效果

chage -l qjy  查看用户的密码情况

chage qjy             更改用户密码各有效期

 

cat /etc/login.defs

更改密码的各默认有效期,邮件目录,UID、GID的起止数(500/1000,60000),默认的加密算法等

 

cat /etc/default/useradd  可修改创建帐号时的默认参数

 

Windows:net accounts命令

 

密码加密

加密机制:

加密:明文–> 密文

解密:密文–> 明文

单向加密:哈希算法,原文不同,密文必不同

相同算法定长输出,获得密文不可逆推出原始数据

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

md5: message digest, 128bits

sha1: secure hash algorithm, 160bits

sha224: 224bits

sha256: 256bits

sha384: 384bits

sha512: 512bits

更改加密算法 authconfig –passalgo=sha256 –update

实际改的是这个文件:/etc/login.defs

 

密码的复杂性策略

openssl rand -base64 12 输出12位随机字符,可用随机字符做密码

 

useradd -N qjy     创建新帐号默认属于users组(GID=100)

 

cat /etc/group

group文件格式

组名:就是群组名称

组口令:用户可以自己把自己加入某个组里,前提是知道组的密码

组GID:就是群组的 ID

组成员:以当前组为附加组的用户列表(分隔符为逗号)

 

/etc/gshdow文件格式

群组名称:就是群组名称

群组密码:

组管理员列表:组管理员的列表,更改组密码和成员

以当前组为附加组的用户列表 (分隔符为逗号),gshadow和group的附加组用户列表应一致

 

给组加口令:gpasswd

newgrp 临时改变用户主组

 

vipw       相当于vi /etc/passwd,有语法检查功能

vigr        相当于vi /etc/group,有语法检查功能

pwck      对/etc/passwd进行语法检查

grpck     对/etc/group进行语法检查

 

getent passwd|shadow|group|gshadow [qjy]    快捷查看这几个文件(里的某用户)的信息

 

用户和组管理命令

用户管理命令

useradd

usermod

userdel

组帐号维护命令

groupadd

groupmod

groupdel

 

用户创建:useradd

useradd [options] LOGIN

-u UID

-o 配合-u 选项,不检查UID的唯一性

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

-c “COMMENT”:用户的注释信息

-d HOME_DIR: 以指定的路径(不存在)为家目录

-s SHELL: 指明用户的默认shell程序

可用列表在/etc/shells文件中

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

-N 不创建私用组做主组,使用users组做主组

-r: 创建系统用户 CentOS 6: ID<500,CentOS 7: ID<1000

-m 创建家目录,用于系统用户

-M 不创建家目录,用于非系统用户

 

useradd -s /sbin/nologin -r -m openstack

 

以下命令查看了httpd服务的rpm安装包中的脚本,生产中手工创建用户基本也是这么写的

[root@centos7 Packages]#rpm -qp –scripts /run/media/root/CentOS\ 7\ x86_64/Packages/httpd-2.4.6-67.el7.centos.x86_64.rpm

……

/usr/sbin/groupadd -g 48 -r apache 2> /dev/null || :

/usr/sbin/useradd -c “Apache” -u 48 -g apache \

-s /sbin/nologin -r -d /usr/share/httpd apache 2> /dev/null || :

……

 

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

显示或更改默认设置:

useradd -D

useradd -D -s SHELL

useradd -D -b BASE_DIR

useradd -D -g GROUP

 

 

新建用户的相关文件和命令

/etc/default/useradd

/etc/skel/*

/etc/login.defs

newusers passwd格式文件 批量创建用户

chpasswd 批量修改用户口令

pass.txt

app1 redhat

app2:centos

app3:centos

 

useradd usermod userdel

-u

-r

-s

-d

-c

-g

-G

 

 

 

切换用户的方式:

su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录

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

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

换个身份执行命令:

su [-] UserName -c ‘COMMAND’

选项:-l –login

su -l UserName 相当于 su – UserName

 

设置密码

passwd [OPTIONS] UserName: 修改指定用户的密码

常用选项:

-d:删除指定用户密码

-l:锁定指定用户

-u:解锁指定用户

-e:强制用户下次登录修改密码

-f:强制操作

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

-x maxdays:最大使用期限

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

-i inactivedays:非活动期限

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

echo “PASSWORD” | passwd –stdin USERNAME

 

创建组

groupadd [OPTION]… group_name

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

-r: 创建系统组

CentOS 6: ID<500

CentOS 7: ID<1000

 

创建GID和UID相同的用户:

groupadd -g 1234 nginx

useradd -g nginx -u 1234 nginx

 

修改和删除组

组属性修改: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命令:临时切换主组

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

 

更改和查看组成员

groupmems [options] [action]

options:

-g, –group groupname 更改为指定组 (只有root)

Actions:

-a, –add username 指定用户加入组

-d, –delete username 从组中删除用户

-p, –purge 从组中清除所有成员

-l, –list 显示组成员列表

groups [OPTION].[USERNAME]… 查看用户所属组列表

 

[root@centos7 ~]#groupmems -l -g webs

varnish  nginx  qjy

[root@centos7 ~]#groupmems -g webs -a root

[root@centos7 ~]#groupmems -g webs -l

nginx  qjy  varnish  root

 

文件权限

1、对普通用户来说,读写执行权限是严格的

2、普通用户不能修改文件的所有者

3、普通用户要修改文件的所属组,一是文件要是他的,二是他要在改后的那个组里

 

修改文件的属主和属组

修改文件的属主:chown

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

用法:

OWNER

OWNER:GROUP

:GROUP

命令中的冒号可用.替换

-R: 递归

chown [OPTION]… –reference=RFILE FILE…

修改文件的属组:chgrp

chgrp [OPTION]… GROUP FILE…

chgrp [OPTION]… –reference=RFILE FILE…

-R 递归

 

文件权限

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

owner: 属主, u

group: 属组, g

other: 其他, o

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

r: Readable

w: Writable

x: eXcutable

 

文件:

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

w: 可修改其内容

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

目录:

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

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

x: 可以cd进入此目录,查看此目录中文件的详细属性,也可以访问此目录中的文件

X: 只给目录x权限,不给文件x权限

 

chomod change mode

chmod

方法1:mode法

chmod who opt per file

who:u g o a(all)

opt:+ – =

per:r w x X

 

chomod u+x,g-w,o=  file

 

删除文件的权限,并不是由文件决定的,而是由目录的权限决定的,目录有w权限才能删、新建

 

对读写权限来说,root帐户是不受控制的,但执行权限对root帐户有效

 

二进制的读权限不是必须的,没有读权限也能执行,但用file命令无法判断文件的类型了

 

对目录来讲,如果没有读权限,意味着不能查看目录的文件列表

 

对目录来讲,如果没有执行权限,意味着不能进到目录里,不能查看目录里文件的详细属性,也不能访问目录里的文件

 

所以对目录来说,读和执行是基本权限

 

权限的生效顺序,是按所有者->所属组->其他人来顺序生效,一个生效了的话,后边的就不看了,即使后边的权限更大

 

vfat(fat32)是不支持这种读写执行权限的

 

chmod –reference=f1 f2 f3     参考f1来设置f2和f3的读写执行权限

 

方法2:数字法

 

rwx rw- r–

111 110 100

chmod 764 file

 

r:4

w:2

x:1

 

— 000 0

–x 001 1

-w- 010 2

-wx 011 3

r– 100 4

r-x 101 5

rw- 110 6

rwx 111 7

 

file:6rw,4r,0,1x

dir:7rwx,5r-x,0

 

chmod -R a+x dir1     -R    递归

chmod -R +X dir1              +X   针对目录加执行权限,如果是已经有执行权限的文件也会加,没有执行权限的文件不会加

 

目录里的文件要执行,需要目录至少有执行权限

 

危险命令:

chmod -R 777 qjy /*

chown -R qjy data /*

带-R的都很危险!

 

生产中做操作一般都要先在测试环境试做!

 

umask

type umask 内部命令

umask+default=666/777

对文件,使用666计算,对文件夹,使用777计算

对文件,如果所得结果某位存在执行(奇数)权限,则将其权限+1

umask 026    可直接修改umask值

umask mask:掩码

功能:取消对应的权限

666

125 umask

6  6  6

110110110

001010101 为1的取消

110100010

6  4  2

 

对于目录

default权限=777-umask

对于文件

default权限=666-umask:对结果观察,如有奇数位+1,偶数不变

 

改umask也只是改内存,要想存住的话,可加到.bashrc里

umask -p >> bashrc

 

root的umask默认为022

普通帐号的umask默认为002

 

默认umask实际存在/etc/bashrc里,但不建议改

 

SUID,SGID,Sticky

suid :继承二进制程序所有者的权限

普通用户能用passwd命令修改密码,而/etc/passwd的权限是这样的

[qjy@centos7 ~]$ll /usr/bin/passwd

-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd

chmod u+s file

chmod 4755 file

suid权限也很危险,只适合于应用在二进制的可执行程序上

 

sgid:

1)继承二进制程序所有组的权限

2)作用于目录,此目录新建的文件继承目录的所属组

chmod g+s file

chmod 2755 file

 

suid4 sgid2 sticky1

sticky又称粘滞位

sticky:作用于目录,此目录的文件只能被所有者删除

chmod o+t dir1

chmod 1777 dir1

 

Sticky 位

具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权

在目录设置Sticky 位,只有文件的所有者或root可以删除该文件

sticky 设置在文件上无意义

权限设定:

chmod o+t DIR…

chmod o-t DIR…

例如:

ls -ld /tmp drwxrwxrwt 12 root root 4096 Nov 2 15:44 /tmp

 

suid :继承二进制程序所有者的权限

sgid:

1)继承二进制程序所有组的权限

2)作用于目录,此目录新建的文件继承目录的所属组 -> 用得多点

sticky:作用于目录,此目录的文件只能被所有者删除 -> 用得多点

 

root权限太大,为防止root误操作,可设定文件特定属性

设定文件特定属性

chattr +i 不能删除,改名,更改

chattr +a 只能追加内容

lsattr 显示特定属性

chattr +A 锁定文件的读时间

 

访问控制列表

ACL:Access Control List,实现灵活的权限管理

除了文件的所有者,所属组和其它人,可以对更多的用户设置权限

CentOS7 默认创建的xfs和ext4文件系统具有ACL功能

CentOS7 之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加

tune2fs –o acl /dev/sdb1

mount –o acl /dev/sdb1 /mnt/test

ACL生效顺序:所有者,自定义用户,自定义组,其他人acl   看自定义组的情况下可并列生效

 

为多用户或者组的文件和目录赋予访问权限rwx

  • mount -o acl /directory
  • getfacl file |directory
  • setfacl -m u:qjy:rwx file|directory
  • setfacl -Rm g:sales:rwX directory -R递归
  • setfacl -M file.acl file|directory -M是引用file.acl文件,可手写file.acl权限表
  • setfacl -m g:salesgroup:rw file| directory
  • setfacl -m d:u:qjy:rx directory d:默认acl权限
  • setfacl -x u:qjy file |directory
  • setfacl -X file.acl directory -X是引用file.acl文件,可一次删多个文件

 

ACL文件上的group权限是mask 值(自定义用户,自定义组,拥有组的最大权限),而非传统的组权限

getfacl 可看到特殊权限:flags

通过ACL赋予目录默认x权限,目录内文件也不会继承x权限

base ACL 不能删除

setfacl -k dir 删除默认ACL权限

setfacl –b file1清除所有ACL权限

getfacl file1 | setfacl –set-file=- file2 复制file1的acl权限给file2

 

mask只影响除所有者和other的之外的人和组的最大权限

Mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission)

用户或组的设置必须存在于mask权限设定范围内才会生效 setfacl -m mask::rx file

–set选项会把原有的ACL项都删除,用新的替代,需要注意的是一定要包含UGO的设置,不能象-m一样只是添加ACL就可以

示例:

setfacl –set u::rw,u:qjy:rw,g::r,o::- file1

 

备份和恢复ACL

主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p 参数。但是tar等常见的备份工具是不会保留目录和文件的ACL信息

getfacl -R /tmp/dir1 > acl.txt

setfacl -R -b /tmp/dir1

setfacl -R –set-file=acl.txt /tmp/dir1

setfacl –restore acl.txt

getfacl -R /tmp/dir1

 

 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/95002

发表评论

登录后才能评论

This site uses Akismet to reduce spam. Learn how your comment data is processed.

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1823388528@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班