Day7
1.1创建用户
useradd 用户名
/user/sbin/useradd、
useradd -u 指定用户UID -g 指定GID,修改用户的基本组 将指定用户GID修改为1000 -G 指定附加组 将指定用户添加到一个新的组中(即附加组) -c 给指定用户写注释 -d 给用户修改家目录 -s 设置shell
1.2查看用户
查看用户信息的三种方法:
1.id 用户名 查看该用户的id以验证该用户是否存在
2.grep '^用户名' /etc/passwd 查看该用户信息
3.cat /etc/passwd 可查看所有用户的信息
cat /etc/passwd 用户配置文件
root:x:0:0:root:/root:/bin/bash /sbin/nologin 用户名:密码占位符:UID:GID:描述信息,注释字段:家目录:shell(登录式和非登录式) 查看用户配置文件的前十行 eg: [root@localhost ~]# head -10 /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin
1.3修改用户
useradd user 添加用户 groupadd 组名 添加一个新的组
修改用户usermod格式:
usermod [option...] [选项参数] 用户名
-l 指定新的登录名 格式: usermod -l newuser user -u 指定用户UID eg:usermod -u 1111 newuser -g 指定GID,修改用户的基本组 eg:usermod -g 1000 newuser 将指定用户GID修改为1000 -G 指定附加组 eg:usermod -G g1 newuser 将指定用户添加到一个新的组中(即附加组) -c 给指定用户写注释 格式eg:usermod -c woshiuser newuser -d 给用户修改家目录 格式:usermod -d 家目录 newuser -s 设置shell eg:usermod -s /sbin/nologin newuser (shell分为可登录式和非登录式) -L 锁定用户密码 -U 解锁用户密码
锁定/解锁密码的两种方法:
usermod
-L 锁定
-U 解锁
passwd
-l 锁定
-u 解锁
###
1.4删除用户
格式:
userdel -r 用户 删除用户以及创建用户相关的所有文件
注:默认也会删除用户的基本组,但是如果基本组中有其他用户,userdel -r删除不会删除基本组
eg: [root@www ~]# useradd haha [root@www ~]# tail -1 /etc/group haha:x:1002: [root@www ~]# userdel -r haha [root@www ~]# tail -1 /etc/group user:x:1001: [root@www ~]# useradd xixi [root@www ~]# usermod -G xixi user [root@www ~]# tail -1 /etc/group xixi:x:1002:user [root@www ~]# userdel -r xixi ---xixi基本组中存在其他用户,删除用户不会删除基本组 userdel: group xixi not removed because it has other members. [root@www ~]# tail -1 /etc/group xixi:x:1002:user
1.5用户设置/修改密码
格式:
passwd 选项 用户名
选项: -d 删除用户密码 -l 锁定用户密码 -u 解锁用户密码
password 指定用户名 更改该用户密码
管理员(root):可以指定用户名更改系统任意用户的密码不需要输入之前的密码,不严格匹配密码等级设置(无限制) 普通用户:不可以指定用户名,只能更改自己的密码,需要输入之前的密码,严格匹配密码等级设置(有限制,需字母、数字结合且不能与之前重复)
chpasswd
eg: [root@www ~]# cat users redhat:1234 root:1234 xiao1:1234 [root@www ~]# cat users | chpasswd [root@www ~]# echo redhat:123456 | chpasswd
echo 密码 | passwd --stdin 用户名
1.6破解密码
关机-->开机-->鼠标进入启动界面-->第一个引导菜单-->e --->找到linux这一行在行尾添加rd.break --->ctrl-x--->mount -o remount,rw /sysroot --->chroot /sysroot -->passwd root-->设置密码--确认密码--->touch /.autorelabel -->exit --exit (等待)
2.组类别
2.1组添加
格式:
groupadd 组名
2.2查看组
查看组方法:
grep '^组名' /etc/group
cat /etc/group 组配置文件
#man 5 group redhat:x:1000: 组名:组密码占位符:GID组id:组中的用户名
2.3修改组信息
格式:
groupmod [option...] [选项参数] 组名
选项: -n 指定新组名 eg: #groupmod -n g2 grp2 -g 指定GID eg:#groupmod -g 2222 g2
2.4删除组
格式:
groupdel 组名
注:是能删除一个附加组,哪怕附加组中由用户也可以删除,但是不能删除一个基本组
2.5设置、修改组密码
gpasswd 组名
-a 将用户加入指定组 eg: #gpasswd -a redhat g2 -d 将指定用户从组移除 eg:#gpasswd -d redhat g2 -M 指定组成员列表 格式:#gpasswd -M user1,user2 g2 eg:#gpasswd -M haha,xixi g2 -A 指定组长 eg:#gpasswd -A haha g2 -R 锁定组密码 eg:#gpasswd -R g2
2.6登录新组
newgrp 组名 切换组身份
练习题:
1.新建组,shengchan,caiwu,jishu
2.新建用户要求如下:
\* wjx 是shengchan组的附加用户 \* liuy 是caiwu组的附加用户 \* zxx 是jishu组的附加用户 \* 新建admin用户,此用户不属于以上提到的三个部门,以上用户密码设置为redhat
[root@localhost ~]# groupadd shengchan [root@localhost ~]# groupadd caiwu [root@localhost ~]# groupadd jishu [root@localhost ~]# useradd -G shengchan wjx [root@localhost ~]# useradd liuy [root@localhost ~]# usermod -G caiwu liuy [root@localhost ~]# useradd zxx [root@localhost ~]# usermod -G jishu zxx [root@localhost ~]# useradd admin [root@localhost ~]# passwd wjx Changing password for user wjx. New password: BAD PASSWORD: The password is shorter than 8 characters Retype new password: passwd: all authentication tokens updated successfully. 设置密码有多种方法: (1)passwd wjx (2)echo redhat | passwd --stdin liuy (3)echo zxx:redhat | chpasswd (4)vim users wjx:redhat liuy:redhat zxx:redhat admin:redhat #cat users | chpass
3.实验
创建学习组1,学习组2 ;他们的组gid分别为1111,2222,添加成员并将uid为1088,
和uid为1066的成员为两组的组长,其中一组组长有一个‘外号’laoda。
不同学习组成员进入其他组需要密码才能进入(设置密码);即使密码泄露也不希望组之外的成员进入。
#groupadd std1 #groupmod -g 1111 std1 #groupadd -g 2222 std2 #useradd u1 #useradd u2 #usermod -u 1088 u1 #usermod -c laoda u1 #useradd -u 1066 ha1 #useradd ha2 用户加入组 #usermod -G std1 u1 #gpasswd -a u2 std1 #gpasswd -M ha1,ha2 std2 #gpasswd -A u1 std1 #gpasswd -A ha1 std2 #gpasswd std1 #gpasswd std2 #gpasswd -R std1 #gpasswd -R std2
不允许用户远程登录
拓展
useradd haha /etc/passwd
/etc/group
/etc/shadow 密码文件
/etc/gshadow
/home/USERNAME (d)
/var/spool/mail/USERNAME (-)
groupadd /etc/group /etc/gshadow
/etc/shadow 用户密码文件
用户名:加密密码:最后一修改密码的天数(1970/1/1):密码生效最短时间:最长时间:警告时间:延长时间:精确过期时间(1970/1/1):保留字段 #passwd -x, --maximum=DAYS maximum password lifetime (root only) -n, --minimum=DAYS minimum password lifetime (root only) -w, --warning=DAYS number of days warning users receive
/etc/gshadow 组密码信息 7 5
组名:组密码:组长:组成成员
/etc/default/useradd 用户创建默认加载的配置文件
参数 | 含义 |
---|---|
GR0UP=100 | 这个选项用于建立用户的默认组,也就是说,在添加每个用户时,用户的初始组就是 GID 为 100 的这个用户组。但 CentOS 并不是这样的,而是在添加用户时会自动建立和用户名相同的组作为此用户的初始组。也就是说这个选项并不会生效。 Linux 中默认用户组有两种机制:一种是私有用户组机制,系统会创建一个和用户名相同的用户组作为用户的初始组;另一种是公共用户组机制,系统用 GID 是 100 的用户组作为所有新建用户的初始组。目前我们采用的是私有用户组机制。 |
HOME=/home | 指的是用户主目录的默认位置,所有新建用户的主目录默认都在 /home/下。 |
INACTIVE=-1 | 指的是密码过期后的宽限天数,也就是 /etc/shadow 文件的第七个字段。这里默认值是 -1,代表所有新建立的用户密码永远不会失效。 |
EXPIRE= | 表示账号过期时间,也就是 /etc/shadow 文件的第八个字段。默认值是空,代表所有新建用户没有失效时间,永久有效。 |
SHELL=/bin/bash | 表示所有新建立的用户默认 Shell 都是 /bin/bash。 |
SKEL=/etc/skel | 在创建一个新用户后,你会发现,该用户主目录并不是空目录,而是有 .bash_profile、.bashrc 等文件,这些文件都是从 /etc/skel 目录中自动复制过来的。因此,更改 /etc/skel 目录下的内容就可以改变新建用户默认主目录中的配置文件信息。 |
CREATE_MAIL_SPOOL=yes | 指的是给新建用户建立邮箱,默认是创建。也就是说,对于所有的新建用户,系统都会新建一个邮箱,放在 /var/spool/mail/ 目录下,和用户名相同。 |
/etc/login.defs 登录用户默认匹配的配置文件
注:配置文件中的#表示注释 MAIL_DIR /var/spool/mail \#创建用户时,要在目录/var/spool/mail中创建一个用户mail文件 PASS_MAX_DAYS 99999 \#密码最大有效期 PASS_MIN_DAYS 0 \#两次修改密码的最小间隔时间 PASS_MIN_LEN 5 \#密码最小长度,对于root无效 PASS_WARN_AGE 7 \#密码过期前多少天开始提示 #创建用户时不指定UID的话自动UID的范围 UID_MIN 500\#用户ID的最小值 UID_MAX 60000 \#用户ID的最大值 #自动组ID的范围 GID_MIN 500\#组ID的最小值 GID_MAX 60000 \#组ID的最大值 USERDEL_CMD /usr/sbin/userdel_local \#当删除用户的时候执行的脚本 CREATE_HOME yes \#使用useradd的时候是够创建用户目录 USERGROUPS_ENAB yes \#用MD5加密密码
权限
1.Linux中的权限在文件中标识
执行(x)x是指execute
2.权限的描述形式
(1)字符形式 r read w write x execute
(2)数值形式 r=4 w=2 x=1
访问权限通过字符表示 eg: -rw-r--r--. 1 root root 2582 Nov 28 14:48 passwd 无x 即无执行权限 drwxr-xr-x. 2 root root 6 Nov 22 19:18 Pictures 可读可写可执行
比如 :drwxr-xr-x. 共十位字符,第一位表示文件类型,后九位描述访问权限;通过九位字符表示访问权限,前三位表示所属用户位(u)的访问权限,中间三位表示所属组(g)的权限,后三位表示其他用户(o)的访问权限
3.权限字符的含义
文本文件:
r 查看文件内容 cat tac more less head tail grep vim 都有读权限
w 编辑文件内容 vim echo 都具有写权限
x 执行文件中内容(脚本)命令文件
目录文件:
r 查看目录文件名 ls 具有读权限
w 创建文件 touch mkdir cp mv > rm 都具有写权限
x 执行cd (r-x)或者(rwx)
4.权限的匹配规则
可执行文件(命令文件)进程的所属用户身份是用户发起者身份
判断发起者身份是否是目标文件所属用户:
是,则只匹配目标问件所属用户位的权限;
不是,则判断发起者身份是否为目标文件所属组用户:是组用户,则只匹配目标文件所属组的权限;不是,则直接匹配目标文件其他用户位的权限
5.修改权限
chmod
chmod 权限 FILE...
注:作为普通用户只能更改属于自己的文件的权限 u所属用户位 g所属组 o其他用户 a所有 chmod ugo=rwx file1 == chmod a=rwx file1 == chmod rwx file chmod u=rw,g+r,o-r file1 == chmod -x file chmod 644 file2 "644"指的是rw-r--r--, chmod 006 file3 chmod u=6 file4 ----错误的
chown
chown 更改文件的所属用户
格式: chown 用户名 FILE chown 用户名:组名 FILE chown .组名 FILE
chgrp
chgrp 更改文件的所属组
格式: chgrp 组名 FILE
eg: [root@www ~]# ll aaa -------rw-. 1 root root 5 Dec 4 14:30 aaa [root@www ~]# chown xixi:haha aaa [root@www ~]# ll aaa -------rw-. 1 xixi haha 5 Dec 4 14:30 aaa [root@www ~]# chown redhat aaa [root@www ~]# ll aaa -------rw-. 1 redhat haha 5 Dec 4 14:30 aaa [root@www ~]# chgrp xixi aaa [root@www ~]# ll aaa -------rw-. 1 redhat xixi 5 Dec 4 14:30 aaa
6.文件默认的权限值
文本文件最高的权限值:666 (因为文本文件不会有执行权限)
权限掩码(权限过滤值):022
文本文件默认的权限值:644可通过umask 进行查看和更改
eg:
[root@localhost ~]# touch d7 [root@localhost ~]# ll d7 -rw-r--r--. 1 root root 0 Dec 4 15:15 d7
.前一共有十位,第一位为文件类型,后九位为访问权限(三个三个相加形成数值形式)
目录文件最高的权限值:777
权限掩码(权限过滤值):022 可通过umask 进行查看和更改
目录文件默认的权限值:755
(由于目录文件最高权限值为777,权限过滤值默认为022,所以目录文件默认权限值为对应字符相减=755)
进行权限过滤时,优先使用按字符过滤,因为权限掩码出现奇数时,若按数值过滤会导致错误结果;权限掩码出现偶数时可以采用按数值过滤
eg:
rw- rw- rw- 6 6 6 --- -wx -wx 0 3 3 按字符过滤得到:rw- r-- r-- 对应数字为644 若按数值过滤得:6 3 3 ----是错误的
eg: [root@localhost ~]# mkdir V [root@localhost ~]# ll -d V drwxr-xr-x. 2 root root 6 Dec 4 15:15 V
练习题:
[root@localhost ~]# cp /etc/fstab /var/tmp/fstab [root@localhost ~]# useradd zhangsan [root@localhost ~]# chown zhangsan /var/tmp/fstab [root@localhost ~]# chgrp zhangsan /var/tmp/fstab [root@localhost ~]# chmod a-x /var/tmp/fstab [root@localhost ~]# chmod o+r /var/tmp/fstab
7.特殊权限
chmod配合下列选项使用
格式示例:
chmod u+s aaa
[root@localhost ~]# chmod u+s aaa [root@localhost ~]# ll aaa -rwSr--r--. 1 root root 0 Nov 24 20:01 aaa 所属用户位无执行权限时,特殊权限标记为S [root@localhost ~]# chmod u+x aaa [root@localhost ~]# ll aaa -rwsr--r--. 1 root root 0 Nov 24 20:01 aaa 所属用户位有执行权限时,特殊权限标记为s,表示既有特殊权限又有执行权限
u+s = suid 指所属用户的禁锢位
(s为特殊权限字符,u+s对应数值为4) suid 指所属用户的禁锢位
仅对可执行文件(命令文件)设置有意义: 可执行文件(命令文件)设置u+s权限,可执行文件的进程所属用户是可执行文件自身的用户; eg: [root@www ~]# ll /usr/bin/passwd -rwsr-xr-x. 1 root root 33544 Dec 14 2019 /usr/bin/passwd [root@www ~]# ll /etc/shadow ----------. 1 root root 1568 Dec 4 11:58 /etc/shadow (对所有用户没有任何权限) [redhat@www ~]$ passwd (为什么普通用户可以修改密码/etc/shadow) Changing password for user redhat. Current password: 原因:通过普通用户执行passwd,passwd文件进程身份是root 设置情况:通过任意用户执行命令,通过root身份来执行就可以设置特殊权限u+s
g+s =sgid 指所属组的禁锢位
(g+s对应数值为2)
(1)对可执行文件设置有意义:(很少用) 可执行文件(命令文件)设置g+s权限,可执行文件的进程所属组是可执行文件自身的所属组; (2)对目录文件设置有意义: 任意用户在该目录下创建的文件,文件的所属组都是目录的所属组 eg: [root@www ~]# mkdir /pub [root@www ~]# chmod 777 /pub [root@www ~]# ll /usr/bin/touch -rwxr-xr-x. 1 root root 96144 Jul 10 2021 /usr/bin/touch [user@www ~]$ touch /pub/u1 [user@www ~]$ ll /pub/u1 -rw-rw-r--. 1 user user 0 Dec 4 16:20 /pub/u1 ----------------------目录g+s------------------------------------ [root@www ~]# chmod g+s /pub [root@www ~]# ll /pub -d drwxrwsrwx. 2 root root 16 Dec 4 16:20 /pub [user@www ~]$ touch /pub/u2 [user@www ~]$ ll /pub/ total 0 -rw-rw-r--. 1 user user 0 Dec 4 16:20 u1 -rw-rw-r--. 1 user root 0 Dec 4 16:22 u2
o+t =sticky 指冒险位
(o+t对应数值为1)
仅对目录文件设置有意义; 目录文件设置o+t权限后,普通用户只能删除自己的文件不能删除别人的文件 [root@www ~]# ll -d /test drwxrwxrwx. 3 root root 102 Dec 4 15:18 /test [root@www ~]# ll /test total 0 -rw-r--r--. 1 root root 0 Dec 4 15:09 r2 -rw-r--r--. 1 root root 0 Dec 4 15:09 r3 -rw-r--r--. 1 redhat redhat 0 Dec 4 15:10 red1 -rw-r--r--. 1 redhat redhat 0 Dec 4 15:10 red2 -rw-r--r--. 1 redhat redhat 0 Dec 4 15:10 red3 -rw-r--r--. 1 user user 0 Dec 4 15:10 u1 -rw-r--r--. 1 user user 0 Dec 4 15:10 u2 -rw-r--r--. 1 user user 0 Dec 4 15:10 u3 [user@www test]$ rm -f r2 删除任意用户的文件 --------------------目录o+t---------------------------------- [root@www ~]# chmod o+t /test [root@www ~]# ll -d /test drwxrwxrwt. 3 root root 92 Dec 4 16:28 /test [user@www test]$ rm -f r3 rm: cannot remove 'r3': Operation not permitted [user@www test]$ rm -f u1 [user@www test]$ rm -f red1 rm: cannot remove 'red1': Operation not permitted
综上u+s对应数值为4,g+s对应数值为2,o+t对应数值为1,所以特殊权限最高数值为7
eg: [root@localhost ~]# chmod 7644 aaa [root@localhost ~]# ll aaa -rwSr-Sr-T. 1 root root 0 Nov 24 20:01 aaa u、g、o 三个部分上都有了特殊权限
8.扩展权限
getfacl
getfacl 查看文件的权限列表
格式:
getfacl 指定文件
eg: [root@www ~]# getfacl aaa # file: aaa # owner: redhat # group: xixi # flags: sst user::rw- group::r-- other::r--
setfacl
setfacl 设置权限列表
-m 指定权限列表
格式:
setfacl -m u:用户名(UID):权限 file
setfacl -m g:组名(GID):权限 file
eg: [root@www ~]# setfacl -m u:xixi:rwx aaa [root@www ~]# getfacl aaa # file: aaa # owner: redhat # group: xixi # flags: sst user::rw- user:xixi:rwx 开后门,将所属用户位的访问权限设置为了rwx group::r-- mask::rwx other::r--
-x 删除扩展权限列表
-b 清空扩展权限(扩展权限的表示符)
eg: [root@www ~]# setfacl -x u:xixi: aaa [root@www ~]# ll aaa -rwSr-Sr-T+ 1 redhat xixi 5 Dec 4 14:30 aaa [root@www ~]# getfacl aaa # file: aaa # owner: redhat # group: xixi # flags: sst user::rw- group::r-- mask::r-- (扩展权限标识) other::r-- [root@www ~]# setfacl -b aaa [root@www ~]# ll aaa -rwSr-Sr-T. 1 redhat xixi 5 Dec 4 14:30 aaa
注意点
附:
1.chown+R 表示递归(分级操作,扩大了范围),对组下用户和文件都作出更改操作
2.可交互式shell与用户之间存在沟通(有提示语等),不可交互式shell反之
3.ctrl+c 用于终止当前命令
4.临时生效指的是仅在主机运行状态下生效
5.可执行文件指命令文件
6./etc/shadow 为密码文件
作业:
1.创建下列用户,组,和组的成员关系(servera) • 创建组sysmgrs • 一个名为 natasha 的用户,其属于 sysmgrs,这个组是该用户的从属组 • 一个名为 harry 的用户,属于 sysmgrs,这个组是该用户的从属组 • 一个名为 sarah 的用户,其在系统汇总没有可以交互的 shell • 用户 natsha,harry,sarah 的秘密吗都要设定为:modteed
[root@localhost ~]# groupadd sysmgrs [root@localhost ~]# useradd -G sysmgrs natasha [root@localhost ~]# useradd -G sysmgrs harry [root@localhost ~]# useradd -s /sbin/nologin sarah [root@localhost ~]# echo modteed | passwd --stdin natasha Changing password for user natasha. passwd: all authentication tokens updated successfully. [root@localhost ~]# echo modteed | passwd --stdin harry Changing password for user harry. passwd: all authentication tokens updated successfully. [root@localhost ~]# echo modteed | passwd --stdin sarah Changing password for user sarah. passwd: all authentication tokens updated successfully.
2.拷贝文件/etc/fstab 到/var/tmp/fstab 配置文件/var/tmp/fstab 的权限 • 文件/var/tmp/fstab 的拥有者是 root 文件/var/tmp/fstab 属于 root 组 • 文件/var/tmp/fstab 对任何用户不可执行 • 用户 natasha 能够对文件/var/tmp/fstab/具有读写权限 • 用户 harry 对文件/var/tmp/fstab 既不能读也不能写 • 其他用户(当前和将来的)能对文件/var/tmp/fstab 进行读操作
[root@localhost ~]# cp /etc/fstab /var/tmp/fstab [root@localhost ~]# chown root:root /var/tmp/fstab [root@localhost ~]# chmod a-x /var/tmp/fstab [root@localhost ~]# setfacl -m u:natasha:rw /var/tmp/fstab [root@localhost ~]# setfacl -m u:harry:-- /var/tmp/fstab [root@localhost ~]# chmod o+r /var/tmp/fstab ==chmod 644 /var/tmp/fstab
3.创建一个共享目录/home/managers 特性如下
• /home/managers 目录的所有权是 sysmgrs • sysmgrs 组成员对目录有读写和执行的权限。除此之外的其他用户没有任何权限(root 用户除外) • 在/home/managers 目录中创建的文件,其组所有权会自动设置为属于 sysmgrs组
[root@localhost ~]# mkdir /home/managers [root@localhost ~]# chown sysmgrs:sysmgrs /home/managers [root@localhost ~]# chmod g=rwx,o=- /home/managers ==chmod 770 /home/managers [root@localhost ~]# chmod g+s /home/managers ==chmod 2770 /home/managers 特殊权限位所属用户位的权限所属组的权限其他用户位的权限