权限以及bash配置

权限管理

r,w,x

三类用户

u:属主
g:属组
o:其他用户

更改文件属主属组

chown

只有文件主和超级用户才可以便用该命令

改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,

使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户ID,

用户组可以是组名或组id。文件名可以使由空格分开的文件列表,在文件名中可以包含通配符。

chown Flie,...

参数

-R:递归修改目录及其内部文件的属主
--reference=<参考文件或目录>:把指定文件或目录的拥有者与所属群组全部设成和参考文件或目录的拥有者与所属群组相同

--reference=/path/to/somefile file,...

同时修改属主与属组

chown USERNAME:GRPNAME file,...

chown USERNAME.GRPNAME file,...

修改文件属组

chgrp

用来改变文件或目录所属的用户组。该命令用来改变指定文件所属的用户组。

其中,组名可以是用户组的id,也可以是用户组的组名。文件名可以是由空格分开的要改变属组的文件列表,

也可以是由通配符描述的文件集合。如果用户不是该文件的文件主或超级用户(root),则不能改变该文件的组

chgrp

参数

    --reference=<参考文件或目录>:把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同;
    -R或——recursive:递归处理,将指令目录下的所有文件及子目录一并处理;

修改用户权限

chomd

变更文件与目录的权限,设置方式采用文字或数字代号皆可

符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件。

1、修改三类用户权限
chomd MODE file,...

chomd 750 /tmp/xyz
chomd 75 /tmpxyz    75 意味着 075 
chomd 75 /tmpxyz    5 意味着 005

参数

    -R或——recursive:递归处理,将指令目录下的所有文件及子目录一并处理
    --reference=<参考文件或目录>:把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同;
2、修改某类用户或者某些类用户的权限
 u User,即文件或目录的拥有者;
 g Group,即文件或目录的所属群组;
 o Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围; 
 a All,即全部的用户,包含拥有者,所属群组以及其他用户;
    chomd 用户类别=MODE file,...
    例子:
    chmod u=rw- /tmp/x
    chmod u=rwx,go=r /tmp/x
3、修改某类的用户某位或某些位的权限
 u,g,a,o
chmod 用户类别+|-MODE file,...
实例
chmod u-x /tmp/xyz
chomd  +x /tmp/xyz

例子:

1、新建一个没有家目录的用户openstack
useradd -M openstack

2、复制/etc/skel为/home/openstack
cp -r /etc/skel  /home/openstack

3、改变/home/openstack及内部文件的属主属组均为openstack
chown -R openstack:openstack /home/openstack

4、/home/openstack及其内部的文件,属组与其他用户没有任何访问权限
chmod -R go=--- /home/openstack

验证
su - openstack

which passwd 查看路径

计算器

bc

一种支持任意精度的交互执行的计算器语言。bash内置了对整数四则运算的支持,但是并不支持浮点运

bc  运算法则
scalc=2 保留两位精度
quit  退出

实例

算术操作高级运算bc命令它可以执行浮点运算和一些高级函数:
echo "1.212*3" | bc 
3.636

设定小数精度(数值范围)
echo "scale=2;3/8" | bc
0.37
参数scale=2是将bc输出结果的小数位设置为2位。



进制转
#!/bin/bash
abc=192
echo "obase=2;$abc" | bc



计算平方和平方根:
echo "10^10" | bc
echo "sqrt(100)" | bc

sslpwd 加密

openssl passwd

penssl passwd的作用是用来计算密码hash的,目的是为了防止密码以明文的形式出现。

语法格式:

openssl passwd  [options]  [password]

openssl passwd常用的选项如下:

-1:表示采用的是MD5加密算法。
-in:表示和文件中读取密码
-stdin:从标准输入读取密码
-salt:指定salt值,不实用随机产生的salt。在使用加密算法进行加密时,即使密码一样,salt不一样,所计算出来的hash值也不一样,除非密码一样,salt值也一样,计算出来的hash值才一样。salt为8字节的字符串。

