用户与组

  早期Linux系统设计为了能够实现多用户、多进程高效的利用服务器资源,在此种情况下,为了能够保证用户与用户之间的文件不被随意的访问及修改、删除等操作,用户、组的管理能在某种程序上实现管理用户或批量管理用户。由于Linux的设计哲学思想『一切皆文件』,用户对设备的访问就是对文件的访问。

安全上下文

  安全上下文就是当用户发起一个进程时,该进程将继承用户的相应权限,再以继承的权限来控制文件的访问权限。例如:

[root@asus-a53s ~]# /usr/bin/cat anaconda-ks.cfg    #取决于root对anaconda-ks.cfg的访问权限。
[xiao@asus-a53s ~]$ /usr/bin/cat anaconda-ks.cfg #取决于 xiao对anaconda-ks.cfg的访问权限。

Linux用户

用户的分类

Linux下系统用户大致分为三类用户:

  • 超级用户:具有操作系统的一切权限,UID值为0。
  • 普通用户:仅针对自己家目录下面有写入权限,UID值500以上或者1000以上
  • 伪用户  :是为了方便系统管理,满足相应的系统进程文件属主的要求;伪用户不能登录系统终端;CentOS6 UID值 1 -- 499,CentOS7 UID值为1 – 999。

用户的配置

  • /etc/passwd:用户的基本属性文件
  • /etc/shadow:用户密码及其相关属性,可使用pwck命令校验格式无效用户等

/etc/passwd配置的格式及说明

root:x:::root:/root:/bin/bash
上述文件内容总共分为七段,用分号隔开,说明如下:
第一段:描述用户的名称
第二段:密码占位符,x表示该用户可以使用密码登录,密码文件是shadow,为空代表不密码;开头第一个字符是*的,表示系统停用账户。
第三段:代表用户的ID号,简称UID
第四段:代表用户的主组号,简称GID
第五段:用户描述信息,如:名称、姓名、电话等等;
第六段:宿主目录位置
第七段:默认命令解释程序

/etc/shadow配置的格式及说明

root:$$B9wp3OvD$WRDtiyw5aSglmKfJ8Pu...Z4yfj4oT2NG.:::::::
上述文件内容总共分为八段,亦以分号隔开,说明如下:
第一段:用户名,需与/etc/passwd文件里面的用户名一致
第二段:加密的登录口令,如果为空,则表示无密码;
     星号代表账号被锁定
     双感叹号代表用户口令已过期
$$开头内容表示密码用SHA-512加密
$$表示用的SHA-1代加密的
$$表示用Blowfish加密的
$$表示用SHA-256加密的
第三段:最后一次修改时间,表示是从某个时刻起到用户最后一次修改口令的的天数。每个系统的时间起点对点可能不一样,例如在linux中这个起点时间是1970年1月1日。
第四段:最小时间间隔,表示两次修改口令之间的所需的最小天数。0表示可以随时修改
第五段:最大时间间隔,表示口令保持有效的最大天数。99999表示一直有效。
第六段:警告时间,表示的是从系统开始警告用户到用户密码正式失效之间的天数。
第七段:不活动时间,表示的是用户没有登录活动但账号仍能保持有效的最大天数。
第八段:失效时间,字段给出的是一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。期满后,该账号就不再是一个合法的账号,也就不能再用来登录了。

Linux组

组的分类

  1. 主组:用户必须属于主组,且用户只能有一个主组,一个组可以是多个用户的主组。不可以把用户从主组中删除。
  2. 基本组:如果没有指定用户组,创建用户的时候系统会默认同时创建一个和这个用户名同名的组,这个组就是基本组,不可以把用户从基本组中删除。基本组也叫私有组。
  3. 附加组:一个用户可以属于多个附加组,除了主组或者基本组之外的组都是附加组。用户是可以从附加组中被删除的。

组的配置

  1. /etc/group:组的基本属性信息,可使用vigr命令编辑,可使用grpck校验格式,无效组等
  2. /etc/gshadow:组密码及其相关属性,可使用grpck校验合适,无效组等

/etc/group配置的格式及说明

root:x::
上述文件内容总共分为四段,用分号隔开,最后一段应该没有内容,所以这里并没有显示。说明如下:
第一段:组名称
第二段:组口令占位符,如果相应的组加了密码,内容在gshadow中,一般是x
第三段:组ID,简称GID
第四段:组内用户列表,如果一个组中有N个成员,这里都会相应的显示

/etc/gshadow配置的格式及说明

root:$$PLRAi/Z/svr$PRelPtvLuGJqvFG3D8fbjYHDho2RQUe93glO.::
上述文件内容总共分为四段,用分号隔开,说明如下:
第一段:组的名称,同/etc/group文件中的名字一致
第二段:加密的组口令,如果为空或者!,则表示无密码;
$$开头内容表示密码用SHA-512加密
$$表示用的SHA-1代加密的
$$表示用Blowfish加密的
$$表示用SHA-256加密的
第三段:组管理者,可以为空,如果有N个用户组管理者,用逗号隔开
第四段:组内用户成员列表,如果有N个用户,则用逗号隔开

