刘小泽写于18.6.24-7.1 一个星期入门linux
我相信这是比之前写的 “测序的世界” 更浩大的工程,但值得写出来!
Linux管理(大部分基于ROOT用户)
1. 背景知识:介绍用户和组
linux 无论识别用户还是进程,都会通过数字识别。
所以每一个用户或组都有一个ID,存储在各自数据库中
-
用户:UID,数据库/etc/passwd
用户类别:6位二进制共65536个
#管理员:0
$普通用户: 系统用户1-499 ; 一般用户:500-60000再后面很少用
【只需了解】用户信息:
例如:u1239:X:503:504:::/home/1239/:/bin/bash
u1239 #用户名
X #x 表示密码,存放于 /etc/shadow
503 #用户id(0代表root、普通新建用户从500开始)
504 #基本组ID,额外组等信息在 /etc/group
: #注释(多个注释逗号隔开)
/home/u1239/ #家目录
/bin/bash
#默认shell, 当前系统所有合法shell存放于:/etc/shells
-
组:GID,数据库/etc/group
$私有组:创建用户时,如果没有为其指定所属的组,系统会自动为其创建一个与用户名同名的组 ;
$ 基本组:用户的默认组 ;
$ 附加组,额外组:默认组以外的其它组
【只需了解】组信息:
例如:vip:`$!$`:???:13801:0:99999:7:*:*:
vip #组名
`$!$` #被加密的口令
13801 #创建日期与今天相隔的天数
0 #口令最短位数
99999 #用户口令
7 #到7天时提醒
* #禁用天数
* #过期天数
2. 管理用户:
添加用户 useradd
-u<uid>:指定用户id;< 默认uid要>=500,且其他用户没有使用>;同时创建私有组
【建立的帐号,保存在/etc/passwd文本文件中 --> tail -1查看最后一行】
-g<gid>: 指定基本组(必须事先存在)
-G<gid>: 指定附加组,可以有多个,用逗号隔开
-c: “COMMENT” 用户注释(注意要加引号)
-d:/path/to/somedir 指定家目录
例如:useradd -c "Tony" -d /home/bla uer2
=> 新建名叫Tony的user2,指定家目录在/home/bla
-s: 指定shell路径
-m -k: 在用户家目录下复制skel文件
skel文件是:bash基础结构文件 ls -a /etc/skel查看
包含.bashrc、.bash_logout、.profile三个基础文件
-M:不创建家目录
-r:添加系统用户(UID:1-499)
修改用户属性 usermod
-u UID
-g GID(必须是之前存在的)
-a -G GID 追加附加组,而不覆盖原来的(不加-a则之前存在的附加组将会被覆盖)
-c 修改注释
-d -m:指定新的家目录,并把之前家目录文件移动到新的家目录
-l : 修改登录名
-e : 指定过期时间YYYY-MM-DD
-L:锁定/禁用用户 -U:解锁
-s : 修改默认shell
修改默认shell :chsh [USERNAME] =>这种方法是交互式,不如usermod -s快
删除用户 userdel
-r: 同时删除用户的家目录,默认不会删除用户家目录
ID 查看用户账号相关属性信息 【普通用户也可以使用】
UID 是对一个用户的单一身份标识。组ID(GID)则对应多个UID.
一些程序可能需要UID/GID来运行。id使我们更加容易地找出用户的UID以GID而不必在/etc/group文件中搜寻
-u或--user :显示用户ID;
-g或--group:显示用户所属群组的ID;
-G或--groups:显示用户所属附加群组的ID;
-n或--name:显示用户,所属群组或附加群组的名称
finger 查找并显示用户信息
显示本地主机现在所有的用户的登陆信息,包括帐号名称,真实姓名,登入终端机,闲置时间,登入时间以及地址和电话
修改finger注释信息: chfn [USERNAME]
密码管理:
passwd [USERNAME]
--stdin:采用标准输入方式修改密码
【利用管道将密码指定给这个命令,减少与用户的交互】
-n 最短使用
-x 最长使用
例如:echo 'mykey' | passwd --stdin user
-l : 锁定 -u:解锁
-d : 删除
pwck:验证系统密码/etc/passwd
和/etc/shadow
的内容和格式的完整性
3. 管理组:
创建组:groupadd -g GID -r 添加为系统组
修改组 :groupmod -g GID -n 修改组名
删除组 :groupdel
组加密:gpasswd
登陆新组:newgrp
【流程就是:1. 如果之前用户和这个新组没关系:
'root下' groupadd -> gpasswd -> ‘当前组下’ newgrp;
2.如果之前用户有一个附加组,现在想切换到附加组,直接newgrp】
切换后退出:exit
【练习:需要root权限】
1、创建一个用户thanos,其ID号是2018,基本组是marvel(组ID为2222),附加组为linux:
groupadd -g 2222 marvel
groupadd linux
useradd -u 2018 -g marvel -G linux thanos
2、创建一个用户steve, 其全名为Steve Rogers, 默认shell为tcsh:
useradd -c “Steve Rogers” -s /bin/tcsh steve
3、修改thanos的ID号为2020,基本组为linux,附加组为steve和marvel:
usermod -u 2020 -g linux -G steve, marvel thanos
4、给steve加密码,并设定密码最短使用期限为3天,最长30天:
passwd -n 3 -x 30 steve
5、将thanos的默认shell改为/bin/bash:
usermod -s /bin/bash steve 或者使用chsh steve
6、添加系统用户banner,且不允许它登陆系统:
useradd -r -s /sbin/nologin banner
4. 管理:
chown:改变文件/目录属主(只有管理员才能使用)
chown USENAME file
-R: 递归改变目录中的子目录/文件的属主
--reference=/path/to/somefile file1 : 把file1文件属主设定为和somefile一样
chown USENAME:或.
GRPNAME file : 同时改变属主和属组
chgrp: 改变属组 --> 用法同chown
chmod: 修改文件权限
支持-R 以及 --reference
权限范围的表示法如下:
u
User,即文件或目录的拥有者;
g
Group,即文件或目录的所属群组;
o
Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围;
a
All,即全部的用户,包含拥有者,所属群组以及其他用户;
r
读取权限,数字代号为“4”;
w
写入权限,数字代号为“2”;
x
执行或切换权限,数字代号为“1”;
-
不具任何权限,数字代号为“0”;
s
特殊功能说明:变更文件或目录的权限。
-
更改三类用户的权限
也就是说,如果权限是rwx,那就是4 + 2+ 1 =7
如果是-wx,就是 0 + 2 + 1 =3
chmod 733 file 表示对于属主满足rwx,对属组和其他组是-wx
如果要对整个文件夹设置权限,chmod +R 733 dir
采用数字的方式比识别rwx字母的速度快得多,推荐用数字
【三位数字少一位就从头补0,如:输入75,理解为075】 -
更改某一类用户的权限:
chmod a/u/g/o=MODE file 【这里mode只能用r、w、x,不能用数字】
也可以一次性改两个:e.g. chmod go=r file ; chmod g=rx,o= file -
更改某类用户的某个或某些权限:
操作某个权限:e.g. chmod u+x,g-x file
全部用户都增加某一权限:chmod +x file
操作某些权限:chmod u-wx file【特殊权限】
SUID:运行某程序时,相应进程的属主是程序文件自身的属主,不是启动者
开启这一项,意味着赋予用户临时对这个文件有了root权限
chmod u+s FILE / chmod u-s FILE
如果FILE本身原来就有执行权限,则SUID显示为s;否则为SSGID : 与SUID原理相似
Sticky: 在一个公共目录,每个都可以创建文件,删除自己的文件,但不能删除别人的文件
chmod o+t DIR / chmod o-t DIR同rwx,SUID、SGID、Sticky也对应4、2、1
假如更改权限时是这样:chmod 5755 file :
第一个5就对应4+1: SUID+Sticky【了解即可】umask ** 新建文件权限的掩码 【四位数,只看后三位】
创建文件:初始值666- umask
创建目录:初始值777-umask
例如当前用户umask 为022,新建文件的权限将变为666 - 022 = 644
改变umask:直接定义新的值 umask Num
【文件默认不具有执行权限,若算得的结果中有执行权限,则将其权限加1】【非必须掌握】属主、属组和权限位的关联?
当一个用户发起一个进程,它能访问的权限取决于这个进程的属主与被访问的文件的属主是否一致,一致就运行属主的权限(前三位);
不一致再看访问的属主和被访问的属组是否一致,一致就运行被访问的属组权限(中间三位);
若都不一致就运行其他组权限。
然后程序运行起来后,不管之前程序的属主是谁,现在就是该用户 -
只想让某个用户获得文件权限怎么办?
之前学了使用chmod +数字可以设定组内、其他组的访问权限,那么如果只想让组内或组外的某个成员看怎么办?
FACL:Filesystem Access Control List 帮助你
利用文件扩展保存额外的访问控制权限-
setfacl
-m:设定
-x:取消
u:UID:perm : 设定某某用户有什么权限(perm)
g:GID:perm:设定某某组有什么权限(perm)例如:setfacl -m u:u1239:rw inittab 就是将u1239这个用户赋予了inintab文件的rw属性
getfacl:查看文件的fac
-
【练习:从头创建新用户[完全手动]--root用户下进行】
1、 新建一个没有家目录的用户bioplanet;
--> 结果是该用户的属主、属组仍然为root
useradd -M bioplanet
#每执行完一个命令要验证,比如这里怎么验证新添加了没有home的用户?
#查找用户信息 -- finger bioplanet
#看看/home下有没有-- ls /home -- 现在/home下没有是正常的
#看看有没有用户id -- id bioplanet
2、 复制/etc/skel 为 /home/bioplanet;
—> 添加架构文件为了在/home下表现出来该用户
cp -r /etc/skel /home/bioplanet
#验证下bioplanet的权限,以及复制成功没有
ls -l /home 看属主、属组是否为root
ls -la /home/bioplanet 看三个架构文件是否生成
3、改变/home/bioplanet 及其内部文件的属主属组均为bioplanet;
chmod -R bioplanet:bioplanet /home/bioplanet
#ls -ld /home/bioplanet 验证
4、/home/bioplanet及其内部的文件,属组和其他用户没有任何访问权限
这里不能用:chmod -R 700 /home/bioplanet 因为700相当于也改变了属主
我们这里只需要改属组和其他,使用 chmod -R go= /home/bioplanet
5、su bioplanet 新建用户完成, 接下来还要改三样东西
设置基本组为bioplanet(5000),附加组为之前存在的mygroup
6、修改passwd:
vi /etc/passwd
最后一行添加:bioplanet:x:5000:5000::/home/bioplanet:/bin/bash
7、修改group:
vi /etc/group
最后一行添加:bioplanet:x:5000:
, 另外找到mygroup,在后面添加上bioplanet
8、修改shadow
先看一下shadow的格式:
用户:密码:修改时间:密码最短使用期限:最长使用期限:警告时间:::
【修改时间time=(date +%s)/86400 】【后三项一般就是0:99999:7:::】
vi /etc/shadow
#一会设置密码,先用!!占位
bioplanet:!!:time:0:99999:7:::
自动设置密码:password
手动设置:openssl passwd -1 -salt '12345678'
再输入密码,就得到一串加密的密码
密码复制到刚编辑的shadow中, 把!!替换
5. 用户登陆:
bash的配置文件
-
按作用范围分类:
- 全局配置:
/etc/profile
,/etc/profile.d/*.sh
,/etc/bashrc
- 个人配置:
~/.bash_profile
,~/.bashrc
【当全局和个人发生冲突时,以个人为准】
- 全局配置:
-
按功能分类:
profile类的文件:
设定环境变量
运行命令或脚本-
bashrc类的文件:
设定本地变量
定义命令别名
在用户登陆角度看shell类型
- 登录式shell:
- 账号密码正常通过终端登录
- su - USERNAME
- su -l USERNAME
- 非登录式shell:
- su USERNAME
- 图形终端打开窗口
- 自动执行的shell脚本
配置文件读取顺序:
-
登录式shell
/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc
-
非登录式shell
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
欢迎关注我们的公众号~_~
我们是两个农转生信的小硕,打造生信星球,想让它成为一个不拽术语、通俗易懂的生信知识平台。需要帮助或提出意见请后台留言或发送邮件到Bioplanet520@outlook.com