【Linux命令行】Linux文件权限

1 Linux的安全性

  • 用户权限根据用户UID来跟踪
  • 登录系统用的是用户名
  • 登录名会关联一个密码
  • 管理用户账户用的是特定的文件和工具

1.1 /etc/passwd文件

$cat /etc/passwd| head -3
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

各字段之间的含义
root: x: 0: 0: root: /root: /bin/bash
登录用户名 用户密码 用户账户的UID 用户账户的GID 用户账户的文本描述 用户HOME目录位置 用户默认的shell

  • root账户的UID为0
  • 系统账户的UID预留500以下
  • /etc/passwd里的密码都被设成了x,那么用户的密码保存在/etc/shadow文件中

1.2 /etc/shadow文件

  • 只有root用户才可以访问
  • shadow是影子的意思,又称为影子文件
#  cat /etc/shadow
root:$6$1S68IhLLmKxroyp$1Tsozb2s9GyI7c63ojPrUhP9g9CR4Pq68Dd31IvXXsv6MR7VrYIS9EZ.CmEMVkGmQKv2aHnMTQG4pQjRpJkUS.:18026:0:99999:7:::
bin:*:17110:0:99999:7:::
daemon:*:17110:0:99999:7:::
adm:!*:17110:0:99999:7:::
lp:!*:17110:0:99999:7:::
sync:!*:17110:0:99999:7:::
shutdown:!*:17110:0:99999:7:: 

共9个字段

  • 与/etc/passwd里对应的用户名一致的登录名
  • 加密后的密码
  • 自上次修改密码后过去的天数(从1970年1月1日开始算起)
  • 多少天后才能更改密码
  • 多少天后必须更改密码
  • 密码过期前多少天提醒用户更改密码(默认7天)
  • 密码过期后多少天禁用用户账户
  • 用户账户被禁用的日期(自1970年到当天来计算)
  • 预留字段给将来使用

重点说下加密密码:
密码采用的是SHA512散列加密算法,原来采用的是MD5或者DES算法

忘记密码怎么办?
1、忘记普通用户的密码,通过root来改变,它可以重新指定新的密码,不需要你原来的密码,使用passwd命令就可以
2、忘记root密码,重启进入单用户模式,系统会提供root权限的bash接口,可以用passwd来更改密码;也可以通过挂载根目录,修改 /etc/shadow,将账户的 root 密码清空的方法,此方式可使用 root 无法密码即可登陆,建议登陆后使用 passwd 命令配置 root 密码。

-所有伪用户的密码都是 “!!” 或 “*”,代表没有密码是不能登录的。当然,新创建的用户如果不设定密码,那么它的密码项也是 “!!”,代表这个用户没有密码,不能登录

1.3 添加用户

1.3.1 默认值

  • useradd命令使用系统的默认值以及命令行参数来设置用户账户。系统默认值设置在/etc/default/useradd文件中
    查看默认值
  • 通过/usr/sbin/useradd -D 命令查看默认值
#  /usr/sbin/useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
  • 新用户默认添加到GID位100的公共组
  • 用户的HOME目录存在/home中
  • 新用户的密码在过期后不会被禁用
  • 新用户没有设置过期日期
  • 新用户的默认shell是bash shell
  • 系统会将/etc/skel目录下的内容复制到HOME目录下
  • 系统在mail目录下创建用于接收邮件的文件

/etc/skel文件是一个用户HOME模板,里面存放了标准启动文件,当执行useradd命令时,会把/etc/skel
文件下的文件复制到HOME目录下,用户的权限都使用/etc/default/useradd里的默认值

#  useradd dj
#  cat /etc/passwd| grep dj
dj:x:1027:1027::/home/dj:/bin/bash
#  cat /etc/shadow| grep dj
dj:!!:18371:0:90:7:::

1.3.2 新建的同时修改默认值

创建新用户的同时改变默认值。可以使用命令行参数
在这里插入图片描述
在这里插入图片描述

