用户身份与文件权限

linux 身份号码

User IDentification # UID

系统管理员身份 UID:0
系统用户UID为1~999:Linux系统为了避免因某个服务程序出现漏洞而被黑客提权至整台服务器。默认服务程序会有独立的系统用户负责运行,进而有效控制被破坏范围。
普通用户UID从1000开始:是由管理员创建日常工作的用户

用户组

GID,Group IDentification
在同一个组中,用户享有相同的权限,便于管理用户和授予相关的权限。

useradd命令

创建新用户:useradd[选项] 用户名
参数

-d 指定用户的家目录(默认为/home/username)
-e 账户的到期时间,格式为YYYY-MM-DD
-u 指定该用户的默认UID
-g 指定一个初始的用户基本组(必须已存在)
-G 指定一个或多个扩展用户组
-N 不创建与用户同名的基本用户组
-s 指定该用户的默认Shell解释器

举例:
创建一个普通用户并指定家目录的路径、用户的UID以及Shell解释器

root@ji-virtual-machine:/home/ji# useradd -d /home/linux -u 8888 -s /sbin/nologin (jixxxang
root@ji-virtual-machine:/home/ji# id jixxxang
uid=8888(jixxxang) gid=8888((jixxxang) 组=8888(jixxxang)

groupadd 命令

用于创建群组:groupadd[选项]群组名

usermod命令

用于更改用户的属性,格式"usermod[选项] 用户名"
用户的信息存储在/etc/passwd中,也可以在该文件夹中直接修改,或者使用usermod命令
具体参数

-c 填写用户账号的备注信息
-d -m 参数-d与参数-m连用,可重新指定用户的家目录并自动把旧的数据转移过去。
-e 账户的到期时间,格式为YYYY-MM-DD
-g 变更所属用户组
-G 变更扩展用户组
-L 锁定用户禁止其登录系统
-U解锁用户,允许其登录系统
-s 变更默认终端
-u 修改用户的UID

实例
把本地登录用户加入到root用户组

root@ji-virtual-machine:/home/ji# usermod -G root ji
root@ji-virtual-machine:/home/ji# id ji
uid=1000(ji) gid=1000(ji) 组=1000(ji),0(root)

可以使用-u修改ji用户的UID号码值,-g修改用户的基本组ID,-G参数修改用户扩展组ID

root@ji-virtual-machine:/home/ji# usermod -u 8888 ji
usermod:UID “8888”已经存在
root@ji-virtual-machine:/home/ji# usermod -u 6666 ji
usermod:用户 ji 目前已登录

好似,登录已存在的用户就无法修改它的UID号码了

passwd

用于修改用户密码、过期时间、认证信息等。
格式为:passwd[选项][用户名]
普通用户只能使用passwd命令修改自身账户的密码,而root管理员则有权限修改其他人的密码。而且还不需要验证旧密码
passwd的参数如下

-l 锁定用户,禁止登录
-u 解除锁定,允许登录
--stdin 允许通过标准输入修改用户密码
如:echo"NewPassword"|passwd --stdin Username
-d 使用该用户可用空密码登录系统
-e 强制用户在下次登录时修改密码
-S 显示用户的密码是否被锁定,以及密码所采用的加密算法名称

实例
先修改密码

root@ji-virtual-machine:/home/ji# passwd
输入新的 UNIX 密码: 
重新输入新的 UNIX 密码: 
passwd:已成功更新密码
root@ji-virtual-machine:/home/ji# passwd ji
输入新的 UNIX 密码: 
重新输入新的 UNIX 密码: 
passwd:已成功更新密码

锁定账户,显示账户信息,解除锁定账户

root@ji-virtual-machine:/home/ji# passwd -l ji
passwd:密码过期信息已更改。
root@ji-virtual-machine:/home/ji# passwd -S ji
ji L 12/02/2021 0 99999 7 -1
root@ji-virtual-machine:/home/ji# passwd -u ji
passwd:密码过期信息已更改。
root@ji-virtual-machine:/home/ji# passwd -S ji
ji P 12/02/2021 0 99999 7 -1

userdel命令

用于删除用户,格式为"userdel[选项] 用户名"
不加-r参数的话,删除用户该用户的家目录会默认保留下来

-f 强制删除用户
-r 同时删除用户及用户家目录

文件权限与归属

文件类型以不同的字符来区分

- 普通文件
d 目录文件
l 链接文件
b 块设备文件
c 字符设备文件
p 管道文件

目录文件的权限

可读表示能够读取目录内的文件列表;可写表示能够在目录内新增、删除、重命名文件;而可执行表示能够进入该目录
rwx分别表示可读,可写,可执行
用数字表示即4,2,1,当权限为7时,可读可写可执行,为6时,可读可写,为5时,可读可执行,为3时,可写可执行。当然这是对于文件来说,文件上面还有文件所属组,其他用户。这些权限可以并不是相加,而是每个不同的部分相加。如765.等分别对应的文件权限为文件所有者,文件所属组,其他用户。

文件的特殊权限

单纯的rwx权限无法满足我们对安全和灵活性的需求,因此便有了SUID、SGID与SBIT的特殊权限位。

SUID

对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时获得程序所有者的身份。
具体为rwx变为rws,若是rw-变为rwS。

待补

SGID

1.让执行者零食获得属组的权限(文件所属组的权限)
2.在某个目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置)