用户与组的管理命令

添加用户——useradd

格式

useradd [options] LOGIN

选项

-u : 指定用户的UID
-g : 指明用户所属基本组,可为组名,也可以GID,组或者GID必须存在
-c : 指定注释信息,如果有空格,需要使用" "包含
-d : 指定用户家目录位置,创建用户时,会自动从/etc/skel目录中复制文件到家目录下,如果指定的文件存在将不会复制文件,如果父目录不存在,创建也将会失败。
-s : 指定用户登录时使用的命令解释器
-r : 指定创建一个系统用户
-M : 不创建用户家目录
-G : 指定附加组,多个使用逗号隔开
-D : 修改创建用户的配置信息,文件位于/etc/default/useradd
注:创建用户时的诸多默认设定配置文件为/etc/login.defs

示例

[root@localhost ~]# useradd -u  -c "TestUser" -d /home/geek -s /bin/sh geek
[root@localhost ~]# getent passwd geek
geek:x:::TestUser:/home/geek:/bin/sh [root@localhost ~]# useradd sys -r -M -g -G root
[root@localhost ~]# getent passwd sys
sys:x::::/home/sys:/bin/bash
[root@localhost ~]# id sys
uid=(sys) gid=(young) groups=(young),(root) [root@localhost ~]# useradd -D #查看系统useradd命令的默认值
GROUP=
HOME=/home
INACTIVE=-
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes 说明:
新用户添加到GID为100的公共组
新用户的HOME目录将会位于/home/username
新用户账户密码在过期后不会被禁用
新用户账户未被设置为某个日期后就过期
新用户账户将bash shell作为默认shell
系统会将/etc/skel目录下的内容复制到用户的HOME目录下
系统为该用户账户在mail目录下创建一个用于接收邮件的文件 修改内容:
useradd –D -s shell
useradd –D –b BASE_DIR
useradd –D –g GROUP

修改用户属性——usermod

格式

usermod [options] LOGIN

选项

-u : 修改用户UID
-g : 修改用户GID
-c : 修改用户的注释信息
-d : 修改用户家目录,需要配合使用-m选项才会自动复制用户家目录下的文件到新的家目录
-m : move-home to new directory
-s : 修改用户的shell
-l : 修改用户的登陆名,即login名称
-G : 修改用户的附加组信息,需要配合-a(append)一起使用,如果不使用-a将删除原来的附加组
-a : --append,连接多个附加组的参数
-L : 锁定用户,即lock,在/etcpasswd文件中,密码前面加!(一个)
-U : 解锁用户,即unlock,在/etc/passwd文件中,取消密码前面的!号

示例

[root@localhost ~]# getent passwd user1
user1:x::::/home/user1:/bin/bash [root@localhost ~]# id user1
uid=(user1) gid=(user1) groups=(user1) [root@localhost ~]# usermod -u -g user2 -aG bin,root -c 'linux' -d /none/user1 -s /bin/tsh -l linux user1 [root@localhost ~]# getent passwd linux
linux:x:::linux:/none/user1:/bin/tsh [root@localhost ~]# id linux
uid=(linux) gid=(user2) groups=(user2),(root),(bin)

删除用户——userdel

格式

userdel [options] LOGIN

选项

-r : 删除用户的同时删除用户的家目录,即--remove参数

用户密码管理——passwd

格式

passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]

注意:

  1. passwd (修改自己的密码)
  2. passwd USERNAME(修改其他用户的密码,root权限 )

选项

-l : 锁定用户,在/etc/passwd的密码前面加!!,
-u : 解锁用户,在/etcpasswd的密码前!!取消
-d : --delete,删除用户密码
-e DATE : --expire,设定过期时间
-i DAYS : 非活动时间
-n days : 最短使用期限
-x days : 最长使用期限
-w days : 警告期限
--stdin : echo "PASSWD" | passwd --stdin root

示例

[root@localhost ~]# echo young | passwd --stdin geek
Changing password for user geek.
passwd: all authentication tokens updated successfully.

修改用户密码策略——chage

格式

chage [OPTION]… LOGIN

选项

-d:修改用户最近一次修改密码的日期
-E:修改账户的过期日期
-I:密码禁用期
-m:密码的最小使用期限
-M:密码的最大使用期限
-W:密码的警告时间
–l:显示密码策略

示例

