文件权限管理
- 一 文件权限管理之基本权限
- 基本权限介绍
- 设置权限
- 权限对文件/目录的意义
- 文件:`ls -l 文件名`
- 目录:`ls -dl 文件名`
- 例1:要想在目录下创建\删除内容:对目录的x权限+对目录的w权限
- 例2:要浏览目录下内容:对目录的x权限+对目录的r权限
- 例3:要执行目录下程序:对目录的x权限+对文件的x权限,如果文件是解释型语言的脚本程序,还需要对文件有r权限
- 二 文件权限管理之特殊权限
- 外援详解
- `SUID`
- `SGID`
- 权限设定方法
- 文件权限位表示:
- `SGID`相关说明:
- `SBIT`
- 三 文件权限管理之`chattr`
- 简介
- `chattr`命令语法
- `chattr`使用实例
- `lsattr`命令语法
- `lsattr`使用实例
- 四 权限管理之su、sudo
- su切换用户与sudo提权
- 介绍
- `su`切换用户
- 储备知识
- `bash shell`配置文件介绍(文件主要保存用户的工作环境)
- 配置文件的应用顺序
- 执行登录与非登录`shell`
- `sudo`提权
- 配置(两种编辑方式)
- `visudo`(会提示语法错误,推荐使用)
- `vim /etc/sudoers`
- `Sudo` 常用参数
- `sudo`实例
把一个用户加入了一个组,该用户就拥有了该组的权限,当一个用户要操作某个文件时,系统会依次检
索该用户是否是该文件的拥有者,其次是组成员,最后是其他人,如果扫描到是拥有者,则具备拥有者
的权限,不必往后扫描,以此类推
一 文件权限管理之基本权限
基本权限介绍
-
基本权限类型
r
:可读=》4
w
:可写=》2
x
:可执行=》1
-
权限的归属
属主:u
属组:
g
其他人:
o
例如
输入:ls -l a.txt
返回:-rw-r--r-- 1 root root 1146 Jul 16 18:42 a.txt
分别代表:
权限
,硬链接个数
,属主
,属组
,文件所占用的空间(以字节为单位)
,文件(目录)最近访问(修改)时间
,文件名
-
文件类型:
-
:文本文档
d
:目录
b
:设备block
c
:字符设备
s
:套接字文件
l
:软链接
设置权限
- 修改属主、属组
chown cm.hr file1
# 改属主、属组
chown cm file1
# 只改属主
chown .hr file1
# 只改属组
chown -R /test
# 递归修改 - 修改
u
、g
、o
对应的权限- 加减法
chmod u+x,g-w,o+r a.txt
- 赋值
chmod a=rwx a.txt
chmod a=- a.txt
chmod ug=rw,o=r file1
- 数字
chmod 644 file1
chmod -R 777 xxx/
- 加减法
- 注意:把某一个非属主用户添加到文件的属组里,他就拥有了该组的权限,而不再是其他人
权限对文件/目录的意义
文件:ls -l 文件名
r
:可以cat读取文件内容
w
:可以修改文件
x
:可以执行文件代码,如果该文件的代码是编译好的结果,那么只有x权限即可执行,但如果该文件的代码是一个解释型的脚本程序,则需要配合r权限才可执行
目录:ls -dl 文件名
r
: 可以ls浏览文件下的内容
w
:可以在目录下创建新文件or目录
x
:
- 可以执行目录下的程序,除了对目录有执行权限外,还要对程序文件有执行权限才行。
- 可以正常切换到目录下
- 涉及到多层目录如
/a/b/c
,需要对每一级都有x
权限才可以正常走到下一级
一:对文件夹的操作(不操作文件内容),需要当前用户具备的权限
- 对沿途所有文件夹有
rx
权限- 对目标文件夹有
r
或w
权限
r
-》可以浏览
w
-》可以创建、删除、移动子文件和子目录
实验:复制当前终端,登录普通用户,root用户修改权限后查看普通用户的权限变化。
二:对文件的操作(操作文件内容),需要当前用户具备的权限
- 对沿途所有文件夹有
x
权限- 对目标文件有
r
或w
权限
r
-》可以读取文件内容
w
-》可以修改文件内容
!!!注意!!!
储备知识:
vim
修改的原理是将源文件删掉,然后再将内容的内容覆盖写入了新文件,新文件名重命名为原文件名
例子:
- 当前用户对沿途所有文件夹都有
x
权限- 并且当前用户对目标文件夹有
w
权限- 但是当前用户对目标文件没有
w
权限
此时当前用可以
vim
编辑文件内容,并且可以wq!
强制保存退出完成文件修改,其实是将源文件删掉了,可以
通过查看前后操作的文件inode
号来确定
stat 文件名
可以查看文件iNode
信息
实验:root
用户创建相应目录和文件,并修改权限信息,普通用户强制修改文件内容,查看iNode
变化。
例1:要想在目录下创建\删除内容:对目录的x权限+对目录的w权限
- 设置权限
mkdir -p a/b/c
chmod -R o=x a # 其他人o对当前目录及其子目录都有x权限
chmod o+w a/b/c # 其他人o对/a/b/c目录有w权限
- 查看权限
ls -dl a
#返回:drwxr-x--x 3 root root 4096 Aug 11 16:24 a
ls -dl a/b
#返回:drwxr-x--x 3 root root 4096 Aug 11 16:24 a/b
ls -dl a/b/c
#返回:drwxr-x-wx 2 root root 4096 Aug 11 16:25 a/b/c
- 验证
su - cm
#返回:Last login: Tue Aug 11 16:17:28 CST 2020 on pts/2
touch a/b/c/1.txt
exit
#返回:logout
ls a/b/c/
#返回:1.txt
例2:要浏览目录下内容:对目录的x权限+对目录的r权限
mkdir -p a/b/c
chmod -R o=x a
chmod o+r a/b/c
touch a/b/c/{1..3}.txt
su - cm
#返回:Last login: Tue Aug 11 16:27:33 CST 2020 on pts/2
ls a/b/c
#返回:1.txt 2.txt 3.txt
例3:要执行目录下程序:对目录的x权限+对文件的x权限,如果文件是解释型语言的脚本程序,还需要对文件有r权限
mkdir -p a/b/c
chmod -R o=x a/b/c
cp /bin/echo a/b/c
chmod o=x a/b/c/echo
su - cm
#返回:Last login: Tue Aug 11 16:30:17 CST 2020 on pts/2
./a/b/c/echo "hello cm"
#返回hello cm
二 文件权限管理之特殊权限
外援详解
详解:https://www.cnblogs.com/linhaifeng/articles/13357542.html
suid
4
sgid
2
sticky
1
SUID
普通用户不是root
也不属于root
组,于是它对/etc/shadow
文件没有任何权限
ll /etc/shadow
#返回:---------- 1 root root 1109 Aug 11 16:11 /etc/shadow`
但是普通用户却可以用passwd命令修改密码,而修改密码都是在修改/etc/shadow文件,如何实现
的???
ll `which passwd`
#返回:-rwsr-xr-x 1 root root 27856 Aug 9 2019 /bin/passwd
可以看到一个s
权限,s
权限的特殊之处
SUID
权限仅对二进制可执行文件有效- 如果执行者对于该二进制可执行文件具有
x
的权限,执行者将具有该文件的所有者的权限 - 本权限仅在执行该二进制可执行文件的过程中有效
权限设定方法:
- 字母表示法:
chmod u+s FILE... chmod u-s FILE...
- 数字表示法:
chmod 4755 FILE
添加SUID
权限到二进制程序文件(添加到DIR无意义)
在普通三位数字权限位之前,用4
代表添加的SUID
位
chmod 0xxx ....
可以删除文件的SUID
(无法删除目录的SUID
)
示例:
ll `which cat`
#返回:-rwxr-xr-x. 1 root root 54160 10月 31 2018 /usr/bin/cat
chmod 4755 `which cat` # 或者 chmod u+s `which cat`
ll `which cat`
#返回:-rwsr-xr-x. 1 root root 54160 10月 31 2018 /usr/bin/cat
su - cm
cat /etc/shadow # 可以看到内容
工作原理:
环境前提:
- linux中有一个二进制程序
cat
,属主属组均为root
- linux中有一个系统文件
/etc/shadow
,属主属组均为root
- 我们创建一个普通用户叫
user1
user1
具有对cat
的执行权限user1
不具有对/etc/shadow
的任何权限
-
默认情况下:
user1
执行cat
,系统创建一个cat
进程,进程的属主属组取程序发起者,也就是user1:user1
cat
进程访问/etc/shadow
,由于进程属主属组是user1:user1
,与/etc/shadow
的属组属主都不匹配,所以被拒绝访问.❌ -
给
cat
设置SUID
之后
user1
执行cat
.系统创建一个cat
进程,进程的属主取cat
的属主,属组取程序发起者,就是root:user1
cat
进程访问/etc/shadow
,由于进程属主是root
,与/etc/shadow
的属主匹配,所以被允许✔
例:
准备环境:
mkdir /test
chmod 777 /test/
echo 1111 > /test/a.txt
chmod 000 /test/a.txt
chown user1.group1 /test/a.txt
chown cm.devops /usr/bin/cat
chmod u+s /usr/bin/cat
实验:
[root@cm ~]# ll /test/a.txt # 目标文件的属主:user1,属组:group1 ----------. 1 user1 group1 4 10月 29 18:31 /test/a.txt
[root@cm ~]# ll /usr/bin/cat # 命令文件的属主:cm -rwxr-xr-x. 1 cm devops 54160 10月 31 2018 /usr/bin/cat
[root@cm ~]# su - lili -c "cat /test/a.txt" # lili切换为cm用户执行,cm用户没有对上a.txt的属主,所以直接被当成其他人,没有任何权限
cat: /test/a.txt: 权限不够
[root@cm ~]# chmod o+r /test/a.txt
[root@cm ~]# su - lili -c "cat /test/a.txt"
111
[root@cm ~]# chmod o-r,g+r /test/a.txt
[root@cm ~]# ll /test/a.txt
----r-----. 1 user1 group1 4 10月 29 18:31 /test/a.txt
[root@cm ~]# usermod -a -G group1 cm
[root@cm ~]# ll /usr/bin/cat # 确保suid还在
-rwsr-xr-x. 1 egon devops 54160 10月 31 2018 /usr/bin/cat
[root@cm ~]# id cm
uid=1005(cm) gid=1005(cm) 组=1005(cm),1003(group1)
[root@cm ~]# su - lili -c "cat /test/a.txt" # lili--->cm,cm用户没有对上a.txt的属主,所以直接被当成其他人,虽然此时cm属于文件a.txt的属组group1的成员,但是对suid来说那没用
cat: /test/a.txt: 权限不够
[root@cm ~]# su - cm -c "cat /test/a.txt" # 如果当前用户与suid的用户重叠,那么就无所谓用户转换,同样会按照:属主、属组、其他人的次序依次对照
1111
SGID
权限设定方法
- 字母表示法:
chmod g+s DIR/FILE
chmod g-s DIR/FILE
- 数字表示法:
chmod 2755 DIR/FILE
添加SGID
到目录或文件
在普通数字权限位前,用2
代表添加SGID
位
chmod 0755 DIR/FILE
删除文件的SGID
,(目录不受影响)
chmod 755 DIR/FILE
同上
文件权限位表示:
[root@localhost learn]# ll file1.txt
-rwxr-sr-x. 1 cm hr 0 Nov 24 08:22 file1.txt
SGID
相关说明:
-
作用在二进制程序上时:
执行SGID
权限的程序时,此用户将继承此程序的所属组权限 -
作用于目录上时:
此文件夹下所有用户新建文件都自动继承此目录的用户组。当
SGID
作用于普通文件时,和 SUID 类似,在执行该文件时,用户将获得该文件所属组的权限。
当SGID
作用于目录时,意义就非常重大了:
当一个用户对某一目录有写和执行权限时,该用户就可以在该目录下建立文件
如果该目录同时用SGID
修饰,则该用户在这个目录下建立的文件都是属于这个目录所属的组。[root@localhost ~]# mkdir /test [root@localhost ~]# chmod g+s /test/ # 等同于chmod 2755 /test/ [root@localhost ~]# ll -dl /test/ drwxr-sr-x 2 root root 6 8月 11 17:06 /test/ [root@localhost ~]# chown .cm /test/ # 后期任何人在该目录下创建的文件or目录的属组都是cm
SBIT
其实 SBIT
与 SUID
和 SGID
的关系并不大。
SBIT
是 the restricted deletion flag or sticky bit 的简称,有时也称为Sticky。粘滞位
权限设定方法:
- 字母表示法:
chmod o+t DIR...
chmod o-t DIR...
chmod +t DIR...
- 数字表示法:
chmod 1755 DIR
在普通数字权限位前,用1代表添加Sticky
位
文件权限表示:
输入:ll -d tmp
返回:drwxrwxrwt. 2 root root 19 Nov 17 20:02 tmp
- 文件other位的
x
权限,用t
代替.表示被设置了Sticky
如果other
位没有x
权限,会显示为大写T,表示有故障(权限无效)
相关说明:
对于一个多人可写的目录,如果设置了
sticky
,则每个用户仅能删除和改名自己的文件或目录;
只能作用在目录上.普通文件设置无意义,且会被linux内核忽略
用户在设置Sticky
权限的目录下新建的目录不会自动继承Sticky
权限。
实验:
[root@localhost learn]# mkdir -p dir1/test{1..4}
[root@localhost learn]# useradd user01
[root@localhost learn]# useradd user02
[root@localhost learn]# chown -R user01:user01 dir1/test1
[root@localhost learn]# chown -R user01:user01 dir1/test2
[root@localhost learn]# chown -R user02:user02 dir1/test3
[root@localhost learn]# chown -R user02:user02 dir1/test4
[root@localhost learn]# ll dir1/
total 0
drwxr-xr-x. 2 user01 user01 6 Nov 24 11:13 test1
drwxr-xr-x. 2 user01 user01 6 Nov 24 11:13 test2
drwxr-xr-x. 2 user02 user02 6 Nov 24 11:13 test3
drwxr-xr-x. 2 user02 user02 6 Nov 24 11:13 test4
[root@localhost learn]# chmod 1777 dir1/
[root@localhost learn]# ll -d dir1
drwxrwxrwt. 6 root root 58 Nov 24 11:13 dir1
测试:
[root@localhost learn]# su - user01
[user01@localhost ~]$ cd /usr/local/learn/
[user01@localhost dir1]$ ll
total 0
drwxr-xr-x. 2 user01 user01 6 Nov 24 11:13 test1
drwxr-xr-x. 2 user01 user01 6 Nov 24 11:13 test2
drwxr-xr-x. 2 user02 user02 6 Nov 24 11:13 test3
drwxr-xr-x. 2 user02 user02 6 Nov 24 11:13 test4
[user01@localhost dir1]$ mv test3 user01
mv: cannot move ‘test3’ to ‘user01’: Operation not permitted
[user01@localhost dir1]$ touch test3/1.txt
touch: cannot touch ‘test3/1.txt’: Permission denied
SBIT
目前只对目录有效,用来阻止非文件的所有者删除文件。比较常见的例子就是 /tmp
目录:
权限信息中最后一位
t
表明该目录被设置了SBIT
权限。SBIT
对目录的作用是:当用户在该目录下创建新文件或目录时,仅有自己和root
才有权力删除,主要作用于一个共享的文件夹。
三 文件权限管理之chattr
简介
你是否遇到过文件或目录具有可读写权限,但是使用
root
用户删除、修改时提示"Operation not permitted"
的情况。可能是由于chattr
设置了文件的隐藏保护权限导致。通过chattr
命令修改文件或目录属性能够提高系统的安全性。与chmod
命令相比,chmod
只是改变文件的读写、执行权限,更底层的属性控制是由chattr
命令改变的。本文主要介绍chattr
和lsatt
命令的语法和基本介绍。
说明:这两个命令在工作中用的比较少,经常用到的场景就是解决
"Operation not permitted"
问题。
至于它们语法,掌握最基本的就可以了。就是会查属性、会修改属性就可以了。
chattr
命令语法
chattr [+-=] [ASacdistu] File/Directory
参数说明:
+-=
:分别为 [+
增加] [-
减少] [=
设定] 指定属性
A
:当设定了A
这个属性时,文件或目录的存取时间atime (access)
将不可被修改。
S
:这个功能有点类似sync
的功能!就是会将数据同步写入磁盘当中!可以有效的避免数据流失!
a
:文件将只能增加数据,而不能删除,只有root
才能设定这个属性。
c
:这个属性设定之后,将会自动的将此文件『压缩』,在读取的时候将会自动解压缩出来,但是在储存的时候,将会先进行压缩之后再储存。
d
:当dump
(备份)程序被执行的时候,设定d
属性将可使该档案(或目录)具有dump
功效!
i
:指定文件不能被删除、改名、也无法写入或新增数据!对于系统安全性有相当大的帮助!
j
:当使用ext3
这个档案系统格式时,设定j
属性将会使档案在写入时先记录在journal
中! 但是当filesystem
设定参数为data=journalled
时,由于已经设定了日志了,所以这个属性无效!
s
:当文件设定了s
参数时,他将会被完全的移除出这个硬盘空间。
u
:与s
相反的,当使用u
来设定文件时,则数据内容其实还存在磁盘中,可以使用来undeletion
.
chattr
使用实例
- 设置指定文件的隐藏属性,使其无法删除、修改。
chattr +i /home/config/config.conf
#添加i
隐藏属性后,就无法更动config.conf
这个文件了 - 取消文件的删除、修改保护权限
chattr -i /home/config/config.conf
#解除i
这个隐藏属性
lsattr
命令语法
lsattr [-aR] File/Directory
- 参数说明
-a
:将隐藏文件的属性也列出来;
-R
:连同子目录的数据也一并列出来!
lsattr
使用实例
lsattr file.txt
查看指定文件隐藏属性
四 权限管理之su、sudo
su切换用户与sudo提权
介绍
因为
root
用户的权限太大,破坏力太强,安全风险极高,所以通常情况下公司的服务器对外都是禁止root
用户直接登录的,而运维组的小伙伴通常使用的都是普通用户,但是运维组内的小伙伴们在进行日常运维管理的过程中,经常需要获得某些root
才有的管理权限才能完成任务,例如需要执行/sbin
目录下的命令。
那么如何才能在不使用root
用户直接登录操作系统的同时又能保证普通用户完成日常工作呢,有两种方案
su
切换用户身份
特点:使用普通用户登录,然后使用su
命令切换到root
账户下
优点:简单粗暴
缺点:- 需要知道
root
密码 - 权限控制不精细:每次都是获取所有
root
权限
- 需要知道
sudo
提取部分管理员权限- 特点:
- 使用普通用户登录,然后
sudo
命令提取root
用户的部分管理权限,注意只是某部分,而不是全部。 - 不需要切换到
root
账户下
- 使用普通用户登录,然后
- 优点:相对复杂
- 缺点:
- 不需要知道
root
密码,输入的是用户自己的密码 - 权限控制更为精细:可以控制普通用户只获取部分
root
权限
- 不需要知道
- 特点:
su
切换用户
储备知识
-
linux中shell可以分两类
登陆
shell
,需要输入用户名和密码才能进入Shell,日常接触的最多的一种非登陆
shell
,不需要输入用户和密码就能进入Shell
,比如运行bash
会开启一个新的会话窗口 -
插一句:
shell
的使用方式有两种 -
交互式,等待用户输入执行的命令(终端操作,需要不断提示)
非交互式,执行shell脚本, 脚本执行结束后shell自动退出
bash shell
配置文件介绍(文件主要保存用户的工作环境)
-
全局配置文件:
/etc/profile
/etc/profile.d/*.sh
/etc/bashrc
-
个人配置文件:
~/.bash_profile
~/.bashrc
profile
类文件, 设定环境变量, 登陆前运行的脚本和命令。
bashrc
类文件, 设定本地变量, 定义命令别名 -
PS: 如果全局配置和个人配置产生冲突,以个人配置为准。
配置文件的应用顺序
如果执行的是登录式shell
,那么配置文件执行顺序是:
/etc/profile
->/etc/profile.d/*.sh
->~/.bash_profile
->~/.bashrc->/etc/bashrc
如果执行的是非登录式shell
,那么配置文件执行顺序是:
~/.bashrc
->/etc/bashrc
->/etc/profile.d/*.sh
- PS: 验证使用
echo
在每行添加一个输出即可,注意,要把输出放在文件的第一行。
执行登录与非登录shell
执行登录shell
:身份与环境都切换
su - 用户
执行非登录shell
:只切换用户身份
su 用户
补充:
- 从root往普通用户下切换无需输入密码,反之则需要
- 切换身份执行命令:
su - 用户 -c “命令”
sudo
提权
在日常的运维工作中,我们不应该把
root
的密码公开给所有人,因为,一方面,真那样做的话,安全风险就太高了,删库到跑路发生的概率估计会加大,另外一方面,小伙伴们大多数情况下只需要提取某一些权限来使用即可也并不是需要所全部的管理员权限,所以说sudo比su
更为靠谱一些。
通过配置
sudo
,我们可以实现让普通用户输入自己的密码的情况下而获取我们为其配置的特定权限,这样,既保证了普通用户拥有他想要的特定权限,又不至于泄露管理root
的密码。
配置(两种编辑方式)
visudo
(会提示语法错误,推荐使用)
visudo -c
# 检查配置是否正确
返回:/etc/sudoers:解析正确
vim /etc/sudoers
sudo
语法
user MACHINE=COMMANDS
示如
root ALL=(ALL) ALL
-
root
:用户 -
ALL
:代表用户可以在哪台机器上执行指令,通常设置为ALL,如果设置为localhost代表在本机上执行指令。也可以设置为本机以外的其他IP地址或主机名,此时该
/etc/sudoers
虽然是在本机上配置的,但用户登录到本机后仍然是无法执行命令的,如果把/etc/sudoers
这个配置文件赋值到指定ip或主机名的那台机器上,就好用了配置文件中讲到:
Next comes the main part: which users can run what software onwhich machines (the sudoers file can be shared between multiplesystems).即/etc/sudoers文件可以在多个系统之间共享,如果我们设置成ALL的话就省事了,该文件复制到人任意一台机器上的完成的权限配置都一样
-
(All)
:表示允许用户以哪个用户的权限做事情 -
ALL
:所有命令
-
最终解释:
root
用户可以在所有主机上以任意用户身份执行所有命令tom ALL=(ALL) ALL # tom用户在任何机器上,可以以任何用户身份执行任何命令等同于root用户 lili ALL=(ALL) NOPASSWD: ALL # 免密 egon ALL=(ALL) /bin/cp,/bin/touch # 只允许egon用户以root用户的身份执行cp,touch命令 egon01 ALL=(ALL) ALL,!/usr/bin/vim /test/a.txt # !代表取反 egon02 ALL=(ALL) /usr/bin/passwd [a-zA-Z]*,/usr/bin/vim *,!/usr/bin/vim/test/a.txt # 可以编辑所有文件,除了/test/a.txt # 可以测试 [root@egon ~]# su - egon02 上一次登录:二 12月 20 11:21:01 CST 2022pts/0 上 [egon02@egon ~]$ sudo vim /test/b.txt [egon02@egon ~]$ sudo vim /test/a.txt 对不起,用户 egon02 无权以 root 的身份在 egon 上执行 /bin/vim /test/a.txt。
测试
[root@egon ~]# su - egon
上一次登录:四 9月 10 20:27:09 CST 2020pts/0 上
[egon@egon ~]$ ll -d /etc/
drwxr-xr-x. 146 root root 8192 9月 10 20:27 /etc/
[egon@egon ~]$ touch /etc/a.txt # =================> 没有权限
touch: 无法创建"/etc/a.txt": 权限不够
[egon@egon ~]$ sudo touch /etc/a.txt # =================> 使用sudo提权
我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:
#1) 尊重别人的隐私。
#2) 输入前要先考虑(后果和风险)。
#3) 权力越大,责任越大。
[sudo] egon 的密码:
[egon@egon ~]$ ll /etc/a.txt
-rw-r--r-- 1 root root 0 9月 10 20:28 /etc/a.txt
- ps: sudo 执行流程
- 普通用户执行
sudo
命令, 会检查/var/db/sudo
是否存在时间戳缓存 - 如果存在则不需要输入密码, 否则需要输入用户与密码
- 输入密码会检测是否该用户是否拥有该权限
- 如果有则执行,否则报错退出
Sudo
常用参数
sudo
常用参数:
-l
: 登录用户下面,执行sudo -l 显示当前用户有哪些权限
-k
:删除/var/db/sudo/下面对应的时间戳的信息,下次执行sudo需要输入当前用户的密码
- –> 系统默认也是5分钟失效
- –> 配置免密是另一种情况
NOPASSWD: ALL
远程sudo
(有条件限制的)
其他配置详见配置文件
sudo
实例
企业生产环境用户权限集中管理方案实例
- 根据角色的不同,给不同的用户分配不同的角色
创建初级工程师3个,网络工程师1个,中级工程师1个,经理1个
批量创建用户:for user in chuji{01..03} net01 senior01 manager01 > do > useradd $user > echo "111111"|passwd --stdin $user > done;
- 创建5个开发人员,属于phpers组
groupadd -g 999 phpers for n in `seq 5` do useradd -g phpers php0$n done
- 创建开发经理,中级phper
for user in kaifaManager seniorPhper > do > useradd $user > echo "111111"|passwd --stdin $user > done
- 编辑配置文件
[root@localhost ~]# vim /etc/sudoers
########################Cmnd_Alias By FTL ###################################
Cmnd_Alias CY_CMD_1=/usr/bin/free, /usr/bin/iostat,/usr/bin/top, /bin/hostname,
/sbin/ifconfig, /bin/netstat, /sbin/route
Cmnd_Alias GY_CMD_1=/usr/bin/free, /usr/bin/iostat,/usr/bin/top, /bin/hostname,
/sbin/ifconfig, /bin/netstat, /sbin/route, /sbin/iptables, /etc/init.d/network,
/bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall, /bin/rpm,
/usr/bin/updatedb, /usr/bin/yum, /sbin/fdisk, /sbin/sfdisk, /sbin/parted,
/sbin/partprobe, /bin/mount, /bin/umount
Cmnd_Alias CK_CMD_1=/usr/bin/tail, /bin/grep, /var/log/messages*
Cmnd_Alias GK_CMD_1=/sbin/service, /sbin/chkconfig, /bin/tail, /var/log/*,
/bin/grep, /bin/cat, /bin/ls, /bin/sh
Cmnd_Alias GW_CMD_1= /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient,
/usr/bin/net, /sbin/iptables, /sbin/iwconfig, /sbin/mii-tool, /bin/cat,
/var/log/*
########################User Aliases By FTL ###################################
User_Alias CHUJI_YUNWEI_ADMINS=chuji01,chuji02,chuji03
User_Alias CHUJI_KAIFA_ADMINS=php01,php02,php03,php04,php05
User_Alias GAOJI_WANG_ADMINS=net01
########################Runas_Alias By FTL ###################################
Runas_Alias OP = root -->未来切换到某个角色执行任务
########################Config By FTL ###################################
senior01 ALL=(OP) GY_CMD_1
manager01 ALL=(ALL) NOPASSWD:ALL
kaifaManager ALL=(ALL) ALL, /usr/bin/passwd [A-Za-z], !/usr/bin/passwd
root, !/usr/sbin/visudo,\
!/usr/bin/vi *sudoer*, !/usr/bin/sudo su -,!/bin/su
seniorPhper ALL=(OP) GK_CMD_1
CHUJI_YUNWEI_ADMINS ALL=(OP) CY_CMD_1
CHUJI_KAIFA_ADMINS ALL=(OP) CK_CMD_1
GAOJI_WANG_ADMINS ALL=(OP) GW_CMD_1
- 命令的路径要全路径
别名需要大写
超过一行,用"\
"换行
排除的命令一定在最后面写
kaifaManager
因为有ALL
,所以可以直接su -
切换root
,但是sudo su -
切换不了