linux之权限管理和组

一,ACL权限

1.1,什么是acl权限?

  1. ACL是Access Control List的缩写,即访问控制列表。可以通过下列的实例来理解ACL的作用:

思考如何实现如下的权限控制:

  • 每个项目成员在有一个自己的项目目录,对自己的目录有完全权限
  • 项目组中的成员对项目目录也有完全权限
  • 其他人对项目目录没有任何权限
  • 对于被分配进入项目的临时人员,只有读和执行权限,不能修改
  1. 如何实现

初步思路:

  • 创建一个临时组(例如:temp),并将临时组的权限设置位 r-w
  • 将临时组也作为项目目录的所属组
  • 对于临时用户作为临时组的成员即可

问题:

  • Linux基本权限中,文件和目录同时只能有一个分组
  • 使用ACL来解决上面的问题

1.2 操作步骤

操作流程:

#1,添加测试目录,用户,组,并将用户添加到组
#创建一个目录
[root@localhost ~]# mkdir /project
#创建一个用户
[root@localhost ~]# useradd swt
[root@localhost ~]# useradd dhy
#创建一个组
[root@localhost ~]# groupadd tgroup
#将swt加入到组中
[root@localhost ~]# gpasswd -a swt tgroup
正在将用户“swt”加入到“tgroup”组中
#将dhy加入到组中
[root@localhost ~]# gpasswd -a dhy tgroup
正在将用户“dhy”加入到“tgroup”组中
#可以查看组是否建立成功
[root@localhost ~]# cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mem:x:8:
kmem:x:9:
wheel:x:10:
cdrom:x:11:
mail:x:12:postfix
man:x:15:
dialout:x:18:
floppy:x:19:
games:x:20:
tape:x:33:
video:x:39:
ftp:x:50:
lock:x:54:
audio:x:63:
nobody:x:99:
users:x:100:
utmp:x:22:
utempter:x:35:
input:x:999:
systemd-journal:x:190:
systemd-network:x:192:
dbus:x:81:
polkitd:x:998:
libstoragemgmt:x:997:
ssh_keys:x:996:
abrt:x:173:
rpc:x:32:
sshd:x:74:
slocate:x:21:
postdrop:x:90:
postfix:x:89:
chrony:x:995:
ntp:x:38:
tcpdump:x:72:
stapusr:x:156:
stapsys:x:157:
stapdev:x:158:
swt:x:1000:
dhy:x:1001:
tgroup:x:1002:swt,dhy
#2,修改目录的所有者和所属组
[root@localhost ~]# chown root:tgroup /project
[root@localhost ~]# ll -d /project
drwxr-xr-x. 2 root tgroup 6 3月  15 11:57 /project
#3,设定权限
[root@localhost ~]# chmod 770 /project
[root@localhost ~]# ll -d /project
drwxrwx---. 2 root tgroup 6 3月  15 11:57 /project
#4,此时需要为临时用户进行分配权限,r-x
# 添加临时用户
[root@localhost ~]# useradd tempuser
[root@localhost ~]# passwd tempuser
更改用户 tempuser 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
抱歉,密码不匹配。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
# 为临时用户分配权限
[root@localhost ~]# setfacl -m u:tempuser:rx /project
[root@localhost ~]# getfacl /project
getfacl: Removing leading '/' from absolute path names
# file: project
# owner: root
# group: tgroup
user::rwx
user:tempuser:r-x
group::rwx
mask::rwx
other::---
# 查看目录权限,注意+,表示文件或目录由acl权限
[root@localhost ~]# ll -d /project
drwxrwx---+ 2 root tgroup 6 3月  15 11:57 /project
#5,验证acl权限
#切换到tempuser用户
[root@localhost ~]# su tempuser
# 进入到tempuser目录
[tempuser@localhost root]$ cd /project
# 创建一个test.txt文件,明显权限不够
[tempuser@localhost project]$ touch test.txt
touch: 无法创建"test.txt": 权限不够
#切换到管理员
[tempuser@localhost project]$ su root
密码:
#6,控制组acl权限
# 创建一个temp组
[root@localhost project]# groupadd temp
# 设置组的acl权限
[root@localhost project]# setfacl -m g:temp:rx /project
# 查看设置后的acl
[root@localhost project]# getfacl /project
getfacl: Removing leading '/' from absolute path names
# file: project
# owner: root
# group: tgroup
user::rwx
user:tempuser:r-x
group::rwx
group:temp:r-x
mask::rwx
other::---
# 创建一个用户,并将该用户设置为temp组
[root@localhost project]# useradd tempu02
[root@localhost project]# passwd tempu02
更改用户 tempu02 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
# 将用户添加到temp组中
[root@localhost project]# gpasswd -a tempu02 temp
正在将用户“tempu02”加入到“temp”组中
# 验证
[root@localhost project]# su tempu02
# 可以进入目录
[tempu02@localhost project]$ cd /project
[tempu02@localhost project]$ ls
# 不能创建文件
[tempu02@localhost project]$ touch aa.txt
touch: 无法创建"aa.txt": 权限不够