实例一:查看mysql用户以及密码的有效期
[root@DB-Server ~]# chage -l mysql
Last password change : Mar ,
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : -
Maximum number of days between password change : -
Number of days of warning before password expires : -
[root@DB-Server ~]# 实例二:设置mysql用户60天后密码过期,至少7天后才能修改密码,密码过期前7天开始收到告警信息。
[root@DB-Server ~]# chage -M -m -W mysql
You have new mail in /var/spool/mail/root
[root@DB-Server ~]# chage -l mysql
Last password change : Mar ,
Password expires : May ,
Password inactive : never
Account expires : never
Minimum number of days between password change :
Maximum number of days between password change :
Number of days of warning before password expires :
[root@DB-Server ~]#
clip_image001 实例三:强制新建用户第一次登陆时修改密码
[root@DB-Server home]# useradd test
[root@DB-Server home]# passwd test
Changing password for user test.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
[root@DB-Server home]# chage -d test
You have new mail in /var/spool/mail/root
[root@DB-Server home]# chage -l test
Last password change : password must be changed
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change :
Maximum number of days between password change :
Number of days of warning before password expires :

修改用户命令解释器——chsh

chsh:命令用来更改当前用户的shell类型。
使用权限:所有使用者

使用案例

[user1@localhost~]$ chsh
Changing fihanging shell for user1
Password: [del] ###输入密码进行操作
New shell [/bin/tcsh]: ### [是目前使用的 shell]
[del] ###输入密码进行性确认
[user1@localhost~]$ chsh -l ### 展示 /etc/shells 档案内容
/bin/bash
/bin/sh
/bin/ash
/bin/bsh
/bin/tcsh
/bin/csh

示例

# 我想知道我机器安装了哪些shell? 两种方法可以查看:
第一种: [rocrocket@jb51.net ~]$ chsh -l
/bin/sh
/bin/bash
/sbin/nologin
/bin/zsh
第二种: [rocrocket@jb51.net ~]$ cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/zsh
其实chsh -l也是来查看这个文件。 # 我想知道我当前正在使用的shell是哪个阿?
[rocrocket@jb51.net ~]$ echo $SHELL
/bin/bash
注意SHELL一定要是大写。可以看到,我目前使用的shell是/bin/bash # 执行了zsh之后,我查看当前shell类型仍然是/bin/bash呢? 请注意,我们虽然执行了zsh,但是所谓“当前的shell”是一个大环境的概念,是针对一个已登录的用户而言的。而我们执行zsh只是启动了一个zsh的解释器程序而已,并没有改变大环境。如果想改变“当前的shell”,那么还是要使用chsh才可以。 # 我想把我的shell改成zsh!
[rocrocket@jb51.net ~]$ chsh -s /bin/zsh
Changing shell for rocrocket.
Password:
Shell changed.
使用chsh加选项-s就可以修改登录的shell了! 你会发现你现在执行echo $SHELL后仍然输出为/bin/bash,这是因为你需要重启你的shell才完全投入到zsh怀抱中去。 # chsh -s到底是修改了哪里? 秘密告诉你吧。chsh -s其实修改的就是/etc/passwd文件里和你的用户名 相对应的那一行。现在我来查看下:
[user@localhost~]$ cat /etc/passwd | grep ^rocrocket
rocrocket:x:::rocrocket,China:/rocrocket/PSB/home:/bin/zsh
看!你可以发现输出内容的最后部分已经变成了/bin/zsh了!下次你重启的时候,linux就会读取这一命令来启动你的shell了! 好了,我要恢复正常工作,把shell修改会我熟悉的/bin/bash了!
[user@localhost~]$ chsh -s /bin/bash
Changing shell for rocrocket.
Password:
Shell changed.

更改用户个人细信息——chfn

chfn命令用于指定个人信息,finger用来查看个人信息。
chfn命令格式:
Usage: chfn [ -f full-name ] [ -o office ] [ -p office-phone ] [ -h home-phone ]
[ --help ] [ --version ]
[root@localhost ~]# chfn
Changing finger information for root.
Name [root]: young
Office []: geek
Office Phone []:
Home Phone []:
Finger information changed.

查看个人信息——finger

[root@localhost ~]# finger root
Login: root Name: young
Directory: /root Shell: /bin/bash
Office: geek, Home Phone: --
On since Sun Jan : (CST) on pts/ from 192.168.1.116
No mail.
No Plan.

查看用户的基本属性——id

选项

-u: UID
-g: GID
-G: Groups
-n: Name (与-u连用可现实名称)

示例

[root@localhost ~]# id geek
uid=(geek) gid=(geek) groups=(geek)
[root@localhost ~]# id
uid=(root) gid=(root) groups=(root)
[root@localhost ~]# id -G [root@localhost ~]# id -un
root

login.defs

