首页 > 代码库 > 手动代替自动化之系统用户权限篇

手动代替自动化之系统用户权限篇

用户管理

  • 用户的创建删除管理

    • useradd:创建用户相关
    • userdel:删除用户
    • usermod:管理用户
    • passwd:用户密码相关
  • 用户组的创建删除管理

    • groupadd: 用来添加组相关
    • groupmod: 用来管理组相关
    • groupdel: 用来删除组相关
  • 权限管理

    • 文件/目录的三种权限
    • 两种权限设置方法
  • 文件管理

    • make值
    • 文件系统上的特殊权限
    • ACL权限

上述就是本文的三个模块了


下面聊些注意事项(小伙子作死不算啊)

  • 注意 最好不要手工改文件,能用命令的就用命令防止出错。
  • root爹权限大于一切不要随意操作有去无回的。
  • 做修改删除的时候考虑下用户有没有什么相关数据需要保留
  • 生产环境的服务器密码要注意复杂性和周期更换
  • 生产环境里的服务器用户不要给太多用户,不方便管理。
  • 备份才是运维应该经常干的,好的运维能做好提前防范。

上面的一波逼吹完我们聊些概念,尽管无聊没多大作用,但至少得有个概念吧!

linux用户的两种类型

管理员:root ,(uid 是0)

普通用户:1-65535(uid)

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

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