1.3 acl中的mask修改最大权限

看下面的信息:

[root@localhost ~]# getfacl /project
getfacl: Removing leading '/' from absolute path names
# file: project
# owner: root
# group: tgroup
user::rwx
     # 所属用户权限
user:tempuser:r-x
   # 临时用户权限
group::rwx
    # 所属组权限, 文件创建时的所属组
group:temp:r-x
  # 一般组的权限  创建的临时组
mask::rwx
   # 权限掩码,用来控制最大权限  ✨
other::---

最大权限是什么?

 如果给用户赋予了ACL权限,则用户所获取的权限并不是ACL时所附的权限,而是赋予的ACL权限 与 mask权限 进行 与 操作 之后的权限。例如:user:tempuser:r-x 第一位是r, mask的第一位也是r, 则与操作后,用户则有 r 的权限, user:tempuser:r-x 第二位是 - ,mask的第二位是 w,则与操作后用户则没有 w 的权限。

最大权限的作用?

mask的默认值为rwx,即最大权限,任何其他的权限值和mask相“与”都会得到其自身; 可以通过调整mask的方式来控制分配给用户的最大权限,例如: mask值调整为 r-x ,则不管是否给用户分配”w”权限,用户都没有“w”的权限。mask可以用来避免权限分配不当而给系统带来的风险。

注意:mask不会影响文件所有者的权限

实验:

#设置mask
[root@localhost ~]# setfacl -m:rx /project
# 查看mask
[root@localhost ~]# getfacl /project
getfacl: Removing leading '/' from absolute path names
# file: project
# owner: root
# group: tgroup
user::r-x
user:tempuser:r-x
group::rwx
# 所属组虽然设置的权限为rwx,但实际的权限r-x
group:temp:r-x
# 修改之后的mask
mask::rwx
other::---

1.4,ac权限的删除

# 删除指定acl其权限
[root@localhost ~]# setfacl -x u:tempuser /project
# 查看acl权限
[root@localhost ~]# getfacl /project
getfacl: Removing leading '/' from absolute path names
# file: project
# owner: root
# group: tgroup
user::r-x
group::rwx
group:temp:r-x
mask::rwx
other::---

# 删除所有acl权限
[root@localhost ~]# setfacl -b /project
[root@localhost ~]# getfacl /project
getfacl: Removing leading '/' from absolute path names
# file: project
# owner: root
# group: tgroup
user::r-x
group::rwx
other::---

# 注意 权限没有+
[root@localhost ~]# ll -d /project
dr-xrwx---. 2 root tgroup 6 3月  15 11:57 /project

1.5,acl权限的递归及默认值

所属递归:指定目录下的所有文件及其子目录,都具体指定的ACL权限属性

注意:ACL权限只对已有的文件或目录起作用,对新加的不起作用

acl的默认值:如果希望新加的文件或目录都具有父目录所拥有的ACL权限属性,则需要设置默认值