login.defs是一个文件,位于/etc/目录下面;它定义了/etc/passwd和/etc/shadow配套的用户限制设定;这个文件是系统需要的,缺失并不影响系统的使用,但是也许会产生意想不到的错误。
如果/etc/shadow文件里有相同的选项,则以/etc/shadow里的设置为准,也就是说/etc/shadow的配置优先级高于/etc/login.defs。
[root@localhost~]#man login.defs
MAIL_DIR /var/spool/mail
#创建用户时,要在目录/var/spool/mail中创建一个用户mail文件 PASS_MAX_DAYS  
#密码最大有效期 PASS_MIN_DAYS  
#两次修改密码的最小间隔时间 PASS_MIN_LEN  
#密码最小长度,对于root无效 PASS_WARN_AGE  
#密码过期前多少天开始提示 UID_MIN      
#用户ID的最小值 UID_MAX      
#用户ID的最大值 GID_MIN      
#组ID的最小值 GID_MAX      
#组ID的最大值 #USERDEL_CMD   /usr/sbin/userdel_local
#当删除用户的时候执行的脚本 CREATE_HOME    yes
#使用useradd的时候是够创建用户目录 UMASK        USERGROUPS_ENAB yes
#用MD5加密密码
这里仅仅列出一部分,有其他的请自行man

创建组——groupadd

格式

groupadd [options] group

选项

-g : 指定GID号
-r : 指定为一个系统组

示例

实例一:
[root@localhost ~]# groupadd -g -r CentOS

删除组——groupdel

[root@localhost ~]#groupdel test
注:当有用户将该用户组作为主组时,无法直接删除该用户组,必须先删除用户。

修改组属性——groupmod

格式

groupmod [options] GROUP

选项

-g : 修改GID号码
-n : 修改组名称 (groupmod -n NEW_GROUP OLD_GROUP)

示例

[root@localhost ~]# groupmod -g  -n centos test #修改属性
[root@localhost ~]# getent group centos
centos:x::

管理组成员与组密码——gpasswd

格式

gpasswd [OPTION] GROUP

选项

-a user: 将user添加至指定组中;
-d user: 从指定组中移除用户user
-A user1,user2,…: 设置有管理权限的用户列表

示例

实例一:将用户添加至组中,并设置管理员
[root@localhost ~]# groupadd admins
[root@localhost ~]# gpasswd -a user1 admins
Adding user user1 to group admins
[root@localhost ~]# gpasswd -A user1 admins
[root@localhost ~]# getent group admins
admins:x::user1 实例二:设定组密码
[root@localhost ~]# gpasswd admins
Changing the password for group admins
New Password:
Re-enter new password:

临时切换基本组——netgrp

格式

newgrp [-] [group]
- : 模拟用户登陆, 以实现重新初始化环境变量

示例

[root@localhost ~]# su - user3
[user3@localhost ~]$ id
uid=(user3) gid=(user3) groups=(user3)
[user3@localhost ~]$ newgrp - admins
Password:
[user3@localhost ~]$ id
uid=(user3) gid=(admins) groups=(admins),(user3)

更改组成员——groupmems

格式

groupmems [options] [action]

选项

-g:更改为指定组(只有root可以使用)
-a:指定用户加入组
-d:从组中删除用户
-p:从组中清除所有成员

示例

[root@localhost ~]# groupmems -a user3 -g admins
[root@localhost ~]# id user3
uid=(user3) gid=(user3) groups=(user3),(admins)
[root@localhost ~]# groupmems -l -g admins
user1 user2 user3
[root@localhost ~]# groupmems -p -g admins
[root@localhost ~]# getent group admins
admins:x::

查看用户的组信息——groups

示例

[root@localhost ~]# groups user1 #查看用户user1的组信息
user1 : user1 root bin

感谢网上的老师给与的帮助:http://www.linuxidc.com/Linux/2017-02/140312.htm

文件与权限

文件的类型

常见文件类型描述如下:

d:    目录文件类型(directory)
-: 普通文件(ASCII)
l: 链接文件(类似快捷方式)
b: 块设备(硬盘、磁盘、U盘等存储介质)
p: 管道文件
c: 字符设备(鼠标、键盘等串口文件)
s: 套接文件(mysql.sock等)

权限的分类

权限说明,如下表

权限

对应数字

文件意义

目录意义

r

4

读取

列出

w

2

写入

创建

x

1

执行

进入

字母说明,如下表

字母

对应类

意义

u

user

u代表属主

g

group

g代表属组

o

other

o代表其他人

a

all

a代表所有用户与组

示例讲解

drwxr-xr-x.        root    mail            1月   :    account
上述内容总共分为七段,第一段可以分为五段,所有讲解如下:
第一段:. d:表示该文件类型为目录
. rwx:表示文件属主的权限大小
. r-x:表示文件属组的权限大小
. r-x:表示该文件的其他人权限大小
. .:注意,最后面还有一个点,这个代表该文件带有SElinux的安全上下文权限,且对应的文件类型的不同,所代表的含义也不一样;目录中带点,表示有SElinux继承权限县;目录中带加号,表示只有ACL规则,没有SElinux继承权限;文件中带点,表示有权限继承;若是文件中带加号,表示既有ACL规则,也有SElinux权限;什么都不带,表示不继承,也没有ACL规则;
第二段:数字代表文件或者目录所对应的关联文件,“”代表该目录有1个对应的关联目录,即“.”。
第三段:表示该文件的属主
第四段:表示该文件的属组
第五段:表示该文件的大小,单位Byte,不是bit。
第六段:表示文件的最后一次修改时间,默认以创建时间为标准
第七段:文件的名称

