linux-用户管理与权限
2022-10-07 08:19:49 0 举报
AI智能生成
Linux-用户管理和权限 以及变量问题
作者其他创作
大纲/内容
用户的分类
root
权限最大,老大哥
Linux系统的特性就是可以满足多个用户,同时工作,因此Linux系统必须具备很好的安全性。
它拥有最高的系统所有权,能够管理系统的各项功能,如添加/删除用户,启动/关闭进程,开启/禁用硬件设备等等。
“能力越大,责任越大”,root权限必须很好的掌握,否则一个错误的命令可能会摧毁整个系统。
root的权限为什么这么大
他的UID为(0)
[root@localhost ~]# id root
uid=0(root) gid=0(root) 组=0(root)
uid=0(root) gid=0(root) 组=0(root)
权限绑定的不是名字而是uid号,0的权限最大
当其余的用户的uid改为0,可以将其视为一个root账户
但是不建议这样操作,可以通过sudo进行提权
普通用户
系统通过useradd创建的普通用户
虚拟用户
系统的允许依赖于用户
软件自动生成的用户一般仅用于运行该软件,
禁止登录,也都是为了降低权限,保障系统的安全
禁止登录,也都是为了降低权限,保障系统的安全
用户和组的概念
UID,user Identify,好比身份证号
在Linux系统中,用户也有自己的UID身份账号且唯一
系统用户UID为1~999 Linux安装的服务程序都会`创建独有的用户`负责运行。
普通用户UID从1000开始
当普通用户权限不够时,建议普通用户用sudo提权
GID,group Identify,好比户口本的家庭编号
linux用户创建时会自动创建一个同名的组,称之为主组,且主组只能有一个。.
除了主组外,用户还可以加入到其他组,属于多个组,额外添加的组,就叫附加组
和用户相关的配置文件
/etc/passwd
用户信息
/etc/shadow
用户密码信息
/etc/group
用户组信息
/etc/gshadow
用户组密码信息
在大公司,用户和组数量很大的情况下,需要制定复杂的权限管理,那时会用到组密码
/etc/skel
故此目录的作用是在建立新用户时,用于初始化用户根目录。
用户的家目录有一些文件模板都在里面
用户命令操作
组命令
组添加 groupadd
[root@localhost ~]# groupadd lxhzu
添加的组是往后递增的
-g 设置组id号,默认从1000开始,1~999是系统预留的组
groupadd -g 1024 xxxx
检查组信息(附加组)
/etc/grop 的字段解释
字段解释:
组名,就是groupadd指定的名字
密码,x就是一个占位符,没有密码,组可以设置密码,一般不用
组ID,默认从1000开始,依次+1
附属组:比如yuchao用户,又加入了devops组
组名,就是groupadd指定的名字
密码,x就是一个占位符,没有密码,组可以设置密码,一般不用
组ID,默认从1000开始,依次+1
附属组:比如yuchao用户,又加入了devops组
组修改 groupmod
-g gid缩写,可设置组ID
-n name缩写,可设置组名
-n name缩写,可设置组名
语法: groupmod 参数 组名
groupmod -g 1005 -n opsgroup devops
删除组
groupdel 祖名
groupdel lxhzu
用户命令
添加用户 useradd
语法: useradd [选项 选项值] ... 用户名
useradd -G 附属组 -u 用户ID -s 解释器 -c "注释" 用户名
useradd -G 附属组 -u 用户ID -s 解释器 -c "注释" 用户名
-g:表示指定用户的用户主(主要)组,选项值可以是用户组ID,也可以是组名
给分配额外的组时,必须要保证组存在
-G:表示指定用户的用户附加(额外)组
-u :uid,用户的id(用户的标识符),及自定义id
-c:comment,添加注释(选择是否添加)
-s:指定用户登入后所使用的shell 解释器,
默认/bin/bash
可以进行登录
/bin/nologin
不能登录,一般都是程序应用建立的用户
-d:指定用户登入时的启始目录(家目录位置)
默认的是/home/用户名
-M 不 建 立 使 用 者 目 录
-m 使 用 者 目 录 如 不 存 在 则 自 动 建 立 。
useradd --help #查看帮助信息
修改用户信息 usermod
对已存在的用户修改其用户的信息
修改了用户信息,影响的是该用户在linux服务器上的权限。
修改了用户信息,影响的是该用户在linux服务器上的权限。
-g:表示指定用户的用户主组
修改主组 usermod -g opslinux lxh
由于用户的主组必须有,所以无法直接删除主组
修改属组后,用户需要重登才会加载
-G:表示指定用户的用户附加组
-u:uid,用户的id(用户的标识符)
-L:锁定用户,锁定后用户无法登陆系统lock
禁止用户登录
可能使用人出差,不使用,提高安全性
-U:解锁用户unlock
-c<备注>:修改用户帐号的备注文字
useradd -u 2000 -s /bin/bash -c 'zhe shi yi ge xin yong hu' lxh
-d<登入目录>:修改用户登入时的目录
-s<shell>:修改用户登入后所使用的shell
只能修改未登录的用户信息
并且用户需要存在
删除用户 userdel
删除之后对应的属组也会删除
userdel 用户名
f:强制删除用户,即使用户当前已登录;
-r:删除用户的同时,删除与用户相关的所有文件。
如果不使用参数,直接删除,会保留用户的家目录
不太安全,怕留有后门
建议注释/etc/passwd用户信息而非直接删除用户
设置密码
用户设置密码
passwd 用户名
修改密码
passwd 用户
交互式设置密码
标准输入,非交互式设置密码
--stdin
echo '123123' | passwd --stdin lxh
标准输入 --stdin
给程序传如的数据、
标准输出 --stdout
程序执行产生的结果
密码文件
/etc/shadow文件
没有密码的就是!
该文件默认的就是0权限,任何用户无法查看
第三种修改密码的方法
chpasswd
命令接受 key:value 键值对形式的 账号:密码
组设置密码
gpasswd 组名
查看用户信息
id 用户名
查看一个用户的一些基本信息
查找是去 /etc/passwd中寻找
只建立了组,查找会报错
查找是去 /etc/passwd中寻找
只建立了组,查找会报错
详细信息还是需要去用户表里去看
参数:
-g 组id
-u 用户id
在参数后面加n,表示name,显示名字
-g 组id
-u 用户id
在参数后面加n,表示name,显示名字
查看用户登记记录
whoami
打印当前的用户名
who
显示已登录的用户终端信息
tty
是虚拟终端的代表
pts/序号
ssh远程终端的代称
w
显示登录用户信息,以及负载信息
last
显示近期登录的终端记录
last -5
显示最新的5跳登记记录
lastlog
显示关于用户的登记记录
最后一次的登录
Linux用户身份切换
用户身份提权
sudo命令提权
sudo命令用来以其他身份来执行命令,预设的身份为root
语法 sudo 参数
-u user 以指定用户身份运行命令(或编辑文件)
sudo -i #默认从普通用户切换到root用户
作用是让普通用户不需要root密码即可用root权限执行命令。
root密码太重要了!!
用户身份的切换
su 命令
su - 用户名
如果不加- 可能会导致环境变量未切换,部分命令或软件无法使用
并且加了 - 登录之后直接会进入到自己的家目录
更加的安全
编辑你的sudo文件
添加你的用户信息
文件位置为 /etc/sudoers
你可以直接使用vim去编辑这个文件
如何修改配置文件
1.打开/etc/sudoers文件,找到92行
2.配置如下:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
3.按照上面的格式,添加参数
lxh ALL=(ALL) ALL
lxh ALL=(ALL) ALL
4.用户就可以使用sudo命令进行提权了
在使用命令时,如果为两段,会第二段没法提权,无法操作
Linux提供了visudo命令
默认用vi去打开文件,且提供了语法检测功能
如果只想添加部分权限
/usr/bin/mkdir,/usr/sbin/useradd
记得使用绝对路径
用户管理命令补充
usermod
-e<有效期限> 修改账号的有效期限
chage设置密码过期
chage命令是用来修改帐号和密码的有效期限
使用-l参数列出用户密码过期的设置
chage -l root
使用-M参数设置redis用户的密码最大有效期
chage -M 100 redis
-d 设置密码什么时候过期!-1 从不过期 0 立即过期
gpasswd管理用户组
-a 添加用户到组
gpasswd -a ycc01 opslinux
用户 组
-d 从组删除用户
gpasswd -d ycc01 opslinux
文件权限
权限的分类
对文件
读r,read 表示可以查看文件内容;cat
写w,write 表示可以更改文件的内容;vim 修改,保存退出
执行x,executable 表示是否可以执行文件,一般指二进制文件、或者脚本文件
对文件夹
r 表示可以(ls)查看目录中存在的文件名称
w 表示是否可以删除目录中的子文件或者新建子目录(rm/touch/mkdir)
x 表示是否可以进入目录中(cd)
文件夹权限
开头的第一个字符:
- 代表是一个普通文件,通过touch命令创建
d 代表是一个文件夹 ,通过mkdir创建
l 代表软连接,快捷方式类型
- 代表是一个普通文件,通过touch命令创建
d 代表是一个文件夹 ,通过mkdir创建
l 代表软连接,快捷方式类型
rw-rwxrwx:
文件类型 属主(user) 属组(group) 其他人(other)
文件类型 属主(user) 属组(group) 其他人(other)
必须按照顺序
user 、属主
group、属组
other、其他人
group、属组
other、其他人
u
g
o
g
o
all 表示所有人 缩写a
linux中的root用户是特殊用户,是系统的超级管理员,有最大权限,可以任意修改linux文件
文件属性详解
user属主
表示文件的创建者、拥有者,也可理解为,某个用户、对这个文件拥有的权限。
group属组
文件所属的用户组,拥有组,可以理解为,某一个组的用户,对这个文件的权限。
other其他用户
上面两者之外的用户
文件操作的命令
1.查看文件的属性
ll命令= ls -l
查看文件夹下所有的文件(文件夹)详细信息
-d 可以查看文件夹本身的信息
2.文件类型补充
b 块设备文件 (如读取硬盘,光驱等) /dev/sda /dev/sdb
p 管道文件
c 字符设备文件,如网络串口设备
s socket文件,进程间通信文件,比如mysql生成的mysql.sock
3.修改文件的权限
chmod命令
需要注意两点
1.注意文件、文件夹属于谁,属于那个组
2.当前登录的用户是谁,以此判断当前的用户和该文件的角色关系是什么
通过字母来修改
u g o a
r w x
r w x
u+r
g+w
o-x
g+w
o-x
多个修改时,使用逗号隔开
chmod g-r,o+x /tmp/lxh
不光可以使用 + - 还可以直接赋值=
chmod o=rw /tmp/lxh
通过数字来修改
4 2 1 w r x
777
640
640
chmod -R 777 /tmp/lxh
4.修改文件的属主、属组
在修改时需要注意,属组改时要用root来修改
chown
修改文件的属主
user
chown user 文件名
修改属组
chown .group 文件
chgrp
修改文件的属组
group
chgrp group 文件名
5.文件能否打开和操作,还与上级目录有关
需要在文件夹内创建文件或其他操作,必须要有x权限
同时w权限也不能少
快捷方式
我们日常使用的命令都是简写,省略了前面的路径
这个是由系统中的环境变量PATH来提供的
echo $PATH
PATH在每次重新开机时,都会生成一个默认的变量
软连接与PATH的区别
1.PATH添加的时整个目录,及目录下存在多个命令,都可以快捷的使用
2.软链接只是针对的单个文件,添加的快捷方式,多个命令需要多次添加
使用link命令添加软连接
ln 命令
ln -在文件之间建立连接
ln -s 命令的原路径 快捷方式的路径
快捷方式的路径可以写PATH
有了软连接之后,which 命令
得到的路径可能不是绝对路径,目标可能是个软链接
因此单个的命令使用软链接
多个命令再改PATH变量
为后续python3的安装
需要明白link软链接和PATH的配置详情
注意点
1.系统时用什么用户登录的,以及后续的文件创建动作
2.是不是观察下文件的权限属性
ls -l 文件
属主,属组,其他人,权限都是什么
ls -ld 目录
属主,属组,其他人,权限都是什么
3.普通用户之间无法直接修改
chmod
权限修改
chown
属主的修改
属组也能修改
chgrp
属组修改
4.root用户可以直接修改任意文件的权限属性
5.可以使用env命令来查看当前用户系统自动加载的环境变量
Linux中还有一个可以查询全系统环境变量的命令set
特殊权限
1.Linux系统的9位基本权限`rwx rwx rwx
2.linux权限位,还有3个特殊权限,一共是12位权限。
特殊权限对照表
类别 suid sgid sticky
字符表示 S S T
出现位置 用户权限位x 用户组权限位x 其他用户权限位x
基本权限位有x s s t
数字表示法 4 2 1
八进制表示法 4000 2000 1000
生效对象 用户位 用户组 其他用户
字符表示 S S T
出现位置 用户权限位x 用户组权限位x 其他用户权限位x
基本权限位有x s s t
数字表示法 4 2 1
八进制表示法 4000 2000 1000
生效对象 用户位 用户组 其他用户
数字表示法:
u user 如果有suid 最大的表示就为 4777
u user 如果有suid 最大的表示就为 4777
suid
sgid
sbit(sticky)
粘滞位
当目录有了粘滞位特殊权限,这个目录除了root用户特殊以外,任何用户都只能删除、移动自己的创建的文件,而不能影响到其他人。
比如 /tmp
隐藏的特殊权限
-a
只许写入,不能修改和其余操作
-i
什么都不允许操作
环境变量的相关问题
环境变量su
此时登录会出现报错,因为之前没有创建家目录,所以提示符损坏
出现错误的命令提示符,因该如何进行修复
表示系统读不到用户的个人配置文件,用户在创建时出错
.用户在useradd创建时,系统会去 /etc/skel 目录
下拷贝所有的用户个人环境变量配置文件到用户生
成的家目录下 /home/用户名
下拷贝所有的用户个人环境变量配置文件到用户生
成的家目录下 /home/用户名
1.用户在登录时,自动加载 /home/用户名 下所有的的文件内容
2.先在/home 下创建对应用户名文件夹
3,手动拷贝缺损文件
cp -r /etc/skel /home/用户名
4.执行完成后,用户被修复,登录正常
su - chaoge01
修改时还需要注意修改文件夹的权限
group chaoge01
usermod -g chaoge01 chaoge01
groupdel apple
groupmod -g 1200 chaoge01
chmod 700 /home/chaoge01
chown chaoge01:chaoge01 /home/chaoge01
usermod -g chaoge01 chaoge01
groupdel apple
groupmod -g 1200 chaoge01
chmod 700 /home/chaoge01
chown chaoge01:chaoge01 /home/chaoge01
建立对于的组
给用户分配组
修改文件权限与属组和属主
环境变量相关
1.Linux中可以查询用户相关的,环境变量,命令是env
2.Linux中还有一个可以查询全系统环境变量的命令set
命令提示符PS1
我们看见的命令提示符就是PS1
[lxh@lrhcg ~]$ set | grep PS1
PS1的默认格式为
PS1='[\u@\h \W]\$ '
参数解释
\u 显示用户名
@ 占位符 #没有实际意义
\h 显示主机名
\W 显示用户所处目录的最后一级,相对的
\w 小写,显示用户所处的绝对路径,类似于pwd
\t 以24小时制显示时间
\$ 显示用户的身份提示符,自动识别是root还是普通用户
@ 占位符 #没有实际意义
\h 显示主机名
\W 显示用户所处目录的最后一级,相对的
\w 小写,显示用户所处的绝对路径,类似于pwd
\t 以24小时制显示时间
\$ 显示用户的身份提示符,自动识别是root还是普通用户
可以修改为
PS1='[\u@\h \w \t]\$ '
一个友好的带颜色提示的PS1变量
export PS1="[\[\e[34;1m\]\u@\[\e[0m\]\[\e[32;1m\]\H\[\e[0m\] \[\e[31;1m\]\w\[\e[0m\]]\\$"
export 表示的是立即生效
显示的结果,就是不同的区域不同的颜色
变量的修改如何生效
当我们平时直接写
变量临时敲打,临时生效,重新登陆后,系统重新加载用户环境变量。该设置丢失
如何永久生效
对修改的变量需要写入到全局变量文件中才会生效
root用户
/etc/profile
普通用户
~/.bash_profile
关于字符集设置
使用正则表达式时需要还原字符集设定
防止正则无法使用,特殊字符不识别
需要设置`LC_ALL=C`,注意这一点很重要)(常常脚本中使用)
LC_ALL=C 这个变量赋值的动作,是还原Linux的字符集
系统本身是支持多语言系统的,比如说中文、英文、德语等,每一个语言都有其特有的语言
计算机为了统一字符,生成了对应的编码表。
你的系统编码是中文,很可能导致你的正则出错
可以查看系统的支持语言
使用 locae 命令
[root@juejiang ~]# locale
为了防止出错,将其修改为英文编码
export LC_ALL=C
修改中英文字符集
改为中文
安装中文语言包
yum install kde-l10n-Chinese
yum reinstall glibc-common
yum install kde-l10n-Chinese
yum reinstall glibc-common
写入配置文件
[root@yuchao-tx-server ~]# tail -2 /etc/profile
# by chinese
export LC_ALL="zh_CN.UTF-8"
[root@yuchao-tx-server ~]# tail -2 /etc/profile
# by chinese
export LC_ALL="zh_CN.UTF-8"
不写入配置文件为临时生效
改为英文
LC_ALL="en_US.UTF-8"
自定义变量的使用
用户在系统中自定义的变量,并且变量与值之间不能有空格!!!
用法
语法: 变量名=变量值
如 name='大西瓜'
可以使用env来查看当前的环境变量
#可以使用env命令来查看当前用户系统自动加载的环境变量有那些
#很多的程序运行等,需要去读取调用这些变量
自定义变量的使用
简单写法,不推荐
[root@lxh-txyun ~]# echo $name
大西瓜
大西瓜
$变量名
标准写法(用这个)
[root@lxh-txyun ~]# echo ${name}
大西瓜
大西瓜
${变量名}
自定义的变量可以用set进行查看
是位于用户的变量文件中
是位于用户的变量文件中
[root@lxh-txyun ~]# set | grep '^name'
name=大西瓜
name=大西瓜
关于别名的生效(很好用,快捷命令)
别名命令
alias
语法: alias 别名='命令 参数 路径' (都可以)
[root@lrhcg ~]# alias rm='rm'
使用:直接敲定义的别名即可
如 ll 就是一个别名
可以自定义简单命令,简化繁琐的路径和命令,便于使用
alias lg='ls /var/log'
到后期很多的修改参数需要找路径麻烦,也记不住
删除别名
unalias
unalias lg(别名名称)
别名直接写也和定义的变量是临时生效
重新开机或者登出后消失
永久生效也需要写入到配置文件当中
全局的在/etc/bashrc
> vim /etc/bashrc
alias rm='rm -i'
> source /etc/bashrc
alias rm='rm -i'
> source /etc/bashrc
也可以使用echo 和 >> 追加到最后一行
普通用户 家目录下 ~/.bashrc
vim ~/.bashrc
alias rm='rm -i'
source ~/.bashrc
alias rm='rm -i'
source ~/.bashrc
修改完成后重新加载
关于bashrc和profile区别
bashrc
1. bashrc是在系统启动后(bashshell)就会自动运行。
/etc/ bashrc这个是全局文件
Main Topic
3.~/.bashrc:该文件包含专用于某个用户的bash shell
私有环境变量设定
bashrc用于 交互式non-login shell。
取得 bash 接口的方法不需要重复登陆的举动。
su 用户
profile
1. /etc/profile 文件是系统全局针对终端环境的设置
2. profile是在用户登录后才会运行。
3.直接对/etc/profile修改会对所有的用户起作用
所以不建议在这里修改
可以在自己用户的环境变量修改
~/.bash_profile
profile用于 交互式login shell
进入 bash 时需要完整的登陆流程的,就称为 login shell
su - 用户
及只在登录的时候刷新一下
都可以用 source来更新
source bashrc命令更新bashrc
source profile命令更新profile
Main Topic
Main Topic
Main Topic
Main Topic
Main Topic
Main Topic
Main Topic
Main Topic
Main Topic
Main Topic
Main Topic
Main Topic
Main Topic
Main Topic
Main Topic
Main Topic
Main Topic
Main Topic
Main Topic
Main Topic
Main Topic
Main Topic
Main Topic
Main Topic
Main Topic
Main Topic
Main Topic
Main Topic
0 条评论
下一页