两个相关属性命令

chmod命令:设置文件或目录的权限,
格式为"chmod [参数] 权限 文件或目录名称".
例如:
把一个文件的权限设置成其所有者可读可写可执行,所属组可读可写,其他人没有任何权限。则相应的字符法表示为rwxrw----,对应的数字法表示为760.
实例
我感觉没啥问题,又肯是我的目录选取错误,这个权限没啥变化

ji@ji-virtual-machine:~$ ls -al test
总用量 20
drwxrw----   3 ji ji 4096 11月 30 17:23 .
drwxr-xr-x  28 ji ji 4096 12月  2 08:51 ..
-rw-rw-r--   1 ji ji 2814 11月 30 16:56 a.txt
drwxr-xr-x 131 ji ji 4096 11月 30 14:50 etc
-rwxrwxr-x   1 ji ji   18 12月 13  2020 test.py
ji@ji-virtual-machine:~$ chmod 766 test
ji@ji-virtual-machine:~$ ls -al test
总用量 20
drwxrw-rw-   3 ji ji 4096 11月 30 17:23 .
drwxr-xr-x  28 ji ji 4096 12月  2 08:51 ..
-rw-rw-r--   1 ji ji 2814 11月 30 16:56 a.txt
drwxr-xr-x 131 ji ji 4096 11月 30 14:50 etc
-rwxrwxr-x   1 ji ji   18 12月 13  2020 test.py

刚才的chmod是设置文件或目录的权限,这可以使用chown设置文件或目录的所有者和所属组
格式:“chown[参数] 所有者:所属组 文件或目录名称

SBIT

确保用户只能删除自己的文件,而不能删除其他用户的文件。
用法待补

1并未看懂

文件的隐藏属性

chattr命令

用于设置文件的隐藏权限
格式"chattr [参数] 文件",如果想把某个隐藏功能加入到文件上,在其后加上"+参数”,如果想把某个隐藏功能移出文件,则需要追加"-参数"
chattr参数用于隐藏权限的参数

待补

实例;
好像要root用户才行,隐藏起来之后,rm命令就无法删除该文件了

