概述
用户与组
早期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:0:0:root:/root:/bin/bash
上述文件内容总共分为七段,用分号隔开,说明如下:
第一段:描述用户的名称
第二段:密码占位符,x表示该用户可以使用密码登录,密码文件是shadow,为空代表不密码;开头第一个字符是*的,表示系统停用账户。
第三段:代表用户的ID号,简称UID
第四段:代表用户的主组号,简称GID
第五段:用户描述信息,如:名称、姓名、电话等等;
第六段:宿主目录位置
第七段:默认命令解释程序
/etc/shadow配置的格式及说明
root:$6$B9wp3OvD$WRDtiyw5aSglmKfJ8Pu...Z4yfj4oT2NG.:17498:0:99999:7:::
上述文件内容总共分为八段,亦以分号隔开,说明如下:
第一段:用户名,需与/etc/passwd文件里面的用户名一致
第二段:加密的登录口令,如果为空,则表示无密码;
星号代表账号被锁定
双感叹号代表用户口令已过期
$6$开头内容表示密码用SHA-512加密
$1$表示用的SHA-1代加密的
$2$表示用Blowfish加密的
$5$表示用SHA-256加密的
第三段:最后一次修改时间,表示是从某个时刻起到用户最后一次修改口令的的天数。每个系统的时间起点对点可能不一样,例如在linux中这个起点时间是1970年1月1日。
第四段:最小时间间隔,表示两次修改口令之间的所需的最小天数。0表示可以随时修改
第五段:最大时间间隔,表示口令保持有效的最大天数。99999表示一直有效。
第六段:警告时间,表示的是从系统开始警告用户到用户密码正式失效之间的天数。
第七段:不活动时间,表示的是用户没有登录活动但账号仍能保持有效的最大天数。
第八段:失效时间,字段给出的是一个绝对的天数,如果使用了这个字段,那么就给出相应账号的生存期。期满后,该账号就不再是一个合法的账号,也就不能再用来登录了。
Linux组
组的分类
主组:用户必须属于主组,且用户只能有一个主组,一个组可以是多个用户的主组。不可以把用户从主组中删除。
基本组:如果没有指定用户组,创建用户的时候系统会默认同时创建一个和这个用户名同名的组,这个组就是基本组,不可以把用户从基本组中删除。基本组也叫私有组。
附加组:一个用户可以属于多个附加组,除了主组或者基本组之外的组都是附加组。用户是可以从附加组中被删除的。
组的配置
/etc/group:组的基本属性信息,可使用vigr命令编辑,可使用grpck校验格式,无效组等
/etc/gshadow:组密码及其相关属性,可使用grpck校验合适,无效组等
/etc/group配置的格式及说明
root:x:0:
上述文件内容总共分为四段,用分号隔开,最后一段应该没有内容,所以这里并没有显示。说明如下:
第一段:组名称
第二段:组口令占位符,如果相应的组加了密码,内容在gshadow中,一般是x
第三段:组ID,简称GID
第四段:组内用户列表,如果一个组中有N个成员,这里都会相应的显示
/etc/gshadow配置的格式及说明
root:$6$PLRAi/Z/svr$PRelPtvLuGJqvFG3D8fbjYHDho2RQUe93glO.::
上述文件内容总共分为四段,用分号隔开,说明如下:
第一段:组的名称,同/etc/group文件中的名字一致
第二段:加密的组口令,如果为空或者!,则表示无密码;
$6$开头内容表示密码用SHA-512加密
$1$表示用的SHA-1代加密的
$2$表示用Blowfish加密的
$5$表示用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 1003 -c "TestUser" -d /home/geek -s /bin/shgeek
[root@localhost~]# getent passwdgeek
geek:x:1003:1003:TestUser:/home/geek:/bin/sh[root@localhost~]# useradd sys -r -M -g 1001 -G root
[root@localhost~]# getent passwdsys
sys:x:498:1001::/home/sys:/bin/bash
[root@localhost~]# idsys
uid=498(sys) gid=1001(young) groups=1001(young),0(root)
[root@localhost~]# useradd -D #查看系统useradd命令的默认值
GROUP=100HOME=/home
INACTIVE=-1EXPIRE=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 passwduser1
user1:x:600:600::/home/user1:/bin/bash
[root@localhost~]# iduser1
uid=600(user1) gid=600(user1) groups=600(user1)
[root@localhost~]# usermod -u 700 -g user2 -aG bin,root -c 'linux' -d /none/user1 -s /bin/tsh -l linux user1
[root@localhost~]# getent passwdlinux
linux:x:700:601:linux:/none/user1:/bin/tsh
[root@localhost~]# idlinux
uid=700(linux) gid=601(user2) groups=601(user2),0(root),1(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]
注意:
passwd (修改自己的密码)
passwd USERNAME(修改其他用户的密码,root权限 )
选项
-l : 锁定用户,在/etc/passwd的密码前面加!!,-u : 解锁用户,在/etcpasswd的密码前!!取消-d : --delete,删除用户密码-e DATE : --expire,设定过期时间-i DAYS : 非活动时间-n days : 最短使用期限-x days : 最长使用期限-wdays : 警告期限--stdin : echo "PASSWD" | passwd --stdin root
示例
[root@localhost ~]# echo young | passwd --stdin geek
Changing passwordforuser 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 : Mar26, 2015Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change :-1Maximum number of days between password change :-1Number of days of warning before password expires :-1[root@DB-Server ~]#
实例二:设置mysql用户60天后密码过期,至少7天后才能修改密码,密码过期前7天开始收到告警信息。
[root@DB-Server ~]# chage -M 60 -m 7 -W 7mysql
You have new mailin /var/spool/mail/root
[root@DB-Server ~]# chage -l mysql
Last password change : Mar26, 2015Password expires : May25, 2015Password inactive : never
Account expires : never
Minimum number of days between password change :7Maximum number of days between password change :60Number of days of warning before password expires :7[root@DB-Server ~]#
clip_image001
实例三:强制新建用户第一次登陆时修改密码
[root@DB-Server home]# useradd test
[root@DB-Server home]# passwdtest
Changing passwordforuser test.
New UNIX password:
Retype new UNIX password:passwd: all authentication tokens updated successfully.
[root@DB-Server home]# chage -d 0test
You have new mailin /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 :0Maximum number of days between password change :99999Number of days of warning before password expires :7
修改用户命令解释器——chsh
chsh:命令用来更改当前用户的shell类型。
使用权限:所有使用者
使用案例
[user1@localhost~]$ chsh
Changing fihanging shellforuser1
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 shellforrocrocket.
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:500:500:rocrocket,China:/rocrocket/PSB/home:/bin/zsh
看!你可以发现输出内容的最后部分已经变成了/bin/zsh了!下次你重启的时候,linux就会读取这一命令来启动你的shell了! 好了,我要恢复正常工作,把shell修改会我熟悉的/bin/bash了!
[user@localhost~]$ chsh -s /bin/bash
Changing shellforrocrocket.
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 informationforroot.
Name [root]: young
Office []: geek
Office Phone []:010110110Home Phone []:0101101101Finger information changed.
查看个人信息——finger
[root@localhost ~]# finger root
Login: root Name: young
Directory:/root Shell: /bin/bash
Office: geek,010110110 Home Phone: 010-110-1101On since Sun Jan1 02:39 (CST) on pts/0 from 192.168.1.116No mail.
No Plan.
查看用户的基本属性——id
选项
-u: UID-g: GID-G: Groups-n: Name (与-u连用可现实名称)
示例
[root@localhost ~]# idgeek
uid=1003(geek) gid=1003(geek) groups=1003(geek)
[root@localhost~]# iduid=0(root) gid=0(root) groups=0(root)
[root@localhost~]# id -G0[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_DAYS99999#密码最大有效期
PASS_MIN_DAYS0#两次修改密码的最小间隔时间
PASS_MIN_LEN5#密码最小长度,对于root无效
PASS_WARN_AGE7#密码过期前多少天开始提示
UID_MIN500#用户ID的最小值
UID_MAX60000#用户ID的最大值
GID_MIN500#组ID的最小值
GID_MAX60000#组ID的最大值
#USERDEL_CMD/usr/sbin/userdel_local
#当删除用户的时候执行的脚本
CREATE_HOME yes
#使用useradd的时候是够创建用户目录
UMASK077USERGROUPS_ENAB yes
#用MD5加密密码
这里仅仅列出一部分,有其他的请自行man
创建组——groupadd
格式
groupadd [options] group
选项
-g : 指定GID号-r : 指定为一个系统组
示例
实例一:
[root@localhost~]# groupadd -g 700 -r CentOS
删除组——groupdel
[root@localhost ~]#groupdel test
注:当有用户将该用户组作为主组时,无法直接删除该用户组,必须先删除用户。
修改组属性——groupmod
格式
groupmod [options] GROUP
选项
-g : 修改GID号码-n : 修改组名称 (groupmod -n NEW_GROUP OLD_GROUP)
示例
[root@localhost ~]# groupmod -g 701 -n centos test #修改属性
[root@localhost~]# getentgroup centos
centos:x:701:
管理组成员与组密码——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~]# getentgroup admins
admins:x:1011:user1
实例二:设定组密码
[root@localhost~]# gpasswd admins
Changing the passwordforgroup admins
New Password:
Re-enter new password:
临时切换基本组——netgrp
格式
newgrp [-] [group]
- : 模拟用户登陆, 以实现重新初始化环境变量
示例
[root@localhost ~]# su -user3
[user3@localhost~]$ iduid=1009(user3) gid=1010(user3) groups=1010(user3)
[user3@localhost~]$ newgrp -admins
Password:
[user3@localhost~]$ iduid=1009(user3) gid=1011(admins) groups=1011(admins),1010(user3)
更改组成员——groupmems
格式
groupmems [options] [action]
选项
-g:更改为指定组(只有root可以使用)-a:指定用户加入组-d:从组中删除用户-p:从组中清除所有成员
示例
[root@localhost ~]# groupmems -a user3 -g admins
[root@localhost~]# iduser3
uid=1009(user3) gid=1010(user3) groups=1010(user3),1011(admins)
[root@localhost~]# groupmems -l -g admins
user1 user2 user3
[root@localhost~]# groupmems -p -g admins
[root@localhost~]# getentgroup admins
admins:x:1011:
查看用户的组信息——groups
示例
[root@localhost ~]# groupsuser1 #查看用户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. 2 root mail 4096 1月 12 03:44account
上述内容总共分为七段,第一段可以分为五段,所有讲解如下:
第一段:1. d:表示该文件类型为目录2. rwx:表示文件属主的权限大小3. r-x:表示文件属组的权限大小4. r-x:表示该文件的其他人权限大小5. .:注意,最后面还有一个点,这个代表该文件带有SElinux的安全上下文权限,且对应的文件类型的不同,所代表的含义也不一样;目录中带点,表示有SElinux继承权限县;目录中带加号,表示只有ACL规则,没有SElinux继承权限;文件中带点,表示有权限继承;若是文件中带加号,表示既有ACL规则,也有SElinux权限;什么都不带,表示不继承,也没有ACL规则;
第二段:数字代表文件或者目录所对应的关联文件,“2”代表该目录有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. 1 root root 31 12月 3 15:04 test.sh[root@asus-a53s /]# chmod 4755 test.sh[root@asus-a53s /]# ls -lh test.sh
-rwsr-xr-x. 1 root root 31 12月 3 15:04 test.sh注意:若是文件原有的权限位置没有执行权限,这里的s会变成S,这是在告诉你,文件没有执行权限!
隐藏权限
指的是用linux命令chattr命令设定的相关权限,这些权限一般情况下面用不得到,主要是用来做安全加固及特殊文件的处理时用的,下面我就讲下相关命令的使用。
设定隐藏权限——chattr
格式
chattr [-RV] [-+=AacDdijsSu] [-v version] files...
选项
-R:递归处理,将指定目录下的所有文件及子目录一并处理。-V:显示详细过程有版本编号。-v:设定文件或目录版本(version)。+:在原有参数设定基础上,追加参数。-:在原有参数设定基础上,移除参数。=:更新为指定参数设定。
A:文件或目录的 atime (accesstime)不可被修改(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 ~]# mkdirtest
[root@asus-a53s ~]# cd test
[root@asus-a53s test]# touchfile1
[root@asus-a53s test]# chmod 777file1
[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+ 1 root root 0 12月 3 19:00file1
[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]#catacl.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. 3 root root 4096 Aug 4 22:16.
[root@localhost testdir]# ll-d ./dirdrwxr-sr-x. 2 root root 4096 Aug 4 22:07 ./dir[root@localhost testdir]# setfacl--restore=acl.txt
[root@localhost testdir]# ll-d ./dirdrwxrwsr-x+ 2 root root 4096 Aug 4 22:07 ./dir
修改属主——chown
格式
chown[OPTION]… [OWNER][:[GROUP]] FILE…
选项
-R: 递归修改
–reference=FILE1 FILE2… 以file1做参考文件修改file2的属主属组
OWNER 只修改属主
OWNER:GROUP 同时修改属主属组
:GROUP 只修改属组,命令中的冒号可用.替换;
示例
[root@localhost cwn]# ll
total0
-rw-r--r-- 1 root root 0 Jan 1 06:30test.txt
[root@localhost cwn]#chownuser1 test.txt
[root@localhost cwn]# ll test.txt-rw-r--r-- 1 user1 root 0 Jan 1 06:30test.txt
[root@localhost cwn]#chown:user2 test.txt
[root@localhost cwn]# ll test.txt-rw-r--r-- 1 user1 user2 0 Jan 1 06:30test.txt
[root@localhost cwn]# ll-d .
drwxr-xr-x 2 root root 4096 Jan 1 06:30.
[root@localhost cwn]#chown -R root.root /root/cwn/[root@localhost cwn]# ll test.txt-rw-r--r-- 1 root root 0 Jan 1 06:30 test.txt
修改属组——chgrp
格式
chgrp[OPTION]… GROUP FILE…
选项
-R 递归
–reference=FILE1 FILE2… 以file1做参考文件修改file2的属组
示例
[root@localhost cwn]# ll test.txt-rw-r--r-- 1 root root 0 Jan 1 06:30test.txt
[root@localhost cwn]#chgrpuser1 test.txt
[root@localhost cwn]# ll test.txt-rw-r--r-- 1 root user1 0 Jan 1 06:30test.txt
[root@localhost cwn]# ll-d .
drwxr-xr-x 2 root root 4096 Jan 1 06:30.
[root@localhost cwn]#chgrp -R user3 /root/cwn
[root@localhost cwn]# ll-d .
drwxr-xr-x 2 root user3 4096 Jan 1 06:30.
[root@localhost cwn]# ll test.txt-rw-r--r-- 1 root user3 0 Jan 1 06:30 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 /testdirchmod 600 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 ~]# umask0022[root@asus-a53s ~]# umask -S
u=rwx,g=rx,o=rx
参考文档:https://www.cnblogs.com/jackyyou/p/5498083.html
最后
以上就是细心毛豆为你收集整理的MySQL写shell没有权限_Shell之用户与权限的全部内容,希望文章能够帮你解决MySQL写shell没有权限_Shell之用户与权限所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复