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