ubuntu server 的一些设置
ubuntu server 的一些设置
登录
开启ssh 的root 登录
ubuntu默认root是禁止的,有需求可以开
切换root
sudo -i
设置root密码
sudo passwd root
安装vim编辑器
sudo apt-get install vim
修改ssh服务的配置文件
sudo vim /etc/ssh/sshd_config
把这两个改为yes 并取消 # insert编辑 esc退出 :wq保存
重启ssh
systemctl restart ssh
查询ip
ifconfig
安装查询ip工具 net-tools
sudo apt-get install net-tools
安装ping命令工具
sudo apt install iputils-ping
登录ssh
ssh的软件有很多,免费收费都有
我常用的是免费版的 xshell,简洁美观吧
https://www.xshell.com/zh/free-for-home-school/
更新系统和软件
apt-get update
apt-get upgrade
挂载共享存储
这边有两个方案
A:CIFS
B:NFS
两个挂载方式几乎一样,但是性能不一样,根据自行选择的来,我选择nfs
truenas 是做为 服务端,ubuntu 做为客户端
挂载NFS共享存储
truenas开启NFS共享
在池里新建数据集
设置好数据集名称
添加新用户
建一个只能用共享存储的账号,后面的nfs cifs等都用这个账号,
nfs权限问题比较繁琐,建议是建一个单独的账号进行配置
圈起来的都要填
设置数据集的权限
把权限设置为刚才创建的新账号,sharesky 只要只有这个账号可以读写这个数据集了
就是 755权限
开启共享NFS
共享 ——添加
选择路径
不填就是全部IP都能挂载
我这边就不选了,有安全需求的同学可以指定IP
这边选择下面的 高级选项
开启高级选项多出来的一个权限块
看蓝色的字
> 所有客户端都使用该用户的权限 而上面设置的数据集权限就发挥作用了,
通俗解释:所有挂载nfs的客户端都使用sharesky的权限,而sharesky可以进行对数据集755权限,就是读写操作。
不这么设置NFS只能读,执行,不能写。。。这个网上教程几乎找不到,自己瞎点发现的
记住下面的路径 下面挂载要用
ubuntu虚拟机 在mnt目录下 新建目录 nfs
mkdir /mnt/nfs
安装nfs工具
sudo apt-get install nfs-common
挂载nfs
sudo mount -t nfs 挂载代码
192.168.3.100:/mnt/c1/ubuntushare nfs共享的地址
/mnt/nfs 挂载的本地路径
这个挂载只是测试用,重启会消失的哦,主要看自动挂载
# 忘记目录可以使用这个代码查询
# $nfs_server为服务端主机名或IP地址
sudo showmount -e $nfs_server
sudo mount -t nfs 192.168.3.100:/mnt/c1/ubuntushare /mnt/nfs
查看硬盘
df -h
开机自动挂载
这边CIFS和NFS方法一致,
其他方法可以百度,我这边只写一种 > 使用fstab语法设置开机自启
编辑fstab
sudo vim /etc/fstab
下面是参数,可能不全与错误,网上搜的
fstab参数名 | 解释 |
---|---|
auto | 开机时自动挂载或使用mount –a命令时自动挂载 |
noauto | 取消开机自动挂载 |
exec | 允许执行此分区的二进制文件 |
noexec | 不允许执行此分区的二进制文件 |
ro/rw | 只读或读写挂载文件系统 |
user | 允许任意用户挂载,如果没有显示定义,隐含启用noexec、nosuid、nodev |
nouser | 只能被root挂载 |
users | 允许所有users组中的用户挂载 |
owner | 允许设备所有者挂载 |
sync | I/o同步 |
async | I/o异步 |
dev | 解析文件系统上的块特殊设备 |
nodev | 不解析文件系统上的块特殊设备 |
suid | 允许suid和sgid位,该参数通常用于特殊任务,使一般用户运行程序时临时获取权限 |
nosuid | 禁止suid操作和设定sgid位 |
noatime | 不更新文件系统上的inode访问记录,可提升性能 |
nodiratime | 不更新文件系统上的目录的inode访问记录,可提升性能 |
relatime | 实时更新inode访问记录 |
flush- | (vfat的选项)频繁刷新数据,复制对话框或进度条在全部数据写入之后才消失 |
Usrquota | 启动文件系统支持磁盘配额模式 |
Grpquota | 启动文件系统对群组磁盘配额模式的支持 |
defaults | 默认的挂载参数(例如ext4默认参数:rw,suid,dev,exec,auto,nouser,async) |
nofail | 外部设备在插入时挂载,在未插入时忽略。这需要 nofail 选项,可以在启动时若设备不存在直接忽略它而不报错. |
如果挂载的路径中有空格,可以使用 “\040” 转义字符来表示空格(以三位八进制数来进行表示)
报错
portmap: server localhost not responding, timed out
RPC: failed to contact portmap (errno -5).
nfs mount 默认选项包括文件锁,依赖于portmap提供的动态端口分配功能;
简单的解决方法:kill文件锁(lockd)或者挂载加上 nolock ;
nfs的一些参数 | 解释 |
---|---|
timeo=n | 设置超时时间,当数据传输遇到问题时,会根据这个参数尝试进行重新传输。默认值是7/10妙(0.7秒)。如果网络连接不是很稳定的话就要加大这个数值,并且推荐使用HARD MOUNT方式,同时最好也加上INTR参数,这样你就可以终止任何挂起的文件访问。 |
intr | 允许通知中断一个NFS调用。当服务器没有应答需要放弃的时候有用处。 |
udp | 使用udp作为nfs的传输协议(NFS V2只支持UDP) |
tcp | 使用tcp作为nfs的传输协议 |
namlen=n | 设定远程服务器所允许的最长文件名。这个值的默认是255 |
acregmin=n | 设定最小的在文件更新之前cache时间,默认是3 |
acregmax=n | 设定最大的在文件更新之前cache时间,默认是60 |
acdirmin=n | 设定最小的在目录更新之前cache时间,默认是30 |
acdirmax=n | 设定最大的在目录更新之前cache时间,默认是60 |
actimeo=n | 将acregmin、acregmax、acdirmin、acdirmax设定为同一个数值,默认是没有启用。 |
retry=n | 设定当网络传输出现故障的时候,尝试重新连接多少时间后不再尝试。默认的数值是10000 minutes |
noac | 关闭cache机制。 |
然后组成的nfs 自动挂载代码为下面的👇
192.168.3.100:/mnt/y1/ubuntushare /mnt/nfs nfs rw,auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
测试自动挂载是否成功
#> 卸载掉挂载的nfs目录
sudo umount /mnt/nfs
#重新挂载命令
sudo mount -a
测试是否可以读写
#打开路径
cd /mnt/nfs
#创建文件夹
mkdir test
#创建文件
touch test.txt
#查看当前目录下的文件
ls
#编辑文件
vim test.txt
#编辑文件 Insert键
#录入 测试两个字
#保存 ESC键退出 :wq 保存
#cat 显示文本内容
cat test.txt
读写没问题~
挂载CIFS共享存储
很多小伙伴发现Truenas里面没有CIFS这个共享的,其实就是SMB,
不过不等于SMB
百科解释:CIFS 是 SMB 协议的衍生品,即 CIFS 是 SMB 协议的一种特殊实现
这边目录和用户 都用NFS的
用户:sharesky
目录:/mnt/c1/ubuntushare
名称:ubuntushare
truenas开启CIFS共享(SMB)
设置
其他默认即可,有协议需求要设置,我这里没啥需求
记住这个名称,下面要用
ubuntu虚拟机 在mnt目录下 新建目录 cifs
mkdir /mnt/cifs
安装cifs工具
sudo apt-get install cifs-utils
挂载cifs
首先是挂载的语法
sudo mount -t cifs 挂载代码
//192.168.3.100/ubuntushare cifs共享的地址 //ip/名称
/mnt/cifs 挂载的本地路径
-o user= 账号,password=密码
这个挂载的目录上面只给了sharesky这一个用户及组的权限,root也要访问的话要把sharesky组附加进去
这个挂载只是测试用,重启会消失的哦,主要看自动挂载
sudo mount -t cifs //192.168.3.100/ubuntushare /mnt/cifs -o user=sharesky,password=password
开机自动挂载
这边有个问题,就是密码,明文不安全,放到fstab不安全,我查了一下别人翻译的资料,下面是解决办法
cifs参数 | 解释 |
---|---|
user=arg username=arg | 指定连接时使用的用户名。如果没有在这里指定,那么将使用环境变量 USER 的值。此选项还可以接受"user%pass"或"workgroup/user"或"workgroup/user%pass"的格式,以便在指定用户名的同时一起指定口令和工作组。 |
pass=arg password=arg | 指定连接时使用的口令。如果没有在这里指定,那么将使用环境变量 PASSWD 的值。如果没有在命令行参数中给出口令,mount.cifs 将会在挂载时提示用户输入口令。 需要注意的是,如果口令中含有逗号(,),那么将不能在命令行参数中指定,因为会发生解析错误。不过在环境变量 PASSWD 和 cred 文件(见下文)中可以安全的使用逗号,或者在提示输入口令时也可以安全的输入。 |
dom=arg domain=arg | 指定user所属的域(工作组)。 |
cred=filename credentials=filename | 指定一个包含用户名、密码、域(工作组)的文件,可以包含三者之一、之二,或全部包含。该文件的格式如下:username=value<换行>password=value<换行>domain=value.这样做比直接在诸如 /etc/fstab 这样的共享文件中以明文方式写出密码要安全的多。请确保该cred文件的安全。 |
guest | 不提示输入密码,而以来宾身份登录。 |
sec={none<竖杠>krd5<竖杠>…} | 选择安全模型:none :尝试以空用户连接(不提供用户名),krb5 :使用 Kerberos version 5 认证,krb5i :使用 Kerberos version 5 和包签名(packet signing)认证,ntlm: 使用 NTLM 口令散列认证(默认值) ,ntlmi :使用 NTLM 签名口令散列认证(如果 /proc/fs/cifs/PacketSigningEnabled 被开启或者服务器端要求必须签名时 这个将成为默认值),ntlmv2 :使用 NTLMv2 口令散列认证,ntlmv2i :使用 NTLMv2 签名口令散列认证 |
uid=arg | 如果被挂载的文件系统服务器没有提供文件和目录的UID信息,那么就使用这里的设置。arg 可以是字符串形式的用户名或着是数字形式的uid值。默认值是数字’0’。更多信息参见下面的“文件和目录的属主及权限”小节。 |
forceuid | 忽略服务器提供的文件和目录的UID信息,强制使用 uid= 选项设置的值。更多信息参见下面的“文件和目录的属主及权限”小节。 |
gid=arg | 如果被挂载的文件系统服务器没有提供文件和目录的GID信息,那么就使用这里的设置。arg 可以是字符串形式的组名或着是数字形式的gid值。默认值是数字’0’。更多信息参见下面的“文件和目录的属主及权限”小节。 |
forcegid | 忽略服务器提供的文件和目录的GID信息,强制使用 gid= 选项设置的值。更多信息参见下面的“文件和目录的属主及权限”小节。 |
file_mode=0nnn | 如果服务器端不支持 CIFS Unix扩展,那么就使用这里设置的值替代默认的文件权限模式。这里的 nnn 是八进制的权限模式,且前导零不能省略。 |
dir_mode=0nnn | 如果服务器端不支持 CIFS Unix扩展,那么就使用这里设置的值替代默认的目录权限模式。这里的 nnn 是八进制的权限模式,且前导零不能省略。 |
setuids | 如果服务器端支持 CIFS Unix扩展,那么客户端将会在新建的文件/目录/设备上为本地进程设置有效UID/GID(effective uid/gid)。如果服务器端不支持 CIFS Unix扩展,那么客户端对于新建的文件/目录/设备并不使用命令行上指定的默认UID/GID,而是将新建文件的UID/GID缓存在本地,这就意味着文件的UID/GID在重新加载inode或者重新挂载该文件系统之后可能会发生变化。 |
nosetuids | 不管服务器端是否支持 CIFS Unix扩展,客户端都不会在新建的文件/目录/设备(create, mkdir, mknod)上设置UID/GID。这将导致服务器端按照默认规则设置文件/目录/设备的UID/GID(通常是连接用户的UID/GID)。让服务器端(而不是客户端)设置UID/GID是默认行为。如果服务器端不支持 CIFS Unix扩展,那么新建文件/目录/设备的UID/GID将显示为连接用户的UID/GID或命令行上指定的UID/GID值。 |
perm | 客户端执行权限检查(用 vfs_permission 函数根据 mode 和相应的操作检查 uid/gid )。这个选项是默认开启的。注意,这是在服务器端根据连接的用户对客户端操作执行一般的 ACL 检查之外,客户端对自身操作进行的权限检查。 |
noperm | 客户端不对自身操作进行任何权限检查。这可能会导致被挂载的服务器端文件系统被本地系统上的其他用户访问。 这个选项仅在服务器端支持 CIFS Unix扩展,但是客户端和服务器端的UID/GID并不匹配, 并且无法通过执行挂载操作的用户身份进行访问控制时才需要。 注意,这个选项并不影响在服务器端根据连接的用户对客户端操作执行一般的 ACL 检查。 |
dynperm | 要求服务器端仅在内存中维护 UID/GID 和权限,而不将它们记录到实际的文件系统上。这些信息可能会随时丢失(比如从缓存中重新加载inode), 所以虽然这个选项可以让某些程序正常工作,但是其实际行为是不可预测的。更多信息参见下面的“文件和目录的属主及权限”小节。 |
noacl | 即使服务器端支持,也禁用 POSIX ACL 特性。CIFS 客户端可以获取和设置 Samba 服务器上的 POSIX ACL ,但是可以通过该选项强制关闭。 [提示]设置 POSIX ACL 要求客户端内核的 CIFS 模块同时支持 XATTR 和 POSIX 特性 |
sfu | 如果服务器端不支持 CIFS Unix扩展,那么就以兼容SFU(Services for Unix)的格式创建设备文件和管道(FIFO)文件。也就是通过 SETFILEBITS 属性额外检查文件权限的高 10-12 位(和 SFU 的做法一样)。而剩余的低 9 位依然可以用于描述权限(ACL)。 |
nounix | 强制关闭 CIFS Unix扩展。这相当于一次性关闭多个选项,包括:POSIX ACL, POSIX lock, POSIX path, 服务器端软连接(symlink), 服务器端的 uids/gids/mode 值。这个选项也可以用于对 CIFS Unix扩展支持有缺陷的服务器。更多信息请参见"INODE编号"小节。 |
nouser_xattr | 即使服务器端支持,也不允许 getfattr/setfattr 获取和设置 xattr 。这是默认值。 |
ip=arg | 指定目标服务器的IP地址。 如果 UNC 名称中已经包含了这个信息(包括从DNS中解析得到),就没必要在这里设置了,所以这个选项很少使用。 |
port=num | 设置将要连接的 CIFS 服务器端口。如果 CIFS 服务器并未在该端口监听或者未指定此选项,那么将首先尝试默认的 445 端口,如果没有应答就再尝试 139 端口。 |
servern=name netbiosname=name | 指定服务器的 netbios name (RFC1001 name)。只在连接 Windows 98/ME 服务器(139端口)时才需要这个参数。 |
iocharset=charset | 指定默认以什么字符集显示文件名,必须与系统的locale设置保持一致。例如在"en_US.UTF-8"的情况下应该使用"utf8"。如果没有指定该选项,将使用客户端内核中的 CONFIG_NLS_DEFAULT 值。如果服务器端支持Unicode字符,网络路径名将默认使用Unicode字符, 如果服务器端不支持Unicode字符,那么该选项就没有任何意义。 |
ro | 只读挂载 |
rw | 读写挂载 |
directio | 不对文件的 inode 数据做缓存。这样就不会对文件作内存映射(mmap)。在某些具有快速网络连接的情况下,客户端可以从此选项中受益,例如,需要进行超长序列读取的应用程序就不需要再次读取相同的数据,从而可以比对读写都进行缓冲的默认行为(预读取/后台延迟写入)提供更好的性能。该选项允许向服务器发送大于页面尺寸的写操作, 而且要求内核的 cifs.ko 模块在编译时开启了 CIFS_EXPERIMENTAL 选项。 |
mapchars | 将7个保留字符(:? |
nomapchars | 不对7个保留字符做任何重新映射。这是默认值。 |
intr | 当前尚未实现 |
nointr | 当前尚未实现(默认值) |
hard | 当服务器端失去响应后访问其上文件的应用程序将被挂起。 |
soft | (默认值)当服务器端失去响应后访问其上文件的应用程序将收到一个错误信号而不是被挂起。 |
nocase | 对路径名进行大小写无关的匹配(在服务器端支持的情况下,大小写敏感的匹配是默认值)。 |
nobrl | 不向服务器发送对 byte range lock 的请求。 对于某些不遵守 cifs 风格的 byte range lock 规范的应用程序来说,这个选项是必须的。另一方面,目前大多数 cifs 服务器也尚未实现 advisory byte range lock 。 |
serverino | 使用服务器提供的inode编号(连续的、文件唯一标识符),而不使用客户端自动生成的临时inode编号。虽然服务器的inode编号可以很轻易的分辨硬链接文件(它们的inode编号相同)并且保持稳定不变(这对某些程序很有必要),但是当同时挂载多个服务器端文件系统时,依然可能由于inode编号重叠而导致混乱。而且,也有少数服务器不支持提供inode编号。如果服务器不能提供inode编号,这个选项就没有任何实际效果。 |
noserverino | 使用客户端自动生成的临时inode编号,即使服务器提供了inode编号。这是默认值。更多信息参见"INODE编号"小节。 |
rsize=num | 默认网络读取尺寸(通常是 16K)。目前还不能使用比 CIFSMaxBufSize 大的值。 CIFSMaxBufSize 的默认值是 16K 并且可以在加载 cifs.ko 时,将其设置为从 8K 到最大允许的 kmalloc 尺寸之间的任意值。将 CIFSMaxBufSize 设为一个很大的值将会导致使用更多的内存,并且有可能在某些情况下降低性能。使用大于127K(原始cifs协议允许的最大值)的值还需要服务器端的额外支持(比如 Samba 3.0.26 或更高版本)。 num 的最小值是 2048 ,最大值是 130048(127K)与 CIFSMaxBufSize 中的较小者。 |
wsize=num | 默认网络写入尺寸(默认值是57344)。允许的最大值也是57344(14个4K页面)。 |
–verbose | 在挂载时输出额外的调试信息。注意,该选项必须在 -o 选项之前使用,也就是这样:mount -t cifs //server/share /mnt --verbose -o user=username |
创建账号密码文件
找到 credentials 这个参数,新建一个文件即可调用
#创建并编辑文件
sudo vim /root/.cifsaccount
#文件内容格式 (注意不要有空格,不能识别空格的)
username=sharesky
password=<password>
#將它改成只有root可读权限:
sudo chmod 400 /root/.cifsaccount
#查看文件权限:
sudo ls -al /root/.cifsaccount
# 卸载掉挂载的cifs目录
sudo umount /mnt/nfs
# 挂载测试
sudo mount -t cifs //192.168.3.100/ubuntushare /mnt/cifs -o credentials=/root/.cifsaccount
编辑fstab
下面是参数,可能不全与错误,网上搜的
fstab参数名 | 解释 |
---|---|
auto | 开机时自动挂载或使用mount –a命令时自动挂载 |
noauto | 取消开机自动挂载 |
exec | 允许执行此分区的二进制文件 |
noexec | 不允许执行此分区的二进制文件 |
ro/rw | 只读或读写挂载文件系统 |
user | 允许任意用户挂载,如果没有显示定义,隐含启用noexec、nosuid、nodev |
nouser | 只能被root挂载 |
users | 允许所有users组中的用户挂载 |
owner | 允许设备所有者挂载 |
sync | I/o同步 |
async | I/o异步 |
dev | 解析文件系统上的块特殊设备 |
nodev | 不解析文件系统上的块特殊设备 |
suid | 允许suid和sgid位,该参数通常用于特殊任务,使一般用户运行程序时临时获取权限 |
nosuid | 禁止suid操作和设定sgid位 |
noatime | 不更新文件系统上的inode访问记录,可提升性能 |
nodiratime | 不更新文件系统上的目录的inode访问记录,可提升性能 |
relatime | 实时更新inode访问记录 |
flush- | (vfat的选项)频繁刷新数据,复制对话框或进度条在全部数据写入之后才消失 |
Usrquota | 启动文件系统支持磁盘配额模式 |
Grpquota | 启动文件系统对群组磁盘配额模式的支持 |
defaults | 默认的挂载参数(例如ext4默认参数:rw,suid,dev,exec,auto,nouser,async) |
nofail | 外部设备在插入时挂载,在未插入时忽略。这需要 nofail 选项,可以在启动时若设备不存在直接忽略它而不报错. |
如果挂载的路径中有空格,可以使用 “\040” 转义字符来表示空格(以三位八进制数来进行表示)
sudo vim /etc/fstab
//192.168.3.100/ubuntushare /mnt/cifs cifs defaults,nofail,noatime,intr,credentials=/root/.cifsaccount 0 0
测试挂载
测试读写
重启后测试自动挂载