例子

[root@Server3 ~]# openssl passwd -1 -salt '12345678'
Password: 
$1$12345678$0ME5N6oDyoEAwUp7b5UDM/

手动添加用户

手动添加用户hive,基本组hive(5000),附加组mygroup
1)添加组名,组ID,将hive添加到附加组mygroup
    nano /etc/group
2)添加用户
    nano /etc/passwd
3)添加用户,密码位置为!!,日期,最短使用期限(0 不限定),最长使用期限(999 不限定)
    nano /etc/shdow
4)将登陆配置信息复制到hive(不存在时,会自动创建)的家目录当中
    cp /etc/skel /home/hive
5)修改属主与属组均为hive
    chown -R hive.hive /home/hive 
6)修改属组与其他用户权限,均为无权限
    chomd -R go= /home/hive    
验证 ls    -la /home/hive
此时可以用su - USERNAME,但不能用于登陆
7)生成密码串
openssl passwd -1 -salt '12345678' //-1 加密种类 1代表md5  -salt 添加杂质
之后将生成的密码复制粘贴到/etc/shdow 中hive的密码位置(原来是!!)
8)登陆,进行验证

umask

管理员创建(root),普通用户创建的文件默认权限不一样

为了安全起见,文件默认没有执行权限,这是一个Linux的一个法则

创建目录777-umask
创建文件666-umask
umask:遮罩码

用来设置限制新建文件权限的掩码。当新文件被创建时,其最初的权限由文件创建掩码决定。用户每次注册进入系统时,umask命令都被执行, 并自动设置掩码mode来限制新文件的权限。用户可以通过再次执行umask命令来改变默认值,新的权限将会把旧的覆盖掉。

-p:输出的权限掩码可直接作为指令来执行;
-S:以符号方式输出权限掩码。

利用umask命令可以指定哪些权限将在新文件的默认权限中被删除。例如,可以使用下面的命令创建掩码,使得组用户的写权限,其他用户的读、写和执行权限都被取消:

umask u=, g=w, o=rwx

执行该命令以后,对于下面创建的新文件,其文件主的权限未做任何改变,而组用户没有写权限,其他用户的所有权限都被取消。

应注意:操作符“=”在umask命令和chmod命令中的作用恰恰相反。在chmod命令中,利用它来设置指定的权限,而其余权限则被删除;但是在umask命令中,它将在原有权限的基础上删除指定的权限。

不能直接利用umask命令创建一个可执行的文件,用户只能在其后利用chmod命令使它具有执行权限。假设执行了命令umask u=, g=w, o=rwx,虽然在命令行中,没有删去文件主和组用户的执行权限,但默认的文件权限还是640(即 rw-r-----),而不是750(rwxr-x---)。但是,如果创建的是目录或者通过编译程序创建的一个可执行文件,将不受此限制。在这种情况 下,会设置文件的执行权限。

也可以使用八进制数值来设置mode。由于在umask中所指定的权限是要从文件中删除的,所以,如果该文件原来的初始化权限是777,那么执行命令umask 022以后,该文件的权限将变为755:如果该文件原来的初始化权限是666,那么该文件的权限将变为644。

可以使用下面的命令检查新创建文件的默认权限:

umask -s

选项-s表示以字符形式显示当前的掩码。如果直接输入umask命令,不带任何参数,那么将以八进制形式显示当前的掩码。系统默认的掩码是0022。

例子:

[root@localhost zeak]# umask
0022
[zeak@localhost ~]$ umask   
0002
只用看后三位即可
默认umask值
所以对于root而言,创建目录默认权限755,创建文件默认权限644
而对于普通用户而言,创建目录默认权限775,创建文件默认权限664
umask 可以设定遮罩码
$umask 002
#umask 022

[zeak@localhost ~]$ umask 023
[zeak@localhost ~]$ touch file
[zeak@localhost ~]$ mkdir dir

