Linux权限与sudoers


Linux基础权限

权限字母表示法

u:User 属主 用户

g:Group 属组 小组

o:Other 其他人(acl)

a:ALL 所有用户

对于文件和目录:

r:Read cat 文件 ls 目录 查看

w:Write touch 文件 mkdir 目录 vim 文件 w

x:Execute ./脚本 命令

+ 增加权限
- 减少权限
= 需要的权限  u=rwx g=rx o=r  a=rx

chmod u+w fileName (文件/目录)

命令->shell (bash zsh csh)->执行对应的程序

Linux中一切皆文件

程序也是文件,可执行文件

type命令判断一个命令是否是Shell自带的命令
file命令查看文件的类型

# 可执行文件
[root@localhost ~]# file /bin/vim
/bin/vim: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=3dc92fe1ec8c5aa3d85b11ff67c0300b966f46b9, stripped
# 空文件
[root@localhost ~]# file a.txt 
a.txt: empty
[root@localhost ~]# vim a.txt 
# 纯英文的文件
[root@localhost ~]# file a.txt 
a.txt: ASCII text # ASCII是英文的字符集
# 包含非英文字符的文件
[root@localhost ~]# file a.txt 
a.txt: UTF-8 Unicode text
# 目录
[root@localhost ~]# file /root
/root: directory
# 块文件
[root@localhost ~]# file /dev/sda
/dev/sda: block special
# 详细信息是b以开头
[root@localhost ~]# ls -l /dev/sda
brw-rw----. 1 root disk 8, 0 1月  16 08:34 /dev/sda

可执行文件:
    二进制可执行文件(由源码编译生成的),可以被CPU直接执行,执行速度块
    脚本(shell,python,js,lua) (由语言对应的解释器调用执行),执行速度慢
[root@localhost ~]# ls -l
总用量 12
-rw-------. 1 root root 1568 1月  10 11:05 anaconda-ks.cfg
-rw-r--r--. 1 root root   16 1月  16 09:56 a.txt
-rwxr-xr-x. 1 root root   93 1月  16 10:16 hello.py
drwxr-xr-x. 2 root root    6 1月  16 10:47 mydir

从左向右
1  文件类型 - 普通文件 d 目录 l(link) 链接文件 b 块文件 s 网络文件 p 管道文件 
2-10 权限位  三个一组  属主 数组 其他用 -表示没有权限 r读 w写 x执行 
11 ./+  SElinux安全/拥有acl权限
12 硬链接数量 .本目录的硬链接 ..上层目录的硬链接  
13 属主
14 属组
15 文件大小
16 修改时间
17 文件名
权限 文件 目录
r 查看文件中内容可以cat\less等命令 查看目录中的文件ls
w 可写、可修改 创建、移动文件、删除文件、复制文件,修改文件==(包括修改属主和属组)==,其他用户拥有该目录w权限时,是可以修改目录中的文件(通过修改文件属主、属组实现修改内容。)
x 可执行,对脚本和二进制程序 是否可以进入该目录,查看权限受限只能看到文件名。
s/S 允许其他用户使用属主或属组的权限执行该程序(有x权限时显示小写的s,没有x权限显示大S)只针对程序有效passwd 无效
t/T 无效 必须有x权限,才能生效,粘贴位权限,拥有该权限的目录,只允许==属主和root用户==修改、删除文件,其他用户不能修改、删除 /tmp

数字表示法

chmod 644 fileName  
rw-r--r--  
u=rw g=r o=r
-R 将目录和目录下所有文件都设置为该权限。

chmod u+s 程序  # 让其他用户以属主(root)的身份运行该程序。
chmod g+s 程序  # 让其他用户以属组(root)的身份运行该程序。
chmod o+t 目录  # 只允许root和属主对该目录下的文件进行修改和删除。  
数值 权限 特殊权限
0 --- ---|---|---
==1== --x ---|---|--t
==2== -w- ---|--s|---
3 -wx ---|--s|--t
==4== r-- --s|---|---
5 r-x --s|---|--t
6 rw- --s|--s|---
7 rwx --s|--s|--t

修改属主和属组

# 只有root权限才能修改其他用户文件的属主和属组
chown 属主:属组   文件
chown 属主:属组   目录
chown 属主:属组 -R 目录 # 递归修改目录中所有的文件和目录属主和属组

chgrp 属组   文件
chgrp 属组 -R 目录

su 和 sudo

su 切换用户
su 用户  # 在当前目录下直接切换用户
su - 用户 # 切换用户并到用户自己的家目录,加载自己环境变量
exit 退出当前用户
# 普通用户切换其他用户需要密码。
# root用户切换其他用户不需要密码。

# 需要将普通用户配置到/etc/sudoers中才能生效。
sudo 提权,让普通用户临时拥有root部分或全部的权限。
sudo 命令

这是一个关于 Linux 系统中 sudo 配置文件 /etc/sudoers 中的一行规则。