登录用户:500+,1000+(centos7

组group

linux组:

管理员组:root 0

普通组:

系统组:1-499,1-999(centos7)(GID)

普通组:500+,1000+(centos7(GID)

linux安全上下文

运行中的程序,在系统中我们称为程(process)

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

root:/bin/cat

nuanyang:/bin/cat

进程所能够访问资源的权限取决于进程的运行者的身份。

linux组的类别:

用户的主要组(primary group):

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

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

用户的附加组(supplementary group):

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

用户和组的配置文件:

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

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

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

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

    例:nuanyang:x:503:503:1:/home/nuanyang: /bin/bash 用户名 密码 uid gid 家目录 完整的描述信息 使用的shell

#现在的版本密码在passwd这个文件用X代替已经不存在这个文件里了,如果想跟centOS6以前一样使用这个命令:pwunconv 他会取消shadow的内容 取消pwunconv的方法是 pwconv

#添加描述信息 chfn wang

#finger命令用于查找并显示用户信息

#指定用户shell办法 chsh -s /sbin/nologin nuanyang 指定这个shell后这个用户不能登录只能用来执行一些命令

  • cat /etc/shadow #:存储有关本地用户的信息

例:

nuanyang:$6$g04To9oV$uCyHJ4I/UCZ18cZShtAb0mONMypQqK4pty7Tk1mf/UeqKG8wj1ccb6wjv3KCIj3vZDujus2K/NQY3o2VPzU///:17249:0:99999:7:::
用户名 加密的算法 加盐
从1970年1月1日起到密码最近一次被更改的时间

密码再过几天可以被变更(默认99999)

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

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

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

密码前加!号等于锁定账号,限制登录,停止调用系统资源的功能。 解锁 usermod -W 用户名,!!可以加多次,你加多少次别人解锁就要用多少次。centos 6以上就不能这么解锁了

  • cat /etc/group #组配置文件
例:nuanyang:x:503:  如果需要填加组的话:nuanyang:x:503:alex,seven
#:这会让 alex,和seven这两个用户都多了一个nuanyang这个组

cat /etc/gshadow #组管理配置文件

nuanyang:!::
nuanyang:  !              :                  :
组名		   组密码	    组管理员    预留的组成员

用户相关

用户创建:useradd 用户的一些附带信息记录在 /etc/default/useradd 家目录存在的一些配置文件都是从 /etc/skel 这个文件中复制来的。

面试题:如果希望以后创建的用户都有某个共同文件,可以将文件移动到skel这个目录下

useradd [options] login

-u: 指定UID 需记住

例:useradd - u 200 text2

-o:不检查UID

-G:指定主组

-c:用户的注释信息

-d:指定家目录

例:useradd -d /tmp/home text3

#创建指定位置的家目录,然后将新建用户指定为这个家目录

-s:指定shell (有需要创建服务账号的时候都会指定 nologin shell)

例: useradd -s /sbin/noligin text3

-G:指定附加组

-N:不指定组(会默认放到users这个组)

-r :创建系统用户(一般也是为了一些服务所创建)(家目录不会自动生成)(ID号是系统ID预留号)

例:useradd -r -s /sbin/nologin mysql

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

/etc/default/useradd   #:该文件主要是定义默认家目录、环境配置文件目录、登入执行首个程序等等
/etc/skel*     	#:用户创建的后的配置文件都是默认从这里复制过去的,
/etc/login.defs  #:是设置用户帐号限制的文件。该文件里的配置对root用户无效。如果/etc/shadow文件里有相同的选项,则以/etc/shadow里的文件为准 
/etc/shadow配置优先级高于/etc/login.defs

批量创建用户:newusers

#:配置文件和邮箱没生成 邮箱位置 /var/spool/mail/ 
例:nano user.txt
zhaoritian::x:2000:2000:/home/zhaoritian:/bin/bash
yeliangchen:x:3000:3000:/home/yeliangchne:/bin/csh  

#:newusers user.txt 格式和/etc/passwd 相同   以后生产估摸也用不到

批量修改密码 chpasswd

nano pass.txt

例:zhaoritian:centos
yeliangchen:nuanyang
cat pass.txt | chpasswd

用户属性修改: usermod [OPTION] LOGIN

-u UID:新UID
-g GID:新基本组  (会覆盖原本的附加组,如果不想被覆盖加-a选项)
例:root@localhost ~]# usermod -G bin nuanyang
[root@localhost ~]# groups nuaynag    #:查询用户组例有哪些用户
nuanyang : nuanyang bin
[root@localhost ~]# usermod -aG gentoo,harry nuanyang
[root@localhost ~]# groups nuayang
nuanyang : nuanyang bin gentoo harry
 例:usermod -g song -l newtom
  #:删除用户组:usermod -G " " nuanyang   
  例二:usermod -G nuanyang nuanyang       #可能面试的题
-d:新家目录不会自动创建,原家目录中的文件不会同时移动至新的家目录:若要创建新家目录					  并移动原家数据,同时使用-m选项。
         例:usermod -d /apps/home -m nuanyang
-l:改用户名(其他信息不会改变)
-L:锁定用户,在/etc/shadow 密码栏中增进!
-U:unlock指定用户,将/etc/shadow 密码栏中的!拿掉

userdel 删除用户

[option]...login      (登录的用户不能删除)(用户组有其他用户的不会删除组,只会删除自己)
   
    -r:删除用户家目录  (删除的时候要注意,有的时候用户目录里有一些数据很重要,删除要注意有没有数据需要备份)

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

su [option] [-] [user[args...]]
切换用户的方式:
su username:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录
su -username:登录式切换,会读取目标用户的配置文件,切换至家目录,完全切换
root su 至其他用户无须密码:非root用户切换时需要密码
换个身份执行命令:
su [-] username -c ‘command‘
选项:-l --login
su -l username 相当于su - username
#:和开个终端登录的区别,一旦用户被锁定,切换用户还能使用,开个终端登录的。
#:  - 登录式切换 和非登录式的切换看场景需求,如果你需要在当前目录操作完全可以临时切换

设置密码:passwd

passwd [OPTIONS]  UserName:修改指定用户的密码,仅root用户权限
passwd:修改自己的密码
常用选项:
-i:锁定指定用户 (会加两个!!)
-u:解锁指定用户
-e:强制用户下次登录修改密码
-n: mindays:指定最短使用期限
-x:maxdays:最大使用期限
-w: warndays:提前多少天开始警告
-i inactivedays:非活动期限
--stdin:从标准输入接收用户密码
例:echo “passwd” | passwd --stdin USERNAME
一般用于脚本

**修改用户密码策略:chage

chage [OPTION]...LOGIN  不常用**

-d:上一次更改的日期。
-E:账号到期的日期。过来这天,此账号将不可用。
-m:密码可更改的最小天数。为零时 代表任何时候都可以更改密码。
-M:密码保持有效的最大天数。
-W:用户密码到期前,提前收到警告信息的天数。
-I:例出当前的设置。由非特权用户来确定他们的密码或账号何时过期。
实例:
chage -d 0 tom 下一次登录强制重设密码
chage -m 0 -M 42 -W 14 -I 7 tom
chage -E 2016-09-10 tom

用户组相关

创建组:groupadd

groupadd [option]...group_name
    -g GID:指定GID号: [GID_MIN,GID_MAX]
    -r :创建系统组(创建为系统服务的账号时用的命令)
centos 6:ID<500
centos 7:ID<1000

修改和删除组 组属性修改: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,...:设置由管理权限的用户列表

groupname:更改和查看组成员

groupmems [options] [action]
options:
    -g,--group groupname 更改为指定组(只有root)
Actions:
    -a:--add username	指定用户加入组
    -d:--delete username	从组中删除用户
    -p:--purge			从组中删除所有成员
    -l:--list				显示组成员列表


用户加入附加组
usermod -aG groupname username
gpasswd -a username groupname
groupmems -a username -g groupname

一些和用户和组相关的命令

id:用来查询用户的信息 (uid,gid,组)
格式:id 用户名
-u:UID
-g:GID
-G:Groups   #查所属的组
-n:Name      #要配合其他的选项来显示对应的名字
例:echo $?      0是成功  其他都是失败  


用户相关的其他命令

chfn 指定个人信息

chsh 指定shell

finger  查看描述信息

例:finger 用户名


groups [option],[username]...查看用户所属组列表
newgrp 组名   ( # 临时切换主组)  (#从当前组切换到指定组)(如果本身不是指定组的成员没设定口令不能切换除非将etc下的group配置文件和gshadow配置文件全部修改)
#(用命令修改可以全部修改 usermod -aG nuanyang text   #将text添加到nuanyang这个组)

pwck:  # 用来验证系统认证文件/etc/passwd和/etc/shadow的内容和格式的完整性。
[root@localhost ~]# pwck
用户“adm”:目录 /var/adm 不存在
用户“uucp”:目录 /var/spool/uucp 不存在

grpck:grpck命令用于验证组文件的完整性,在验证之前,需要先锁定(lock)组文件/etc/group和/etc/shadow。
[root@localhost ~]# grpck
‘nuanyang‘ is a member of the ‘text‘ group in /etc/group but not in /etc/gshadow
#提示用户在group这个配置文件中修改了,但是gshadow未修改。提示修改的时候要同步

权限开言

聊权限重要啊,最重要的就是看我一本正经的吹牛逼

  • 对于生产环境中的服务器权限是很重要的,因为总有2B的开发想害朕。
  • 能用普通用户操作的就用普通用户操作
  • 生产环境和测试开发环境一定隔离开

文件/文件夹的三种权限 对目录的含义: rx权限一般一起给

无读:无法看目录内的文件列表,可以cd,可读目录内的文件内容,列表看不了

写:写并没有什么卵用

无执行:不可以cd,不可读目录内的文件内容,文件可以看到

目录的执行权限是基本权限,通常会有

增删 删:决定文件删除的不是文件的权限而是所在的目录的权限,普通用户无法删除目录,哪怕目录对所有人开放所有权限,因为你对上一级目录没有权限,但是你可以修改内容

权限小知识: 任何用户无执行权限,将无法执行(包括root,但只要有一个用户有执行权限root也能用)

改变文件所有者 chown、所有组、chgrp

chown:普通用户无权限,不能更改所有者等
chown: 用户名 文件名   #:这就重新指定了用户所有者

    -R:递归修改    慎用修改的东西太多(可以配合X使用。)
例chown -R nuanyang.zheye dir1
例:[root@localhost text]# ll f1
-rw-r--r-- 1 root root 0 3月  25 13:17 f1
[root@localhost text]# chmod --reference=/etc/shadow f1
[root@localhost text]# ll f1
---------- 1 root root 0 3月  25 13:16 f1 
   例:chown nuanyang test1
   例:chown nuanyang:zheye test1
   chown nuanyang.zheye test1
   chown nuanyang: test1      #如果只有用户组和冒号会把所有组的用户全部添加进去
chgrp: 普通用户属于的组可以执行
chgrp  用户组 文件名   #:这就修改了文件的所在组
修改文件的属组:chgrp
chgrp [option]...group file...
chgrp [option]... --reference=REILE FILE...
    -R 递归

两种权限设置法

修改文件权限:chmod

chmod [option]...octal-mode file...
-R:递归修改权限
chmod [option]...MODE[,MODE]...FILE...
MODE:
修改一类用的所有权限:
u= g= o= ug= a= u= ,g=
修改一类用户某位或某些位权限
u+ u- g+ g- o+ o- a+ a- + -
chmode[OPTION]... --reference=RFILE FILE...
参考RFILE文件的权限,将FILE的修改为同RFILE

数字法: rwxr----x r4 w2 x1

chmod 741 text

这个数字按二进制算r=4 w=2 x=1

三个数字加起来等于上面的741

chmod 模式法

chomd who opt per 谁 做什么操作 权限 文件

who:u,所有者 g,所有组 o,其他 all,全部

opt:+ - = per r w x
X:表示只给目录加执行权限(通常配合-R使用,还有一种特殊情况如果文件本身所有者拥有执行权限,那后面的所有用户组都会拥有执行权限)

在linux中如果给所有者只读权限,但他所在的组有全部权限,所有者也只能执行只读权限,因为linx会从头开始读取权限,先读所有者在读所有组,后读其他。如果想对该文件继续操作需要重新给自己加权限,因为自己是所有者所以可以对这个文件随意操作

1:
chmod u=,g=r,o=rw test
[root@localhost ~]# chmod u=,g=r,o=rw 123
[root@localhost ~]# ls -l 123
----r--rw- 1 root root 0 3月  25 11:30 123 
例2: 
[root@localhost ~]# ls -l 123
-rw-r--r-- 1 root root 0 3月  25 11:30 123
[root@localhost ~]# chmod a= 123
[root@localhost ~]# ls -l 123
---------- 1 root root 0 3月  25 11:30 123

umake值

新建文件和目录的默认权限
umask值 可以用来保留在创建文权限
新建FILE权限:666-umask	
如果所得结果某位存在执行(奇数)权限,则将其权限+1
新建DIR权限:777-umask
非特权用户umask是 002
root的umask 是 002
umask:查看
umask #:设定
umask 002
umask -S 模式方式显示    #显示了目录的权限
umask -p 输出可被调用
umask>>.bashrc
全局设置: /etc/bashrc 用户设置:~/.bashrc

初步理解umask
umask+default=file666/dir777    #如果是文件拿666计算如果是文件夹拿777计算
进一步:
默认权限:
目录的默认权限: 777-Umask
文件的默认权限:1、666-Umask 2、检查结果,有奇数加1,偶数不懂 

umask的值和你新建文件去相加就等于完整权限
644
022
文件或者文件夹减去umask值 就等于文件或者文件夹的权限
如果想固定umake值可以将它写入.bashrc文件中(修改家目录下的文件可以只影响自己)
..bashrc   让配置文件生效
例:umask 032

例:umask u=rw,g=r,o=
0137 
umask本质意义:
对位将最大权限的Umask的相应位的权限去除,从而得出默认权限
umask为0的位,不去除
umask为1的位,去除
umask	
022
110	110	110
000	011	010                #这里的umask值想去掉上面的数但是没的去所以是0
110	100	100		      #拿mask的值减去上面的值,上面为0就是0
666
022
644

例:
[root@localhost text]# umask 015 					110110110	#文件的值
[root@localhost text]# touch c						000001101      #umask的值
[root@localhost text]# ll c							1101100 01
-rw-rw--w- 1 root root 0 3月  25 14:55 c
[root@localhost text]# 666-015=651=662     偶数保留 奇数加1

linux文件系统上的特殊权限

SUID,SGID,Sticky

三种常用权限:r,w,x	user,group,other
安全上下文
前提:进程有属主和属组:文件有属主和属组
1)任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行权限。
2)启动为进程之后,其进程的属主为发起者,进程的属组为发起者的所属的组
3)进程访问文件是的权限,取决于进程的发起者
a)进程的发起者,同文件的属主:则应用文件属主权限
b)进程的发起者,属于文件属组:则应用文件属组权限
c)应用文件“其它”权限

