su用户切换与sudo提权
因为root用户的权限太大,容易对系统造成强大破坏,安全风险极高,所以通常情况下生产环境的服务器对外都是禁止root用户直接登录的,通常都是使用普通用户来管理系统,为了让普通用户拥有root权限又能保证服务器的安全,就需要用到su与sudo命令。
- 1、su:切换身份。
- 优点:简单
- 缺点:1、需要知道root密码(不安全)。2、权限控制不精细(会获取所有root权限)
- 2、sudo:提取部分管理员权限,不用切换到root账户下。
- 优点:1、不需要知道root密码(只用输入自己的密码)。2、权限控制更为精细(可以只获取部分root权限)
- 缺点:相对复杂
su切换用户
在Linux中shell可以分两类:
- 登录shell,需要输入用户名和密码才能进入shell。
- 非登录shell,不需要输入用户名和密码就能进入shell,比如运行bash会开启一个新的会话窗口。
shell的使用有两种:
- 交互式:等待用户输入执行的命令。
- 非交互式:执行shell脚本,执行结束后shell自动退出。
bash配置文件(主要保存用户的工作环境)
全局配置文件:
- /etc/profile
- /etcprofile.d/*.sh
- /etc/bashrc
个人配置文件:
- ~/.bash_profile
- ~/.bashrc
profile类文件:设定环境变量,登录前运行的脚本和命令。
bashrc类文件:设定本地变量,定义命令别名。
注:如果全局配置和个人配置冲突,以个人配置为准。
配置文件加载顺序
- 登录式shell
/etc/profile -> /etc/profile.d/*.sh -> ~/.bash_profile -> ~/.bashrc -> /etc/bashrc
- 非登录式shell
~/.bashrc -> /etc/bashrc -> /etc/profile.d/*.sh
# 非登录式shell:只切换用户身份
su 用户名
# 登录式shell:身份与环境都切换
su - 用户名
# -c选项切换身份执行命令
su - 用户名 -c “命令”
# root切换到普通用户不需要,反之需要。
sudo提权
sudo命令不需要知道root用户密码,并且能仅划分一部分权限给普通用户,相比于su更安全。sudo可以切换
sudo配置
-
1、visudo命令(会提示语法错误,推荐使用)
# visudo的本质也是调用vi来修改/etc/sudoers文件,该文件涉及权限问题,如果配置错误会导致系统问题。推荐使用visudo命令,它会在退出时有错误提示。 -c:检查配置是否正确
-
2、vim /etc/sudoers修改配置文件。
/etc/sudoers配置方式
# 基本格式
user/group ALL=(ALL) ALL
-
user/group:
-
表示允许哪个用户或组可以使用sudo
-
# 可以指定具体某个用户,也可以将多个用户添加到别名里 User_Alias ADMINS =chirou, panghu ADMIN ALL=(ALL) ALL # 指定系统组,在组名前面加上% %group ALL=(ALL) ALL
-
-
-
第一个ALL:
-
表示允许在哪台主机登录
-
# 可以指定主机ip或主机名,指定的是服务端ip,与从哪个客户端连接无关。 user 192.168.0.2=(ALL) ALL # /etc/sudoers文件可以共享复制到多部主机上,这样只修改一份文件,指定哪个用户可以在哪台主机使用sudo命令,就可以直接拷贝到其他主机上,非该主机用户不能使用sudo,这样就能分主机管理,互不影响。
-
-
-
第二个ALL:
-
表示能转换成哪个用户
-
# 胖虎可以在所有主机上转换成所有用户执行任何命令 panghu ALL=(ALL) ALL
-
-
-
第三个ALL:
-
表示转换后能执行的命令
-
# ALL表示所有命令,可以使用绝对路径指定某些命令 /usr/sbin/ifconfig,/bin/vim /f1 # 指定不能使用某些命令 !/bin/vim /f1 # 指定使用某些命令不需要输入密码 NOPASSWD:/usr/sbin/ifconfig # 可以使用命令别名 NOPASSWD:命令别名
-
-
sudo执行流程
- 1、普通用户执行sudo命令,会检查/var/db/sudo是否存在时间戳缓存
- 2、如果存在则不需要输入密码,否则需要输入用户与密码
- 3、输入密码会检查是否是该用户、是否拥有权限。
- 4、如果有则执行,没有则报错退出。
sudo常用选项
-l:登录用户下,执行命令显示当前用户有哪些权限。
-k:删除/var/db/sudo下面对应的时间戳的信息,下次执行sudo需要输入当前用户的密码,系统默认是五分钟。
-u:指定用户,可以指定/sbin/nologin用户,不指定则为root。
-b:将命令放入后台运行。
[chirou@duorou ~ ]$ tail /etc/passwd
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
# 指定/sbin/nologin用户
[chirou@duorou ~ ]$ sudo -u gdm touch /tmp/gdm
[sudo] chirou 的密码:
[chirou@duorou ~ ]$ ll /tmp/gdm
-rw-r--r--. 1 gdm gdm 0 10月 31 20:55 /tmp/gdm