# 切换到project目录
[root@localhost ~]# cd /project
# 设置acl权限
[root@localhost project]# setfacl -m u:tempuser:rx /project
[root@localhost project]# ll -d
dr-xrwx---+ 2 root tgroup 6 3月  15 11:57 .
# project目录已经设置好了ACL权限,在该目录中添加一个文件,文件并不具有ACL权限,因为在设置ACL权限时并没有指定递归属性
[root@localhost project]# touch abc.txt
[root@localhost project]# ll
总用量 0
-rw-r--r--. 1 root root 0 3月  15 18:35 abc.txt
#  设置ACL权限可以递归,注意:R参数的位置在此处是固定的,这算是Linux中命令的一个特例,Linux中命令参数的位置一般是不敏感的
[root@localhost project]# setfacl -m u:tempuser:rx -R /project
[root@localhost project]# ll /project
总用量 0
-rw-r-xr--+ 1 root root 0 3月  15 18:35 abc.txt
# 在设置了project目录递归ACL权限属性后,再在该目录中创建一个新的文件,此时发现新的文件并没有ACL权限,这说明ACL权限只对已有的文件或目录起作用,对新加的不起作用
[root@localhost project]# touch def.txt
[root@localhost project]# ll
总用量 0
-rw-r-xr--+ 1 root root 0 3月  15 18:35 abc.txt
-rw-r--r--. 1 root root 0 3月  15 18:36 def.txt
# 设置acl默认值,默认值的参数是d,可以和-R一起使用
[root@localhost project]# setfacl -m d:u:tempuser:rx -R /project[root@localhost project]# getfacl /project
getfacl: Removing leading '/' from absolute path names
# file: project
# owner: root
# group: tgroup
user::r-x
user:tempuser:r-x
group::rwx
mask::rwx
other::---
default:user::r-x
default:user:tempuser:r-x
default:group::rwx
default:mask::rwx
default:other::---

[root@localhost project]# touch www.txt
[root@localhost project]# ll
总用量 0
-rw-r-xr--+ 1 root root 0 3月  15 18:35 abc.txt
-rw-r--r--. 1 root root 0 3月  15 18:36 def.txt
#  该文件在设置规则之后,默认值之前创建,两头都不管,所以没有ACL权限属性
-r--rw----+ 1 root root 0 3月  15 18:37 www.txt

二,特殊位

2.1 SUID

什么是SUID?

  • SUID是对二进制可执行的文件才有效, 普通文件设置之后是没有意义的
  • 执行者对该程序有x权限
  • 当程序具有suid时,程序执行者在执行程序期间,会暂时获得该程序所有者的身份
  • 程序执行者所获取的属主身份,只在程序运行过程中有效

为什么需要SUID?

Linux中具有suid权限的文件,如passwd