SUID   二进制文件   权限代表数字4 
SUID只能作用在文件上(二进制可执行程序有效),不能作用在文本上,包括脚本,目录上无意义
当一个用户在运行的时候他会查看一个文件是否具有SUID权限如果具有就将身份临时切换到所有者权限去执行

ll `which passwd`    #查看文件是否具有SUID权限
[root@localhost ~]# ll `which passwd`
-rwsr-xr-x. 1 root root 30768 Nov 24  2015 /usr/bin/passwd

添加、取消SUID权限
[root@localhost ~]# chmod u+s /bin/cat     
[root@localhost ~]# chown root /bin/cat
数字法4755
chomd 4755 /bin/nano
chmod 0755 /bin/nano

SGID   组的特殊权限 文件和目录  权限代表数字2    模式法代表字母s
作用于目录上,目录内新建文件的所属组自动继承目录的所
我们假设种状态:如果A组拥有一个二进制程序的权限,这个二进制权限拥有SGID权限。当A组下有一个文件A组拥有这个文件的全部权限,其他人没有任何权限,但这个二进制程序因为有SGID权限,其他人就可以利用这个二进制程序对A组文件进行操作


Sticky 		权限代表数字1   模式法代表字母t
作用在目录上,目录内的文件只有所有者(root)能删除
设置权限导致自己能删除自己的但是不能删除别人的