ji@ji-virtual-machine:~$ echo "hello world" > ji
ji@ji-virtual-machine:~$ ls
echo_menu.sh  etc1.tar.gz  examples.desktop  first.sh  jiance.sh    readm.txt  sohu.html  test.py  test.tst  user_add.sh    公共的  视频  文档  音乐
etc           etc.tar.gz   exit.sh           ji        pratice.txt  sleep.sh   test       test.sh  test.txt  www.baidu.com  模板    图片  下载  桌面
ji@ji-virtual-machine:~$ chattr +a ji
chattr: 不允许的操作 while setting flags on ji

lsattr命令

用于显示文件的隐藏属性,格式为"lsattr [参数] 文件",文件的隐藏权限必须使用lsattr命令查看,平时使用的ls之类的命令则看不出。

文件访问控制列表

前文所讲的权限都是针对某一类用户设置的。如果希望对某个指定的用户进行单独的权限控制,就需要用来ACL(文件访问控制列表)
基于普通文件或目录设置ACL其实就是针对指定的用户或用户组设置文件或目录的操作权限。对文件中设置ACL,则可使得文件不再继承其所在目录的ACL.对目录设置ACL,则目录中的文件会继承其ACL.
没有设置ACL之前,对root管理员的家目录设置;
总是报错,好似也看不出什么来;ubuntu的root状态下命令提示符是#,而红帽7是$

ji@ji-virtual-machine:~$ sudo su
[sudo] password for ji: 
root@ji-virtual-machine:/home/ji# $ cd /root
$:未找到命令
root@ji-virtual-machine:/home/ji# cd /root
root@ji-virtual-machine:~# ls
root@ji-virtual-machine:~# $ exit
$:未找到命令
root@ji-virtual-machine:~# exit
exit
ji@ji-v

setfacl命令

用于管理文件的ACL规则
格式:“setfacl [参数] 文件名称”
针对目录文件需要使用-R递归参数,针对普通文件则使用-m参数,删除某个文件的ACL。可以使用-b参数

看不懂实例

getfacl命令

用于显示文件上设置的ACL信息。格式为"getfacl 文件名称"
ubuntu中并不行

root@ji-virtual-machine:/home/ji# getfacl /root
getfacl: 从绝对路径名尾部去除" / "字符。
# file: root
# owner: root
# group: root
user::rwx
group::---
other::---

su命令与sudo服务

su切换用户身份

root@ji-virtual-machine:/home/ji# su - ji # -号可加可不加,但最好加
ji@ji-virtual-machine:~$ sudo su
ji 不在 sudoers 文件中。此事将被报告。
## su root切换root
ji@ji-virtual-machine:~$ su root
密码: 
root@ji-virtual-machine:/home/ji# ^C

sudo命令 把执行权限赋给指定用户

sudo服务配置原则,在保证普通用户完成相应工作的前提下,尽可能少的赋予额外的权限。
格式:
"sudo [参数] 命令名称"
可用参数及列表

-h 列出帮助信息
-l 列出当前用户可执行的命令
-u 用户名或UID值 以指定的用户身份执行命令
-k 清空密码的有效时间,下次执行suodo时需要再次进行密码验证
-b 在后台执行指定的命令
-p 更改询问密码的提示语

sudo的功能如下:
有些我并未理解
1.限制用户执行的指令
2.记录用户执行的每一条命令
3.配置文件(/etc/sudoers)提供集中的用户管理、权限与主机等参数
验证密码的后5分钟内(默认值)无需再让用户再次验证密码

visudo命令

是配合sudo命令来配置用户权限的。(只有root管理员才可以使用visudo命令编辑sudo服务的配置文件)
就是该命令打开一个配置文件,在其中配置sudo命令的相关权限(对于用户把)

ji@ji-virtual-machine:~$ sudo ls root
[sudo] password for ji: 
ji 不在 sudoers 文件中。此事将被报告。

看来还需配置sudoers文件了

努力拼搏吧,不要害怕,不要去规划,不要迷茫。但你一定要在路上一直的走下去,尽管可能停滞不前,但也要走。
原文地址:https://www.cnblogs.com/wkhzwmr/p/15632371.html