1.4 修改用户

用户包含哪些信息,那么提供了几种工具来修改用户的信息

  • usermod 修改用户账户字段
  • passwd 修改已有用户密码
  • chpasswd 从文件中读取登录名密码时,更新密码
  • chage 修改密码的过期日期
  • chfn 修改用户账户的备注信息
  • chsh 修改用户账户默认的shell

1、usermod命令
修改用户这边的参数 和 新增用户同时修改默认值的参数基本一样
比较强大,可以修改/etc/passwd里大部分字段
用户名:用户密码:UID:GID :文本描述:HOME目录:默认shell
-l -p -g -c -d -s

除此之外,还有
-L 锁定用户
-U 解锁用户

2、passwd和chpasswd

新建用户、设置密码、查看/etc/shadow文件、删除用户

#  useradd dj 
#  cat /etc/passwd| grep  dj
dj:x:1027:1027::/home/dj:/bin/bash
#  cat /etc/shadow | grep  dj
dj:!!:18371:0:90:7:::
#  passwd dj
Changing password for user dj.
New password: 
BAD PASSWORD: it is too simplistic/systematic
BAD PASSWORD: is too simple
Retype new password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
Sorry, passwords do not match.
New password: 
BAD PASSWORD: The password fails the dictionary check - it is too simplistic/systematic
Retype new password: 
passwd: all authentication tokens updated successfully.
#  cat /etc/shadow | grep  dj
dj:$6$AYknVFv5$E.lTDKXE1h8avTevGomkqH7Q6JTzUmkXEyrEVJjZ.OYeHoVkJYZVtEzDDTAnX4b.HsmfvORcO8vKXTFAX2XNz/:18371:0:90:7:::
、#  userdel -r   dj
#  cat /etc/shadow | grep  dj

使用chpasswd可以批量更改密码
chpasswd命令能从
标准输入自动读取登录名和密码对(由冒号分割)列表,给密码加密,然后为用户账户设置。你
也可以用重定向命令来将含有userid:passwd对的文件重定向给该命令。

# chpasswd < users.txt
#

3、chsh、chfn、chage
chage用来管理账户的有效期
在这里插入图片描述

1.5 删除用户

  • userdel只删除 /etc/passwd下的用户信息,不删除系统中属于该账户的任何文件
  • 使用-r参数可以删除用户的HOME目录和邮件目录
#  userdel dj
[root@bch300up03 ~]#  cd /home/dj   //删除用户后,用户所在的HOME目录以及文件还在,可以使用-r命令删除,谨慎使用
[root@bch300up03 /home/dj]#  ll    
total 0
-rw-r--r-- 1 1027 1027 0 Apr 19 11:12 test.txt

#  cat /etc/passwd| grep   dj    //删除用户后,/etc/passwd文件下的用户信息已经删除

2 使用Linux组

组信息存在系统文件/etc/group文件中

[root@dmtest10 ~]#  cat /etc/group 
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:

组名:组密码:GID:属于该组的用户列表
注意:上面例子组里面没有用户列表,并不代表没有组成员,当用户在/etc/passwd文件中指定某个用户的某个组作为默认组时,那么此用户不会存在/etc/group列表中

2.1 创建新组

1、使用groupadd命令创建新组

[root@dmtest10 ~]#  groupadd newuser
[root@dmtest10 ~]#  cat /etc/group | grep newuser
newuser:x:1005:

创建的新组是没有用户的,groupadd没有提供将用户添加到组中的选项,可以使用usermod命令

2、添加一个用户到项目组里

[root@dmtest10 ~]#  usermod -G newuser new_user1
[root@dmtest10 ~]#  cat /etc/group | grep newuser
newuser:x:1005:new_user1

其中组newuser里显示了一个用户列表new_user1,但是此组还有一个用户是newuser,因用户newuser的默认组是newuser,所以用户newuser就不会存在组newuser列表中去了

