Liunx 文件权限node
[root@controller-0 ~]# ll -al heihei -rw-r--r--. 1 root root 0 Mar 3 07:39 heihei
第一列 -rw-r--r-- 表示文件的权限及类型。其中,第一个字符表明文件是 “目录/文件或连接文件等”,d 则是目录, l 是连接文件,- 是文件。
接下来,3 个为一组的字符表示文件/目录的执行权限,第一组表示文件所属用户的执行权限,第二组表示文件所属用户所在组的执行权限,第三组表示不在文件所属用户所在组的其它用户的执行权限。
r 表示可读,w 表示可写,x 表示可执行。算法
第二列表示有多少文件名链接到这个 i-node 中,对于 heihei 文件来讲就是 1 个文件名链接到 i-node 。
<关于 i-node 可看这里>shell
第三列表示当前文件的用户名。
第四列表示当前文件所属的用户组组名。
第五列表示文件大小。
第六列表示最新一次修改日期。
第七列表示文件名。centos
因此,文件 heihei 的全部者 root 对该文件具备可读可写权限,与 root 同属一个 用户组(root) 的用户对该文件具备可读权限,非 root 用户组的用户也具备可读权限。bash
Liunx 目录权限
r 读目录权限。
w 更改目录权限,包括在该目录下新建目录或文件,删除已经存在的文件与目录(不论该文件的权限),将已存在的文件或目录重命名,转移该文件的文件/目录位置等。
x 表示用户可否进入该目录成为工做目录。工具
[***@*** ~]$ cd /home/***/test/ -bash: cd: /home/***/test/: Permission denied [***@*** ~]$ cd /home/***/ -bash: cd: /home/***/: Permission denied [***@*** ~]$ ll /home/ drwx------. 13 *** *** 4096 Mar 3 08:37 *** drwx------. 2 *** *** 78 Mar 3 08:38 *** [root@*** ***]# chmod 705 /home/*** [root@*** ***]# ll /home/ drwx---r-x. 13 *** *** 4096 Mar 3 08:37 *** drwx------. 2 *** *** 103 Mar 3 08:42 *** [root@*** ***]# su - *** Last login: Tue Mar 3 08:39:24 CST 2020 on pts/0 [***@*** ~]$ cd /home/***/ [***@*** ***]$ lstest [***@*** ***]$ cd test/ [***@*** test]$ ls
原来 目录 *** 对于其它用户没有 r x 权限,因此 *** 进不去,显示 permission denied。修改成 r x 后能够进到该目录下。
注意即便有 r 权限,若是没有 x 权限也是不能进到该目录下的。this
更改文件权限和属性
更改文件或目录所属用户组: chgrp
chgrp [-R] 组名 filename加密
更改文件或目录所属用户: chown
chown [-R] 帐号名 filenamespa
更改文件或目录权限: chmodrest
帐号
两个重要概念:UID 和 GID。
每一个用户都有 UID 和 GID,UID 是用户的 ID,GID 是用户所属的组 ID。
三个重要文件: /etc/passwd , /etc/shadow 和 /etc/group。
/etc/passwd 里存的是帐号信息。
/etc/shadow 存的是帐号的密码信息。
/etc/group 寸的是帐号的群组信息。
以 test 用户为例,查看三个文件内容分别为:
[root@*** ***]# cat /etc/passwd | grep test test:x:0:1007::/home/test:/bin/bash [root@*** ***]# cat /etc/shadow | grep test test:!!:18324:0:99999:7::: [root@*** ***]# cat /etc/group | grep test test:x:1007:
passwd 帐号有 7 列。第一列表示帐号名。第二列为该帐号的密码,密码移到 shadow 文件中了,因此这里的密码是 * 表示。第三列为该用户的 UID , UID 为 0 表示该用户是系统管理员(能够看出系统管理员不止只有 root 一个),UID 为 1-499 表示该用户是系统帐号,也就是保留给系统使用的 UID, 500及以上的 UID 留给通常用户使用。第四列 1007 为帐号所属群组的 GID,GID 为 0 表示该用户所属的是系统管理员群组。第五列为用户信息说明列。第六列为该用户的主文件夹。第七列表示当该用户登录的时候会取得 shell 和内核通讯从而进行操做。
shadow 文件有 9 列,主要介绍第一列和第二列,第一列是帐号名,第二列是该帐号加密过的密码。
group 文件有 4 列,第一列为用户组,第二列为用户组的密码,相似于 /etc/shadow, 用户组的密码被存在 /etc/gshadow 文件中,通常这个密码是 *。第三列为用户组的 GID。第四列表示用户组支持的帐号名称,若是用户的主用户组是这个用户组,则不须要指明,例如 test 用户的主用户组是 test,因此看到的 : 后是空的。
关于主用户组,一个用户能够同属多个用户组,新建一个用户 lianhua,将他加到用户组 test 中:
[root@*** ***]# usermod -G test lianhua [root@*** ***]# ll /home/ drwx------. 2 lianhua lianhua 62 Mar 3 23:41 lianhua drwx------. 2 root test 62 Mar 3 22:18 test [root@*** ***]# cat /etc/passwd | grep lianhua lianhua:x:1005:1008::/home/lianhua:/bin/bash [root@*** ***]# cat /etc/group | grep test test:x:1007:lianhua
能够看到 test group 的第四列多了一个用户 lianhua,而 test 是 lianhua 的从用户组,它的主用户组是 lianhua, GID 是 1008。
帐号管理
用户帐号管理
新增用户 useradd / adduser
useradd 和 adduser 都是建立用户,centos 下没有区别,Ubuntu 下有所不一样:
1. useradd 建立用户不会在 /home 下自动建立与用户名同名的用户目录,并且不会自动选择shell版本,也没有设置密码,用户是不能登陆的,须要使用 passwd 命令修改密码。
2. adduser 建立用户会在 /home 下自动建立与用户名同名的用户目录,系统 shell 版本,会在建立时会提示输入密码,更加友好。
密码设置 passwd
修改密码,后接用户名,若是不加则表示修改当前用户的密码。
用户信息修改 usermod
修改用户信息,如 usermod -G test lianhua
删除用户 userdel
userdel 删除用户不会删除用户相关的目录文件, 需加 -r 选项删除。
实际操做 test 用户,看 test 用户的 shadow test:!!:18324:0:99999:7::: 知道此时尚未 test 还没设置密码,加密的密码是空的,此时是没法登录该帐号的。使用 passwd 给 test 设置密码:
[root@*** ***]# passwd test Changing password for user test. New password: BAD PASSWORD: The password fails the dictionary check - it is too simplistic/systematic Retype new password: passwd: all authentication tokens updated successfully. [root@*** ***]# cat /etc/shadow | grep test test:$1$dRPW9HDg$XryB6uQ/DSBxzkFNoI13P0:18324:0:99999:7:::
加密以后的 test 用户的密码是 $1$dRPW9HDg$XryB6uQ/DSBxzkFNoI13P0。
该密码以 $ 为符号分隔成三部分。
第一部分为数字,表示有哪中加密算法生成的密码,1 表示 MD5,5 表示 SHA-256,6 表示 SHA-512。
第二部分为 dRPW9HDg salt,是使用 hash 算法进行加密的干扰值。
第三部分为加密以后的密码。
如今加密好了,帐号 test 能够用来登录了。
从 root 切换帐号到 test:
[root@*** ***]# su - test Last login: Tue Mar 3 23:41:01 CST 2020 on pts/0 [root@*** ~]#
细心的朋友会发现 root@*** 一直没变,变化的是当前目录。之因此出现这样是由于 test 是管理员(UID 是 0)和 root 同一级别,这里不须要切换。
好了,test 的用途到此为止了,是时候给它删掉了,使用 userdel -r test 删除:
[root@*** ~]# userdel -r test userdel: user test is currently used by process 1
显示进程正在被使用,退出登录,从新链接,再执行 userdel -r test, 删除成功。
用户组帐号管理
用户组帐号管理主要有两个文件,/etc/group 和 /etc/gpasswd。
/etc/group 存的是 group 的信息。
/etc/gpasswd 存的是 group 的密码信息。
新增用户组 groupadd
[***@*** ~]$ groupadd testgroup [***@*** ~]$ cat /etc/group | grep testgroup testgroup:x:1008:
删除用户组 groupdel
修改用户组 groupmod
用户组管理员功能 gpasswd
gpasswd 可为用户组指定用户做为管理员,该管理员能够管理其它用户,如新建其它用户到该用户组,将该用户移出用户组等。
gpasswd option: -a, --add USER add USER to GROUP -d, --delete USER remove USER from GROUP -h, --help display this help message and exit -Q, --root CHROOT_DIR directory to chroot into -r, --delete-password remove the GROUP's password -R, --restrict restrict access to GROUP to its members -M, --members USER,... set the list of members of GROUP -A, --administrators ADMIN,... set the list of administrators for GROUP [***@*** ~]$ gpasswd testgroup testgroup:$1$NKee9/mB$JqiWJBNBP.6Wa8c11akqS1: [root@*** ***]# useradd lianhua [root@*** ***]# useradd huasheng [root@*** ***]# gpasswd -A lianhua testgroup [root@*** ***]# su - lianhua [root@*** ***]# gpasswd -a huasheng testgroup [root@*** ***]# su - huasheng [root@*** ***]# gpasswd -a lianhuasheng testgroup gpasswd: Permission denied. [root@*** ***]# cat /etc/gshadow | grep testgroup testgroup:$1$NKee9/mB$JqiWJBNBP.6Wa8c11akqS1:lianhua:huasheng
从上可知,用户组管理员 lianhua 可添加用户 huasheng 到 testgroup ,可是通常用户 huasheng 不能添加 lianhuasheng 到 testgroup。
补充 MD5 算法
MD5 信息摘要算法,是一种加密算法,经常使用来确保文件传输是否完整。
Liunx 自带 MD5 算法工具 md5sum:
[root@*** ***]# md5sum --help Usage: md5sum [OPTION]... [FILE]... Print or check MD5 (128-bit) checksums. With no FILE, or when FILE is -, read standard input. -b, --binary read in binary mode -c, --check read MD5 sums from the FILEs and check them --tag create a BSD-style checksum -t, --text read in text mode (default)
使用 md5sum 检查文件是否完整:
[root@*** ***]# touch testMD5.sh [root@*** ***]# ll testMD5.sh -rw-r--r--. 1 root root 0 Mar 4 23:04 testMD5.sh [root@*** ***]# md5sum testMD5.sh > testMD5.sh.password [root@*** ***]# ll -rw-r--r--. 1 root root 0 Mar 4 23:04 testMD5.sh -rw-r--r--. 1 root root 45 Mar 4 23:06 testMD5.sh.password [root@*** ***]# cp testMD5.sh testMD5.sh.password ../ [root@*** ***]# cd .. [root@*** home]# ls ../ testMD5.sh testMD5.sh.password [root@*** home]# md5sum -c testMD5.sh.password testMD5.sh: OK [root@*** home]# vi testMD5.sh [root@*** home]# ll testMD5.sh -rw-r--r--. 1 root root 9 Mar 4 23:07 testMD5.sh [root@*** home]# md5sum -c testMD5.sh.password testMD5.sh: FAILED md5sum: WARNING: 1 computed checksum did NOT match