特殊权限

Linux下面有三种特殊的权限,分别是setuid、setgid、stick bit(粘滞位)。
1、 setuid: 简称SUID,用字母s表示;当s出现在拥有者的x权限上时,它有以下特点:
  a) SUID只能对二进制、可执行文件有效
  b) 执行者对于该文件具有执行权限时,执行者将暂时获得文件的属主权限
  c) 权限仅在此次运行过程中有效
  d) SUID仅可用在二进制程序上,不能够用在shell script上面。所以SUID的权限部分,还是要看shell script调用进来的程序设置,而不是shell script本身。

2、 setgid: 简称SGID,用字母s表示,可以对文件或者目录有效;当s出现在属组的x权限上时,它有一下特点:
  a) 使用者对目录有rx权限时,该使用者能进入到目录
  b) 使用者对此目录的属组将会直接变成该目录的属组,言外之意,使用者属于属组中的一员
  c) 若使用者对该目录有写入权限时,则新创建的文件的属组与此目录的属组一致
  d) 若SGID是针对二进制、可执行文件,则执行者将会在执行过中暂时获得属组的权限

3、 stick bit:简称SBIT,用字母t表示,仅对目录有效,该权限只能出现在其他人的x权限上,并且该权限需要配合写入权限才行,言外之意,其他人也需要对目录有写入权限;当其他人有写入权限,并且该目录设定了SBIT权限,则其他人在该目录下创建的文件或者目录只有创建者与root才拥有删除新建的内容。

三种特殊权限的应用场景和作用:

Suid的应用场景和作用:Suid只对二进制程序起作用,程序发起者在程序执行的时候继承程序拥有者的身份以程序拥有者的权限,以程序拥有者的身份去执行程序。应用场景为root用户给普通用户分配需要经常改动的配置文件的修改权限比如密码passwd.

Sgid作用:对二进制程序的作用与Suid基本一致。对目录的作用,当目录设置Sgid时,若用户在此目录下所创建的新文件的用户组与此目录的用户组一致。应用场景:在开发的时候需要将开发的东西共享出来大家都可以随时加入新成员不用再设置所属组对共享文件进行查看修改。

Sticky:目录设置后,所有用户只能对自己创建的文件进行增删改查,无法对其他人的文件进行删除、移动、重命名等操作。

示例

[root@asus-a53s /]# ls -lh test.sh
-rwxr-xr-x. root root 12月 : test.sh
[root@asus-a53s /]# chmod test.sh
[root@asus-a53s /]# ls -lh test.sh
-rwsr-xr-x. root root 12月 : test.sh
注意:若是文件原有的权限位置没有执行权限,这里的s会变成S,这是在告诉你,文件没有执行权限!

隐藏权限

指的是用linux命令chattr命令设定的相关权限,这些权限一般情况下面用不得到,主要是用来做安全加固及特殊文件的处理时用的,下面我就讲下相关命令的使用。

设定隐藏权限——chattr

格式

chattr [-RV] [-+=AacDdijsSu] [-v version] files...

选项

-R:递归处理,将指定目录下的所有文件及子目录一并处理。
-V:显示详细过程有版本编号。
-v:设定文件或目录版本(version)。 + :在原有参数设定基础上,追加参数。
- :在原有参数设定基础上,移除参数。
= :更新为指定参数设定。 A:文件或目录的 atime (access time)不可被修改(modified), 可以有效预防例如手提电脑磁盘I/O错误的发生。
S:硬盘I/O同步选项,功能类似sync。例如:文件被删除,就真的被删除啦
a:即append,设定该参数后,只能向文件中添加数据,而不能删除,多用于服务器日志文 件安全,只有root才能设定这个属性。
i:设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容。i参数对于文件 系统的安全设置有很大帮助。
c:即compresse,设定文件是否经压缩后再存储。读取时需要经过自动解压操作。
d:即no dump,设定文件不能成为dump程序的备份目标。
j:即journal,设定此参数使得当通过mount参数:data=ordered 或者 data=writeback 挂载的文件系统,文件在写入时会先被记录(在journal中)。如果filesystem被设定参数为 data=journal,则该参数自动失效。
s:保密性地删除文件或目录,即硬盘空间被全部收回。
u:与s相反,当设定为u时,数据内容其实还存在磁盘中,可以用于undeletion.

查看隐藏权限——lsattr

选项