3、替换用户的默认组
-G是把用户添加到组里,-g会改变添加用户的默认组,把加入的组当成默认组

[root@dmtest10 ~]#  useradd new_user3                          //添加用户new_user3
[root@dmtest10 ~]#  cat /etc/passwd | grep new_user3           //查看用户的默认组是new_user3
new_user3:x:1007:1008::/home/new_user3:/bin/bash
[root@dmtest10 ~]#  cat /etc/group | grep 1008
new_user3:x:1008:
[root@dmtest10 ~]#  usermod -g   newuser  new_user3             //把new_user3添加到组newuser里
[root@dmtest10 ~]#  cat /etc/passwd| grep  new_user3            //new_user3的默认组已经改成了new_user
new_user3:x:1007:1005::/home/new_user3:/bin/bash
[root@dmtest10 ~]#  cat  /etc/group | grep newuser           //因为new_user3的默认组是newuser,所以用户new_user3不在组列表中
newuser:x:1005:new_user1

2.2 修改组

groupmod
-g 修改组的GID
-n 修改组名
比如:
groupmod -n newuser newuser_2

2.3 删除组

groupdel

[root@dmtest10 ~]#  cat /etc/group|   grep grouptest
grouptest:x:1009:
[root@dmtest10 ~]#  groupdel grouptest
[root@dmtest10 ~]#  cat /etc/group|   grep grouptest

3 理解文件权限

3.1 使用文件权限符

ls -l

[oss4@dmtest10 ~]$ ls -l
total 24
drwxr-x--- 9 oss4 oss4 4096 Mar 25 10:24 apache-tomcat-8.5.42
drwxr-x--- 3 oss4 oss4 4096 Apr 20 14:34 backup
drwxr-x--- 7 oss4 oss4 4096 Dec 23 14:28 dm-node
drwxr-x--- 7 oss4 oss4 4096 Mar 24 16:17 dms-oss-analysis
drwxr-x--- 7 oss4 oss4 4096 Oct  6  2018 jdk1.8.0_191
drwxr-x--- 2 oss4 oss4 4096 Apr 21 07:06 log
-rw-r----- 1 oss4 oss4    0 Apr 21 10:45 test

第一列是对象类型
-文件
d目录
l链接
c字符设备
b块设备
n网络设备

三组编码,每组有3种访问权限
r可读
w可写
x可执行
-无权限

第一组:属主权限
第二组:属组权限
第三组:其他用户权限

3.2 默认文件权限

文件和目录有默认的权限,默认的权限来源于umask

[oss4@dmtest10 ~]$ umask
0027

0027其中第一位0代表粘着位,后面027代表umask的八进制,具体怎么计算不做详解
在这里插入图片描述

4 改变权限

4.1 改变权限

chmod 可以改变文件和目录的权限
chmod 760 newfile
[ugoa…][[±=][rwxXstugo…]

4.2 改变所属关系

chown
chown -R 递归改变子目录和文件的所属关心

5 共享文件

[root@dmtest10 ~]#  groupadd grouptest
[root@dmtest10 ~]#  mkdir  dirtest
[root@dmtest10 ~]#  ll
drwxr-x---  2 root root     4096 Apr 21 21:01 dirtest
[root@dmtest10 ~]#  chgrp  grouptest dirtest/
[root@dmtest10 ~]#  ll
drwxr-x---  2 root grouptest     4096 Apr 21 21:01 dirtest
[root@dmtest10 ~]#  chmod g+s   dirtest
[root@dmtest10 ~]#  ll
total 36892
drwxr-s---  2 root grouptest     4096 Apr 21 21:01 dirtest
[root@dmtest10 ~]#  cd dirtest
[root@dmtest10 ~/dirtest]#  touch test
[root@dmtest10 ~/dirtest]#  ll
total 0
-rw-r----- 1 root grouptest 0 Apr 21 21:03 test

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值