[root@localhost ~]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz
[root@localhost ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27856 4月   1 2020 /usr/bin/passwd
[root@localhost ~]#

注意:passwd的权限中在文件所有者的权限中有一个“s”,这说明:

  • passwd执行程序具有suid权限
  • 在passwd执行期间会获取root权限
  • 同时所属组和其他用户是用户r和x权限

为什么需要这么设置权限?

  • passwd修改的实际上是/etc/shadow的内容,但该文件只有root超级管理员才能修改,一般用户不可以
  • 但一般用户应该可以修改自己的账户密码,这是正当的需求
  • 在passwd执行期间,让普遍用户暂时获取root用户的权限,以便于修改shadow文件,执行完成临时赋予的权限消失,这即满足了用户可以修改自己密码的需求,也照顾到了系统安全性。
  1. 怎么设置suid?
  • 字母方式
    • chmod u+s <文件名>
    • u代表设置的是suid
  • 数字方式
    • chmod 4755 <文件名>
    • 最前方的4表示设置的是suid,后面的755分别代码 所有者,所属组,其他人的权限
  1. 怎样移除suid
  • 设置设置权限
    • chmod 755 <文件名>
  • 字符方式
    • chmod u-s <文件名>

2.2,BIT粘着位权限

SBIT权限的特点:

  • SBIT权限只能针对目录有效
  • 普通用户对目录拥有w和x权限,即普通用户对目录有写入权限
  • 若没有SBIT,则普通用户可以删除目录下的所有文件,包括其他用户创建的文件;若目录有SBIT权限,则只用root用户可以删除所有文件,普通用户就算拥有w权限,也只能删除自己建立的文件,对于其他用户创建的文件则无权删除。
  • SBIT权限的设置只能是root用户,其他用户不可以
    # Linux中的tmp目录是使用SBIT权限的典型目录,注意权限部分最后的t字母
    [root@localhost ~]# ll -d /tmp
    drwxrwxrwt. 10 root root 218 10月  2 16:05 /tmp
    # 创建一个新用户,并设置密码
    [root@localhost ~]# useradd test
    [root@localhost ~]# passwd test
    # 切换到lisen用户,在/tmp目录下创建文件
    [lisen@localhost root]$ touch /tmp/abcd.txt
    # 切换到test用户,删除/tmp/目录下的abcd.txt文件,因为tmp目录具有SBIT权限,且abcd.txt
    # 文件不是当前用户创建,所以无权删除。
    [test@localhost root]$ cd /tmp
    [test@localhost tmp]$ ls
    abcd.txt
    abc.txt
    systemd-private-a092fa5008e44207b2cdbcae85170c80-chronyd.service-WocDs1
    test
    vmware-root_665-3988687359
    [test@localhost tmp]$ rm abcd.txt
    rm:是否删除有写保护的普通空文件 "abcd.txt"?y
    rm: 无法删除"abcd.txt": 不允许的操作
    # ---- 设置SBIT权限 ----
    [root@localhost /]# mkdir /test
    # 创建的目录默认的权限是755
    [root@localhost /]# ll -d /test
    drwxr-xr-x. 2 root root 6 10月  2 17:33 /test
    # 设置SBIT权限
    [root@localhost /]# chmod 1755 /test
    [root@localhost /]# ll -d /test
    drwxr-xr-t. 2 root root 6 10月  2 17:33 /test
    # 上面的设置test的其他用户没有写入的权限,所以SBIT权限的没有什么含义
    [root@localhost ~]# chmod 1777 /test
    [root@localhost ~]# ll -d /test
    drwxrwxrwt. 2 root root 6 10月  2 17:33 /test

    2.3,SGID

    相对于SUID只能设置可执行的文件,SGID可以设置可执行文件,也可以设置目录,SGID有如下特征:

  • 如果设置的对象是文件,则只能是可执行的二进制文件,且命令的执行者需要对文件有 x 权限
  • 命令执行过程中,组身份升级为该文件的所属组
  • 只有在程序执行的过程中才有效

使用案例

# 到根目录去
[root@localhost /]# cd ~
# centos7 默认没有安装locate 先执行安装
[root@localhost ~]# yum install mlocate
已加载插件:fastestmirror, langpacks
There are no enabled repos.
 Run "yum repolist all" to see the repos you have.
 To enable Red Hat Subscription Management repositories:
     subscription-manager repos --enable <repo>
 To enable custom repositories:
     yum-config-manager --enable <repo>
[root@localhost ~]# updatedb
[root@localhost ~]# locate inittab
/etc/inittab
/usr/share/augeas/lenses/dist/inittab.aug
/usr/share/man/zh_CN/man5/inittab.5.gz
/usr/share/vim/vim74/syntax/inittab.vim
# 查看locate命令,注意权限 所属组部分的s,这个s即表示开启了SGID,在执行该
# 命令时,会在执行期间临时将组身份升级为该文件的所属组
[root@localhost ~]# ll /usr/bin/locate
-rwx--s--x. 1 root slocate 40520 4月  11 2018 /usr/bin/locate
# locate命令需要使用mlocate.db文件,但该文件默认情况下普通用户是没有权限读的,当用户
# 运行locate命令时,临时获取了SGID属性,组身份升级为了该文件的所属组,所以具有了对
# mlocate文件的读权限。
[root@localhost ~]# ll /var/lib/mlocate/mlocate.db
-rw-r-----. 1 root slocate 855084 3月  15 18:51 /var/lib/mlocate/mlocate.db
#  ---- 为目录设置SGID的示例 -----
# 查看当前目录
[root@localhost ~]# pwd
/root
# 在tmp目录下创建一个目录
[root@localhost ~]# mkdir /tmp/test
# 给test赋予SGID的权限,(第一2表示SGID),如果需要清除SGID则可以使用 777
# 也可以使用 chmod g+s 文件或目录名
[root@localhost ~]# chmod 2777 /tmp/test
# 权限所属组部分的s,表示拥有SGID权限
[root@localhost ~]# ll -d /tmp/test
drwxrwsrwx. 2 root root 6 10月  2 14:58 /tmp/test
# 切换用户
[root@localhost ~]# su lisen
[lisen@localhost root]$ pwd
/root
# 普通用户无权在root目录下创建文件
[lisen@localhost root]$ touch abc.txt
touch: 无法创建"abc.txt": 权限不够
# 在home目录下创建一个文件,文件的默认的所属组为,当前用户的所属组
[lisen@localhost root]$ cd /home/lisen
[lisen@localhost ~]$ touch abc.txt
[lisen@localhost ~]$ ll
总用量 0
-rw-rw-r--. 1 lisen lisen 0 10月  2 15:01 abc.txt
# 在设置了SGID的目录中,创建文件,默认的所属组变成了目录的所属组,这是SGID的作用
[lisen@localhost ~]$ cd /tmp/test
[lisen@localhost test]$ touch bcd.txt
[lisen@localhost test]$ ll
总用量 0
-rw-rw-r--. 1 lisen root 0 10月  2 15:01 bcd.txt
[lisen@localhost test]$

三,文件系统属性chattr权限

命令格式: chattr [+-=] [权限选项] 文件或目录, + 增加权限, -删除权限, =赋予权限

权限选项:

  • i 如果文件被设置i属性,则不允许文件进行删除,改名,文件内容也不允许改动; 如果目录被设置了i选项,则只能修改目录下的文件数据,但不允许建立和删除文件。需要注意的是该属性对root用户也同样有效
  • a 如果对文件设置了a属性,则只能在文件中增加数据,但不能修改也不能删除数据; 如果对目录设置了a属性,那么只能在目录中建立或修改文件,但不能删除

使用示例

# 文件chattr属性示例
# 文件的i属性
# 创建一个文件,先不为其设置i属性,此时可以正常写入内容
[root@localhost ~]# touch abc
[root@localhost ~]# ll
总用量 4
-rw-r--r--. 1 root root    0 3月  15 19:11 abc
-rw-------. 1 root root 1284 3月   9 20:16 anaconda-ks.cfg
drwxr-xr-x. 2 root root    6 3月  11 16:06 a.txt
drwxr-xr-x. 2 root root    6 3月  11 16:05 sa
[root@localhost ~]# echo 12345 > abc
[root@localhost ~]# cat abc
12345
# 为abc文件设置i属性
[root@localhost ~]# chattr +i abc
# 一般ls命令不能显示文件的i属性,需要使用lsattr命令
[root@localhost ~]# lsattr -a abc
----i----------- abc
# 设置了abc文件的i属性后,测试修改其内容,无权修改,删除也不行
[root@localhost ~]# echo swt >> abc
-bash: abc: 权限不够
[root@localhost ~]# rm abc
rm:是否删除普通文件 "abc"?y
rm: 无法删除"abc": 不允许的操作
# 目录的i属性示例
[root@localhost ~]# mkdir /test
mkdir: 无法创建目录"/test": 文件已存在
[root@localhost ~]# cd /test
[root@localhost test]# ll
总用量 0
# 没有设置chattr属性之前,可以添加文件
[root@localhost test]# touch a.txt
[root@localhost test]# ls
a.txt
# 设置chattr属性之后,可以对原来的目录中有的文件进行修改,但不能在目录中
# 添加或删除文件(报权限不够)
[root@localhost test]# chattr +i /test
[root@localhost test]# lsattr -a /test/
----i----------- /test/.
---------------- /test/..
---------------- /test/a.txt
[root@localhost test]# echo asas >> /test/a.txt
[root@localhost test]# touch /test/b.txt
touch: 无法创建"/test/b.txt": 权限不够
[root@localhost test]# touch a.txt
[root@localhost test]# chattr +a a.txt
# 将内容写入文件
[root@localhost test]# echo 123 > a.txt
-bash: a.txt: 不允许的操作
# 将内容追加到文件
[root@localhost test]# echo sad >> a.txt
[root@localhost test]# cat a.txt
asas
sad
[root@localhost test]# cd /
#目录的a属性
[root@localhost /]# mkdir swt
[root@localhost /]# chattr +a swt
[root@localhost /]# cd /swt
[root@localhost swt]# touch a.txt
[root@localhost swt]# rm a.txt
rm:是否删除普通空文件 "a.txt"?y
rm: 无法删除"a.txt": 不允许的操作
[root@localhost swt]# mv a.txt b.txt
mv: 无法将"a.txt" 移动至"b.txt": 不允许的操作

四,sudo

作用:

  • root把本来只能由超级用户使用的命令赋予普通用户使用
  • sudo的操作对象是系统命令

使用场景:

  • 在需要将超级管理员的某些功能权限临时下方与普通用户时可以使用使用,(尚方宝剑)

修改sudo的配置(/etc/sudoers):

  • 修改格式:
    • root ALL=(ALL) ALL
    • 用户名 被管理主机IP=(可使用的身份) 授权命令(绝对路径)
    • %wheel ALL=(ALL) ALL
    • 组名 被管理主机IP=(可使用的身份) 授权命令 (绝对路径)
# 查看或修改sudo的配置,也可以直接编辑/etc/sudoers文件
[root@localhost ~]# visudo
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
## 增加lisen用户,可以执行服务器重启命令
lisen      ALL=/sbin/shutdown -r now
## 切换到到lisen用户后可以使用上面的命令,但是需要注意两个地方:1. 和sudo一起用,2. 使用命令
## 的绝对路径
如果要退出的话就ctrl+z

注意事项:

主要不要将vim等编辑工具配置到sudo中去,如果在sudo的配置文件中配置了vim,则普通用户在运行vim中就拥有了超级用户的身份,这是很危险的,使用普通用户有权修改任何文件。

用户,用户组,其他人

五,拥有者(user),拥有组(group),其他人(other)

         由于Linux是一个多人多任务的系统,因此经常会出现同一台机器同时有多个人进行操作,为了考虑每个人的隐私权以及每个人喜好的工作环境,所以文件的权限归属就至关重要。

         为了保障系统的安全性和文件的隐私性,一个文件针对不同权限的账户有着不同的权限,如下图

  如图所示,文件权限是由一个字符串所表示,其所代表的含义为

  其中,文档类型有如下表示方法:  

    d - 目录,例如上表档名为『.gconf』的那一行;
    - - 文档,例如上表档名为『install.log』那一行;
    l  - 连结档(link file);
    b - 装置文件里面的可供储存的接口设备(可随机存取装置);
    c - 装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。

  权限由rwx三个字幕表示,分别表示为可读、可写、可执行,如果没有该权限,则用“ - ”表示,对于目录来说,必须有x权限,否则无法读取目录内容

  如果文件名前面有“ . ”,则表示这个文档或目录是隐藏的

用户和用户组

  /etc/group  存储当前系统中的用户组信息

  注意:  

    1.当该组内只有一个用户,并且用户名和组名相同时,在组列表中,包含用户一列可以为空

    2.系统中root分组的组编号一定为0

    3.组号1~499为系统预留的组编号,一般是预留给系统安装的软件或者服务的编号,越早安装的软件或者服务的组编号约早。用户手动创建的用户组编号从500开始

    4.组密码占位符,无一例外,全部用x表示

  /etc/gshadow  存储当前系统中用户组的密码信息

  注意:

    1.如果组密码处为“*” “!”或者为空时候,则该组没有密码

    2.如果组管理者为空,则表示该组内所有成员都可以管理该组

  /ect/passwd  存储当前系统中所有的用户信息

  注意:

    在linux中,超级管理员root的用户编号一定为0

  /ect/shadow  存储当前系统中所有用户的密码信息

  注意:

    密码是一个单向加密过的字符串

  创建用户:

useradd xxx    //创建一个名为xxx的用户

  该命令执行后   

    1.会在/etc/passwd文件中添加xxx用户的信息

    2.会在/etc/group文件中添加一个名为xxx的用户组信息

passwd xxx    //为xxx用户设置密码

 useradd可以使用的参数包含

-d    设置该用户的home目录
    例如:useradd -d /home/helloworld hello    //新建hello用户,并且将其home目录设置为/home/helloworld

-u    设置其userid
    例如:useradd -u 668 hello    //新建一个hello用户,将他的id设置为668

-g    设置其主组
    例如:useradd -g root hello    //新建一个hello用户,并将其假如root组

-m    生成home目录的文件夹
    例如:useradd -m hello    //新建一个hello用户,并且在默认位置申城一个hello文件夹(/home/hello),并且将/etc/skel下的文件复制到该目录下

  修改用户信息

usermod 参数 用户名

  该命令可以使用的参数包括

-l    //修改新用户名
    例如:usermod -l helloworld hello    将hello用户名改为helloworld,但其home目录不改变

-u    //修改用户的userid
    例如:usermod -u 888 hello    将hello的userid改为888

-d    //修改用户的home目录

-g    //修改用户的主用户组

-L    //锁定用户,使其不能登录

-U    //解除锁定

  删除用户

userdel 参数 用户名

  可使用参数

-r 删除用户的同时将其home目录也删掉  

  创建用户组  

groupadd 组名

  修改用户组

groupmod -n 新组名 旧组名    //修改组名

groupmod -g 新组id    旧组id    修改组ID

  删除用户组

groupdel 组名

改变文档(目录)的所有者(所有组

  改变文档所有者 - chown命令(change owner),可使用参数 -R使得其子目录也同时修改

  改编文档所有组 - chgrp命令 (change group),可使用参数 -R使得其子目录也同时修改

  也可以使用

chown username:group 文件名 
来同时修改文档或目录的拥有者和所在组
修改文档的执行权限
chmod命令
chmod 参数 文件名

可以使用如下方法直接设置文件的权限
1.直接设置代表权限的数字
chmod 777(对应权限的数字) 文件名
2.给文件添加或减去某些权限
    chmod u+w 文件名    给user用户加上w权限
    chmod g-r 文件名    将group中的r权限去掉
    chmod a+x 文件名    给user、group、other全部加上x权限           

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/470113.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

上位机图像处理和嵌入式模块部署(qmacvisual预处理实战)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面&#xff0c;我们说了图像预处理&#xff0c;但是没有给出相应的实战案例。今天还是有必要做一个说明的。预处理方法虽然相关的算法很多&#…

Python中的线程池与进程池:并行编程的高效选择【第145篇—并行编程】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 Python中的线程池与进程池&#xff1a;并行编程的高效选择 在Python编程中&#xff0c;实现…

Tcl学习笔记(一)——环境搭建及基本语法

一、Tcl简介 TCL&#xff08;Tool Command Language&#xff0c;即工具命令语言&#xff09;是一种解释执行的脚本语言。所谓解释执行语言&#xff0c;是指其不需要通过编译和联结&#xff0c;而是直接对每条语句进行顺序解释、执行。 TCL包含语言和工具库&#xff0c;TCL语言主…

Zerotier 异地组网方案初探

前言 我之前想要异地组网的话&#xff0c;一般都采用内网穿透的方法&#xff0c;但是这个内网穿透有弊端就是都是要通过公网服务器转发流量&#xff0c;对于大流量的传输就比较不方便&#xff0c;我发现了Zerotier 这个工具非常的好用&#xff0c;是基于p2p的 这是一个类似于…

Python计算机二级选择易错题(一)

题目来源&#xff1a;python计算机二级真题&#xff08;选择题&#xff09; - 知乎 选择题第08&#xff0c;09套

MNN createFromBuffer(一)

系列文章目录 MNN createFromBuffer&#xff08;一&#xff09; MNN createRuntime&#xff08;二&#xff09; MNN createSession 之 Schedule&#xff08;三&#xff09; MNN createSession 之创建流水线后端&#xff08;四&#xff09; MNN Session::resize 之流水线编码&am…

AI写作:为你创造令人惊叹的内容

AI写作&#xff1a;为你创造令人惊叹的内容&#xff01;在当今信息爆炸的时代&#xff0c;内容创作已经成为吸引注意力、传达信息和建立品牌形象的重要手段。然而&#xff0c;随着人工智能技术的快速发展&#xff0c;AI写作正逐渐成为一种改变游戏规则的利器&#xff0c;为人们…

HarmonyOS NEXT应用开发之多文件下载监听案例

介绍 多文件下载监听在应用开发中是一个非常常见的需求。本示例将介绍如何使用request上传下载模块实现多文件下载监听&#xff0c;如监听每个文件下载任务的进度&#xff0c;任务暂停&#xff0c;下载完成等下载情况。每个应用最多支持创建10个未完成的任务&#xff0c;相关规…

【Godot4.2】2D导航04 - TileMap导航的逻辑

基于NavigationRegion2D 我们基于NavigationRegion2D的逻辑一文的场景结构&#xff0c;但是将NavigationRegion2D删除&#xff0c;更改为TileMap节点。 为TileMap创建Tileset&#xff0c;并创建一个导航层。在TileSet面板中&#xff0c;为草地和黄色泥土地面图块绘制可通行区…

②免费AI软件开发工具测评:通义灵码 VS 码上飞

前言 我又双叒叕来测评了&#xff01;上次给大家带来的是iFlyCode和CodeFlying两款产品的测评&#xff0c;受到了大家的一致好评~ 今天咱就继续来聊聊&#xff0c;这次我们选的的对象是通义灵码和码上飞&#xff0c;从名字上也能看到出来这两款产品一定是跟软件开发有关系的&…

机器视觉系统选型-镜头基础知识

广角镜头&#xff1a;焦距小于标准焦距50mm的。例如&#xff1a;16mm 景深大&#xff0c;聚焦距离更近 远距照像镜头&#xff1a;焦距大于标准焦距50mm的。例如&#xff1a;75mm 景深浅&#xff0c;放大远距离物体 变焦镜头&#xff1a;镜头焦距可调节&#xff0c;焦距有范围&a…

web前端框架设计第二课-Vue.js简介

web前端框架设计第二课-Vue.js简介 一.预习笔记 1.Vue.js概述 Vue.js是一套用于构建用户界面的渐进式框架。本质上是一个用于开发Web前端界面的库&#xff0c;其本身具有响应式编程和组件化的特点。 Vue.js的特性&#xff1a; 轻量级 数据绑定 应用指令 插件化开发 2.V…

面试八-git使用

1. 初始化&#xff08;git init 把这个目录变成git可以管理的仓库&#xff09; git init 2. 添加到暂存区里面去 git add readme.txt 3. 查看文件状态 git status 4. 提交到本地仓库 git commit -m " 版本信息“ readme.txt 5. 查看readme.txt文件到底改了什么内容…

大模型面试题最全总结,没有一道是送分题。。。

节前&#xff0c;我们组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂同学、参加社招和校招面试的同学&#xff0c;针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 今天分享…

视频素材免费下载素材库哪里有?推荐8个高清无水印素材网

在这个数字化时代&#xff0c;无论是专业的内容创作者还是日常的社交媒体使用者&#xff0c;我们都会寻找高质量的素材来丰富我们的作品或帖子。从令人震撼的摄影作品到高分辨率的视频素材&#xff0c;再到生动的GIF和必需的设计元素&#xff0c;素材的需求无处不在。 视频素材…

DZY-212中间继电器 DC 220V 板后接线 面板安装 JOSEF约瑟

系列型号: DZY-200系列中间继电器&#xff1b;DZY-201中间继电器&#xff1b; DZY-202中间继电器&#xff1b;DZY-203中间继电器&#xff1b; DZY-204中间继电器&#xff1b;DZY-205中间继电器&#xff1b; DZY-206中间继电器&#xff1b;DZY-207中间继电器&#xff1b; DZY-20…

Leetcode 70.爬楼梯

心路历程&#xff1a; 这道题是之前学院的一道复试题&#xff0c;大家都没怎么刷过算法题&#xff0c;只记得当年凭借几次试错自己把这道题做出来了&#xff0c;当时也不知道动态规划之类的。 正常来讲&#xff0c;这种找不到循环结构的题一般都是递归解决。 注意的点&#x…

js 中文乱码解决、乱码对照

1、js iso-8859-1转utf-8 在JavaScript中&#xff0c;可以使用内置的TextEncoder和TextDecoderAPI来实现ISO-8859-1编码和UTF-8编码之间的转换。以下是一个将ISO-8859-1编码的字符串转换为UTF-8编码的示例代码&#xff1a; function convertISO88591ToUTF8(isoString) {// 将…

上班族兼职宝典:五个副业赚钱项目助你财富增值

在快节奏的现代生活中&#xff0c;许多上班族已不再满足于固定的月薪&#xff0c;纷纷寻求额外收入来源以缓解生活压力。副业赚钱作为一种有效途径&#xff0c;正逐渐受到他们的青睐。为此&#xff0c;我们为上班族精心挑选了五种可行的副业赚钱方式&#xff0c;助力他们在工作…

蓝牙耳机连上电脑后播放音频一卡一卡的还有声音变形,电脑连接后总是容易断开蓝牙

蓝牙耳机连上电脑后播放音频一卡一卡的还有声音变形&#xff0c;电脑连接后总是容易断开蓝牙 问题描述问题排查可能6可能7电脑蓝牙驱动问题 结语&#xff1a; 问题描述 蓝牙耳机连上电脑后播放音频一卡一卡的还有声音变形&#xff0c;电脑连接后总是容易断开蓝牙。 关键之前我…