-R:递归列示目录及文件属性。
-V:显示程序版本号。
-a:显示所有文件属性,包括隐藏文件(.)、当时目录(./)及上层目录(../)。
-d:仅列示目录属性。
-l:(此参数目前没有任何作用)。
-v:显示文件或目录版本。

示例

实例一:不能删除
[root@asus-a53s ~]# lsattr test.sh
---------------- test.sh
[root@asus-a53s ~]# chattr +i test.sh
[root@asus-a53s ~]# rm -rf test.sh
rm: 无法删除"test.sh": 不允许的操作
[root@asus-a53s ~]# lsattr test.sh
----i----------- test.sh 实例二:只能添加,不能删除,不能减少或者修改
[root@asus-a53s ~]# lsattr test.sh
-----a---------- test.sh
[root@asus-a53s ~]# echo "test" >> test.sh
[root@asus-a53s ~]# echo "test2" > test.sh
-bash: test.sh: 不允许的操作

访问控制

什么是ACL

针对单一使用者、单一文件或者目录进行读写执行权限的设定的权限类型。

ACL针对的范围

使用者(u):可以针对使用者来设定权限
群组(g):可以针对属组来设定权限
其他人(o):可以针对其他人来设定权限
默认权限(m):可以针对在该目录下面新建文件或者目录时,规范新数据的权限

ACL的启动

[root@localhost~]#mount -o remount,acl /  ##临时生效
[root@localhost~]#sed -e '1 s/defaults/defaults,acl/' /etc/fstab ##永久生效
[root@localhost~]# mount –a –o remount 开启ACL规则,步骤如下:
临时开启:mount -o remount,acl 挂载内容
永久开启:在/etc/fstab文件中,指定内容的defautls内容后加入acl,用分号隔开,然后进行重新挂载

设定ACL规则

设定指定目录或文件的ACL规则——setfacl

格式

setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file ...

选项

-b:移除所有设定的ACL规则
-k:移除默认设定的ACL规则
-m:设定后续ACL参数
-x:删除后续ACL参数
-R:递归的对所有文件及目录进行操作
-d:设定默认的acl规则。
--restore=file:从文件恢复备份的acl规则(这些文件可由getfacl -R产生)。通过这种机制可以恢复整个目录树的acl规则。此参数不能和除--test以外的任何参数一同执行。
--test:测试模式,不会改变任何文件的acl规则,操作后的acl规格将被列出。
-L:跟踪符号链接,默认情况下只跟踪符号链接文件,跳过符号链接目录。
-P:跳过所有符号链接,包括符号链接文件。
-v:查看软件版本
-h:获取帮助信息

示例

实例一:
[root@asus-a53s ~]# mkdir test
[root@asus-a53s ~]# cd test
[root@asus-a53s test]# touch file1
[root@asus-a53s test]# chmod file1
[root@asus-a53s test]# getfacl file1
# file: file1 ##文件的名称
# owner: root ##文件的属主
# group: root ##文件的属组
user::rwx ##属主的权限
group::rwx ##属组的权限
other::rwx ##其他人的权限 [root@asus-a53s test]# setfacl -m u:user2:r file1 ##让user2用户对file1文件可读
[root@asus-a53s test]# ls -l file1
-rwxrwxrwx+ root root 12月 : file1
[root@asus-a53s test]# getfacl file1
# file: file1
# owner: root
# group: root
user::rwx
user:user2:r-- ##user2用户对文件的权限
group::rwx
mask::rwx
other::rwx 实例二:
[root@asus-a53s ~]# setfacl -m g:user2:rw test.sh
[root@asus-a53s ~]# getfacl test.sh
# file: test.sh
# owner: root
# group: root
user::rw-
group::r--
group:user2:rw- ##user2组对文件的权限(effective:r--)
mask::rw- ##使用者或群组所所设定的权限必须要存在于mask的权限
other::r—
注意:如果设定的使用者或者群组或者其他人不满足mask默认权限规则,则会将无效的权限去掉,只保留有效的权限,这个问题一定要想清楚! 实例三:
[root@asus-a53s ~]# setfacl -m m:x test.sh
[root@asus-a53s ~]# getfacl test.sh
# file: test.sh
# owner: root
# group: root
user::rwx
group::r-- #effective:---
group:user2:rw- #effective:---
mask::--x
other::r-x

查看ACL规则

查看指定目录或文件的ACL规则——getfacl

格式

getfacl [-aceEsRLPtpndvh] file...

选项

-a , --access:显示文件或目录的访问控制列表。
-d , --default:显示文件或目录的默认(缺省)的访问控制列表。
-c , --omit-header:不显示默认的访问控制列表。
-R , --recursive:操作递归到子目录。
-t , --tabular:使用列表输格式出ACL设置信息。
-n , --numeric:显示ACL信息中的用户和组的UID和GID。
-p , --absolute-names:

示例