-rw-r--r--. 1 zeak zeak    0 Oct  4 05:46 file
drwxr-xr--. 2 zeak zeak 4096 Oct  4 05:46 dir
目录dir的权限符合正常情况(754),而对于文件file而言,比不符合正常情况643,
而是变成了644,原因,Linux默认不会分配执行权限,若算的权限有执行权限,则权限自动加1

Bash

shell的类型
站在用户的角度而言
登陆式shell
    1)正常通过某终端登录
    2) su命令切换  su -l USERNAME   或者 su - USERNAME 
非登录式shell
    1) su NAMEME
    2)图形终端下打开的命令窗口
    3)自动执行的shell脚本

查看当前系统支持的shell

cat/etc/shells
查看当前使用的shell :
 echo $0
环境变量中shell的匹配查找
  env | grep SHELL
口令文件中shell的匹配查找
  cat /etc/passwd | grep USERNAME
常见的shell
 1.ash
  ash Shell是由Kenneth Almquist编写的,是Linux中占用系统资源最少的一个小Shell,它只包含24个内部命令,因而使用起来很不方便。

  2.bash
  bash是Linux系统默认使用的Shell,它由Brian Fox和Chet Ramey共同完成,是Bourne Again Shell的缩写,内部命令一共有40个。Linux使用它作为默认的Shell是因为它有以下的特色:
  (1)可以使用类似DOS下面的doskey的功能,用上下方向键查阅和快速输入并修改命令。
  (2)自动通过查找匹配的方式,给出以某字串开头的命令。
  (3)包含了自身的帮助功能,你只要在提示符下面键入help就可以得到相关的帮助。

  3.ksh
  ksh是Korn Shell的缩写,由Eric Gisin编写,共有42条内部命令。该Shell最大的优点是几乎和商业发行版的ksh完全相容,这样就可以在不用花钱购买商业版本的情况下尝试商业版本的性能了。

  4.csh
  csh是Linux比较大的内核,它由以William Joy为代表的共计47位作者编成,共有52个内部命令。该Shell其实是指向/bin/tcsh这样的一个Shell,也就是说,csh其实就是tcsh。

  5.zch
  zch是Linux最大的Shell之一,由Paul Falstad完成,共有84个内部命令。如果只是一般的用途,是没有必要安装这样的Shell的。

Bash配置

bash的配置文件
有两类

1、按照作用范围
全局配置
    配置文件 /etc/profile,/etc/profile.d/*.sh(所有已.sh结尾的文件),/etc/bashrc
个人配置
    配置文件(用户家目录下) ~/.bash_profile,~/.bashrc

2、按照类型    
profile类的文件
    作用
        1)设定环境变量 
            全局生效  /etc/profile,/etc/profile.d/xxx.sh(创建一个)
            个人生效      ~/.bash_profile
        如果两者都有配置,但是配置不一样,以个人为准  
        作用范围越小,越是最终生效
        2)运行命令或者脚本
         用户一登录就运行     
bashrc类的文件    
    1)设定本地变量
    2)定义命令别名
登陆式shell读取配置文件顺序
    /etc/profile-->/etc/profile.d/*.sh-->~/.bash_profile-->~/.bashrc -->/etc/bashrc
非登陆式shell读取配置文件顺序
~/.bashrc-->/etc/bashrc-->/etc/profile.d/*.sh
su切换
su -  USERNAME 与 su -l USERNAME 完全切换
su USERNAME 不完全切换,不读取/etc/profile与~/.bash_profile   不读取用户的环境设定
CentOS系统login shell配置文件的读取流程

实线的方向是主线流程,虚线的方向是被文件/etc/profile或者~/.bash_profile调用的配置文件。

配置

在~/.bashrc 下添加命令别名

alias cls=clear

用户每次登录都会生效

在~/.bash_profile添加命令 每次登陆都会问候用户

echo "Hello,zeak,Welcome to your system. It is `date`"

/etc/bashrc 对于用户umask的设定

if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
    umask 002

else

    umask 022

fi

results for ""

    No results matching ""