root ALL=(ALL) ALL 的解释如下:
root: 表示这条规则适用于 root 用户。
ALL=(ALL): 表示 root 用户可以作为任意用户 (ALL) 执行任意命令 (ALL)。
ALL: 表示 root 用户可以在任意主机执行任意命令,没有限制。
换句话说,这行规则授予了 root 用户在 Linux 系统中完全的管理员权限,可以执行任何命令,无论是在本地还是远程环境。这是非常高级和危险的权限设置,只应该在必要的情况下给予。
su - tom
passwd        # 只能修改自己的密码
sudo passwd    # 使用sudo时,修改的是root密码
sudo passwd lily # 修改其他用户密码 

visudo # 打开 /etc/sudoers文件

tom     ALL=(ALL)  NOPASSWD:ALL,!/usr/bin/passwd,!/usr/sbin/reboot
用户名  所有主机名=(所有用户)  不需要密码:所有命令,!取反,除了某些命令。 

[root@localhost ~]# su - tom
[tom@localhost ~]$ passwd
更改用户 tom 的密码 。
为 tom 更改 STRESS 密码。
(当前)UNIX 密码:
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[tom@localhost ~]$
[tom@localhost ~]$ sudo passwd
[sudo] tom 的密码:
对不起,用户 tom 无权以 root 的身份在 localhost.localdomain 上执行 /bin/passwd。
# usermod -aG 组名 用户名 
# -a append 将用户追加到组中
# -G 指定组名
# 将lily和tom添加到新建的组中
# useradd lily 
# useradd tom 
# 创建新的组
[root@localhost ~]# groupadd admin
[root@localhost ~]# usermod -aG admin lily
[root@localhost ~]# usermod -aG admin tom
[root@localhost ~]# visudo 
# 给admin组设置权限,/etc/sudoers任意位置添加如下内容
%admin ALL=(ALL) NOPASSWD:ALL,!/usr/bin/passwd,!/usr/sbin/reboot
# ESC:wq 保存退出
[root@localhost ~]# su - tom
上一次登录:三 1月 17 11:31:33 CST 2024pts/1 [tom@localhost ~]$ sudo passwd
对不起,用户 tom 无权以 root 的身份在 localhost.localdomain 上执行 /bin/passwd。
[tom@localhost ~]$ sudo reboot
对不起,用户 tom 无权以 root 的身份在 localhost.localdomain 上执行 /sbin/reboot。

系统信息查看命令

free 查看系统内存占用情况。

  • -h 根据大小显示合适单位 K M G T P Z S
[root@localhost ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           1.8G        195M        1.5G        9.5M        138M        1.4G
Swap:          3.5G          0B        3.5G

df 查看磁盘占用率

  • -h 根据大小显示合适单位 K M G T P Z S
[root@localhost ~]# df -h
文件系统        容量  已用  可用 已用% 挂载点
devtmpfs        900M     0  900M    0% /dev
tmpfs           910M     0  910M    0% /dev/shm
tmpfs           910M  9.6M  901M    2% /run
tmpfs           910M     0  910M    0% /sys/fs/cgroup
/dev/sda2       116G  2.6G  114G    3% /
/dev/sda1       509M  178M  332M   35% /boot
tmpfs           182M     0  182M    0% /run/user/0

ps 查看进程的运行情况

[root@localhost ~]# ps -aux | grep top
root       2026  0.0  0.1 161968  2196 pts/1    S+   10:46   0:00 top
root       2033  0.0  0.0 112824   976 pts/0    S+   10:48   0:00 grep --color=auto top

top 实时监控系统的一个运行状态

  • m 查看内存占用
  • t 查看CPU的运行状态
  • q 退出
[root@localhost ~]# top
top - 10:58:33 up  1:23,  1 user,  load average: 0.00, 0.01, 0.05     Tasks: 117 total,   1 running, 116 sleeping,   0 stopped,   0 zombie
%Cpu(s):   0.0/0.0     0[
KiB Mem : 19.3/1862816  [||||||||||
KiB Swap:  0.0/3668988  [

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+
   978 root      20   0  273160   8948   3752 S   0.3  0.5   0:09.25
     1 root      20   0  193932   7108   4164 S   0.0  0.4   0:01.79
     2 root      20   0       0      0      0 S   0.0  0.0   0:00.01
     4 root       0 -20       0      0      0 S   0.0  0.0   0:00.00
     5 root      20   0       0      0      0 S   0.0  0.0   0:00.01
     6 root      20   0       0      0      0 S   0.0  0.0   0:00.13
     7 root      rt   0       0      0      0 S   0.0  0.0   0:00.31
     8 root      20   0       0      0      0 S   0.0  0.0   0:00.00
     9 root      20   0       0      0      0 S   0.0  0.0   0:00.71
    10 root       0 -20       0      0      0 S   0.0  0.0   0:00.00

which 查找命令对应程序的所在路径。

[root@localhost ~]# which passwd
/usr/bin/passwd
[root@localhost ~]# which ls
alias ls='ls --color=auto'
        /usr/bin/ls
[root@localhost ~]# ls
anaconda-ks.cfg  file1.txt   file1.txz~  lndir  mydir2
a.txt            file1.txt~  hello.py    mydir
[root@localhost ~]# which chmod
/usr/bin/chmod