实例一:
[root@asus-a53s ~]# getfacl test.sh ##getfacl对文件权限查看
# file: test.sh
# owner: root
# group: root
user::rwx
group::r--
group:user2:rw-
mask::rw-
other::rwx 实例二:
[root@localhost testdir]# getfacl -R ./dir/ > acl.txt ##从现有文件的ACL规则中进行备##份和恢复
[root@localhost testdir]# cat acl.txt
# file: dir/
# owner: root
# group: root
# flags: -s-
user::rwx
group::r-x
group:g1:rw-
mask::rwx
other::r-x
[root@localhost testdir]# setfacl -b -R ./dir/
[root@localhost testdir]# ll -d .
drwxr-xr-x. root root Aug : .
[root@localhost testdir]# ll -d ./dir
drwxr-sr-x. root root Aug : ./dir
[root@localhost testdir]# setfacl --restore=acl.txt
[root@localhost testdir]# ll -d ./dir
drwxrwsr-x+ root root Aug : ./dir

修改属主——chown

格式

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

选项

-R: 递归修改
–reference=FILE1 FILE2… 以file1做参考文件修改file2的属主属组
OWNER 只修改属主
OWNER:GROUP 同时修改属主属组
:GROUP 只修改属组,命令中的冒号可用.替换;

示例

[root@localhost cwn]# ll
total
-rw-r--r-- root root Jan : test.txt
[root@localhost cwn]# chown user1 test.txt
[root@localhost cwn]# ll test.txt
-rw-r--r-- user1 root Jan : test.txt
[root@localhost cwn]# chown :user2 test.txt
[root@localhost cwn]# ll test.txt
-rw-r--r-- user1 user2 Jan : test.txt
[root@localhost cwn]# ll -d .
drwxr-xr-x root root Jan : .
[root@localhost cwn]# chown -R root.root /root/cwn/
[root@localhost cwn]# ll test.txt
-rw-r--r-- root root Jan : test.txt

修改属组——chgrp

格式

chgrp[OPTION]… GROUP FILE…

选项

-R 递归
–reference=FILE1 FILE2… 以file1做参考文件修改file2的属组

示例

[root@localhost cwn]# ll test.txt
-rw-r--r-- root root Jan : test.txt
[root@localhost cwn]# chgrp user1 test.txt
[root@localhost cwn]# ll test.txt
-rw-r--r-- root user1 Jan : test.txt
[root@localhost cwn]# ll -d .
drwxr-xr-x root root Jan : .
[root@localhost cwn]# chgrp -R user3 /root/cwn
[root@localhost cwn]# ll -d .
drwxr-xr-x root user3 Jan : .
[root@localhost cwn]# ll test.txt
-rw-r--r-- root user3 Jan : test.txt

权限操作——chmod

格式

chmod[OPTION]… OCTAL-MODE FILE…
chmod[OPTION]… MODE[,MODE]… FILE…

选项

-R: 递归修改权限
–reference=RFILE FILE… 以file1做参考文件修改file2的权限
MODE:
修改一类用户的所有权限:
u= :属组的权限等于
g= :属组的权限等于
o= :其他人的权限等于
ug= :属主与属组的权限等于
a= :所有人的权限等于 修改一类用户某位或某些位权限:
u+ :属主添加指定权限
u- :属主减去指定权限
g+ :属组添加指定权限
g- :属组减去指定权限
o+ :其他人添加指定权限
o- :其他人减去指定权限
a+ :所有人添加指定权限
a-:所有人减去指定权限

示例

chmod u+wx,g-r,o=rx file
chmod -R g+rwx /testdir
chmod file
chmod o= file #取消其他用户对此文件的所有权限

设定umask值

什么是umask值?

答:控制用户默认创建的权限,那umask是怎么控制权限的呢?

比如:在我的系统中, umask的默认值是0022。 0022是个什么意思呢? 意思是说, 如果创建文件, 那么它的默认权限是664, 如果是创建目录, 那么它的权限是775。那这个是怎么算的呢?其实这里的0022就是指的被拿掉的权限。

文件默认创建权限(-rw-rw-rw-)-(-----w--w-)   ==> -rw-r--r--

目录默认创建权限(drwxrwxrwx)-(d----w--w-)   ==> drwxr-xr-x

示例

[root@asus-a53s ~]# umask

[root@asus-a53s ~]# umask -S
u=rwx,g=rx,o=rx

参考文档:https://www.cnblogs.com/jackyyou/p/5498083.html