访问控制列表ACL

ACL:Access Control List(访问控制列表),实现灵活的权限管理
除了文件的所有者,所属组和其他人,可以对更多的用户设置权限
centos 7 默认创建的xfs和ext4文件系统具有ACL功能
centos 7之前版本 ,默认手工创建的ext4文件系统无ACL功能,需手动增加
tune2fs -o acl /dev/sdb1
mount -o acl .dev.sdb1 /mnt.test
ACL生效顺序:所有者,自定义用户,自定义组,其他人

查看文件是否支持ACL  tune2fs -l /dev/sda3
当设置ACL后权限9位那里的组已经不是原来的含义了

设置ACL权限:
setfacl -m u:              song:	r 	f2
  什么用户    用户   权限	文件
[root@localhost test]# setfacl -m u:song:rwx test1
[root@localhost test]# su song
[song@localhost test]$ echo 1111 >>test1
[song@localhost test]$ ll test1 bc
-rwxrwx---+ 1 root root 5 Mar 29 04:07 test1

查看文件的ACL权限
getfacl f2

为多用户或者组的文件和目录赋予访问权限rwx
mount -o acl /directory
getfacl file |directory  		查看目录的ACL权限
setfacl -m u:wang:rwx file|directory		对用户设置ACL权限   
setfacl -Rm g:sales:rwX directory		对组递归设置ACL权限
setfacl -M file.acl file |directory		事先写好ACL权限方便别的文件导入和设置acl权限写法一样
setfacl -m g:salesgroup:rw file | directory 	对组
setfacl -m d:u:wang:rx directory	设置目录下的权限可以继承,目录本身没设置这个权限	
setfacl -x u:wang file |direcetory		删除ACL权限
setfacl -X file.acl directory

ACL文件上的group权限是mask值,而非传统的组权限    (mask:r  限高线,一些用户不能超过这个权限如,所属组,自定义用户,自定义组)(自定义用户,自定义组,拥有组的最大权限)
getfacl	可看到特殊权限:flags
通过ACL赋予目录默认X权限,目录内文件也不会继承x权限
base ACL不能删除
setfacl -k dir 删除默认ACL权限
setfacl -b file1清除指定文件所有ACL权限
getfacl file1 | setfacl --set-file=- file2 复制file1的acl权限给file2

备份和恢复ACL
主要的文件操作命令CP和MV都支持ACL,只是cp命令需要加上-p参数。但是tar等常见的备份工具是不会保留目录和文件的ACL信息
getfacl -R /tmp/dir1 > cal.txt
setfacl -R -b /tmp/dir1
setfacl -R --set-file=acl.txt /tmp/dir1
setfacl --restore acl.txt
getfacl -R /tmp/dir1

手动代替自动化之系统用户权限篇