Shell之用户与权限的更多相关文章

  1. 3-4 linux 用户及权限管理

    1. 安全上下文(secure context) 取决于资源权限和进程权限 分为三种:r:读,w:写,x:执行 每一类用户都有三个权限 文件: r:可读,可以使用类似cat等命令来查看文件内容 w:可 ...

  2. Linux学习笔记1_用户和权限

    自从我大微软终于放下身段,决定给开源社区一个迟来的拥抱,追随多年的拥趸们像是突然得到了女神的垂青,各种茫然失措.痛哭流涕.欢欣鼓舞,纷纷唱了起来:“等了好久终于等到今天,梦了好久终于把梦实现……”唱完 ...

  3. 《The Linux Command Line》 读书笔记04 Linux用户以及权限相关命令

    Linux用户以及权限相关命令 查看身份 id:Display user identity. 这个命令的输出会显示uid,gid和用户所属的组. uid即user ID,这是账户创建时被赋予的. gi ...

  4. linux 添加用户、权限

    # useradd –d /usr/sam -m sam 此命令创建了一个用户sam,其中-d和-m选项用来为登录名sam产生一个主目录/usr/sam(/usr为默认的用户主目录所在的父目录). 假 ...

  5. mongoDB之用户及权限设置

    之前用MongoDB没有设置用户和权限,一直都是本机应用程序连接MongoDB.在服务器上部署后对外没有开数据库连接端口,本机应用程序连接再开放应用程序端口供外部访问. 我部署的环境是ubuntu 1 ...

  6. 浅析Linux系统下用户与权限管理

    Linux作为一种多用户多任务操作系统,在日常的使用中不可避免地要划分出一个角色的概念来管理和使用计算机,这个角色与每一个计算机使用者关联,在Linux中称这种角色为用户.而在每一个用户使用计算机的过 ...

  7. 【linux相识相知】用户及权限管理

    linux系统是多用户(Multi-users)和多任务(Multi-tasks)的,这样的目的是为了一台linux主机可以给很多用户提供服务同时运行多种服务,但是我们是怎么区分每个用户呢?作为一个管 ...

  8. linux用户及权限管理

    [文件管理.管道.用户及组管理.用户及权限管理]\用户及组管理 用户与组管理 Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这 ...

  9. useradd新建用户和权限分配

    场景:在搭建Ftp服务器时候,需要新建ftp用户,其实新建的ftp用户和Linux中root新建的用户一样,只是需要了解新建用户时候的相关规则. 1 解决新建用户缺少配置文件 1.1 新建用户 指定目 ...

随机推荐

  1. ML基础——搜索引擎与图书管理,百度与李彦宏

    本文始发于个人公众号:TechFlow 谈及机器学习,大家想必会有许多联想,比如最近火热的人工智能,再比如战胜李世石的AlphaGo,甚至还会有人联想起骇客帝国或者是机械公敌等经典机器人电影. 但实际 ...

  2. MySQL数据库性能优化:表、索引、SQL等

    一.MySQL 数据库性能优化之SQL优化 注:这篇文章是以 MySQL 为背景,很多内容同时适用于其他关系型数据库,需要有一些索引知识为基础 优化目标 减少 IO 次数IO永远是数据库最容易瓶颈的地 ...

  3. DEVOPS技术实践_01:jenkins集成平台

    一.准备环境 准备三台机器 角色 IP地址 用户名 密码 jenkins-master   172.25.254.130    admin   meiyoumima gitlab 172.25.254 ...

  4. 【转载】你不知道的 console,让 JS 调试更简单

    对于前端工程师,肯定不会对console陌生,但是,又能深入了解多少呢? Chrome控制台-开发者工具 windows按F12, MAC按Command + Option + C或Command + ...

  5. $loj10156/$洛谷$2016$ 战略游戏 树形$DP$

    洛谷loj Desription Bob 喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的方法.现在他有个问题. 现在他有座古城堡,古城堡的路形成一棵树.他要在这棵树的节点上放置最少数 ...

  6. win10纯净版安装及其常用软件集锦(2020新年湘岳阳万江波整理)

    win10纯净版安装及其常用软件集锦 1.安装win10纯净版:链接:https://pan.baidu.com/s/1L9yl-LNxxDQbEN_TGswzcA 提取码:u0pt 2.安装WPS2 ...

  7. ECMAScript新语法、特性总结

    前言 从2015年的ES6开始,JavaScript的语言标准每年都在更新,其中尤其以ES6的力度之大,到现在ES10已经发布,这里总结一下新语法. 参考:阮一峰 ECMAScript 6 教程 .E ...

  8. 2017 ACM-ICPC亚洲区域赛北京站J题 Pangu and Stones 题解 区间DP

    题目链接:http://www.hihocoder.com/problemset/problem/1636 题目描述 在中国古代神话中,盘古是时间第一个人并且开天辟地,它从混沌中醒来并把混沌分为天地. ...

  9. 1034 有理数四则运算 (20 分)C语言

    题目描述 本题要求编写程序,计算2个有理数的和.差.积.商. 输入描述: 输入在一行中按照"a1/b1 a2/b2"的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整 ...

  10. 10.Python中print函数中中逗号和加号的区别

    先看看print中逗号和加号分别打印出来的效果.. 这里以Python3为例 1 print("hello" + "world") helloworld 1 p ...