如何在只读环境中启动 tmux?

如何在只读环境中启动 tmux?

我尝试在只读环境中启动 tmux 会话,但收到错误:

pi@raspberry(ro):~/development$ tmux
error creating /tmp//tmux-1000 (Permission denied)

这个树莓派项目可能会意外断电,而 UPS 不是一个选择。为了避免 SD 卡损坏,按照中的说明将系统设置为只读帖子(下面摘录以供参考)。tmux随着该项目的开发继续,我仍然想出于各种原因使用它。

tmux在这种情况下我该如何继续利用?

鉴于rwro被别名为命令在读/写和只读之间切换,这是否需要更改这些别名中的某些内容?


只读过程总结

  1. 编辑/boot/cmdline.txt并添加fastboot noswap ro
  2. 替换日志记录sudo apt-get install -y busybox-syslogd && sudo apt-get remove -y --purge rsyslog
  3. 更新文件/etc/fstab并将,ro标志添加到所有块设备。
  4. 还要在文件末尾添加临时文件系统的条目:
tmpfs        /tmp            tmpfs   nosuid,nodev         0       0
tmpfs        /var/log        tmpfs   nosuid,nodev         0       0
tmpfs        /var/tmp        tmpfs   nosuid,nodev         0       0
  1. 移动文件
$ sudo rm -rf /var/lib/dhcp /var/lib/dhcpcd5 /var/spool /etc/resolv.conf
$ sudo ln -s /tmp /var/lib/dhcp
$ sudo ln -s /tmp /var/lib/dhcpcd5
$ sudo ln -s /tmp /var/spool
$ sudo touch /tmp/dhcpcd.resolv.conf
$ sudo ln -s /tmp/dhcpcd.resolv.conf /etc/resolv.conf
  1. 编辑/lib/systemd/system/systemd-random-seed.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStartPre=/bin/echo "" >/tmp/random-seed
ExecStart=/lib/systemd/systemd-random-seed load
ExecStop=/lib/systemd/systemd-random-seed save
TimeoutSec=30s
  1. 追加 `/etc/bash.bashrc/:
set_bash_prompt() {
    fs_mode=$(mount | sed -n -e "s/^\/dev\/.* on \/ .*(\(r[w|o]\).*/\1/p")
    PS1='\[\033[01;32m\]\u@\h${fs_mode:+($fs_mode)}\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
}
alias ro='sudo mount -o remount,ro / ; sudo mount -o remount,ro /boot'
alias rw='sudo mount -o remount,rw / ; sudo mount -o remount,rw /boot'
PROMPT_COMMAND=set_bash_prompt
  1. 追加/etc/bash.bash_logout
mount -o remount,ro /
mount -o remount,ro /boot


编辑添加:

尝试添加mode=01777/tmpin /etc/fstab/,但仍然出现相同的错误。

pi@raspberry(ro):~$ cat /etc/fstab 
proc            /proc           proc    defaults          0       0
PARTUUID=ea7e04d2-01  /boot           vfat    defaults,ro          0       2
PARTUUID=ea7e04d2-02  /               ext4    defaults,noatime,ro  0       1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that
tmpfs           /tmp          tmpfs   nosuid,nodev,mode=01777            0       0
tmpfs           /var/log      tmpfs   nosuid,nodev            0       0
tmpfs           /var/tmp      tmpfs   nosuid,nodev            0       0
pi@raspberry(ro):~$ tmux
error creating /tmp//tmux-1000 (Permission denied)

同样的事情也发生在rw模式中。


编辑添加#2:

故障排除:

pi@raspberry(ro):~$ tmux
error creating /tmp//tmux-1000 (Permission denied)
pi@raspberry(ro):~$ ls -ld /tmp/
drwxr-xr-x 8 root root 260 Oct  5 21:17 /tmp/
pi@raspberry(ro):~$ sudo chmod 01777 /tmp
sudo chmod 01777 /tmp
pi@raspberry(ro):~$ tmux    ###### IT WORKED!
[exited]
pi@raspberry(ro):~$ 

成功后sudo chmod


编辑添加#3:

tmp.mount文件确实包含01777模式。

pi@raspberry(ro):~$ cat /run/systemd/generator/tmp.mount 
# Automatically generated by systemd-fstab-generator

[Unit]
SourcePath=/etc/fstab
Documentation=man:fstab(5) man:systemd-fstab-generator(8)
Before=local-fs.target

[Mount]
Where=/tmp
What=tmpfs
Type=tmpfs
Options=nosuid,nodev,mode=01777

编辑添加#4:

/tmp不是符号链接,安装中似乎没有错误...

pi@raspberry(ro):~$ ls -ld /tmp
drwxr-xr-x 8 root root 260 Oct  5 01:44 /tmp
pi@raspberry(ro):~$ sudo systemctl status tmp.mount
* tmp.mount - /tmp
   Loaded: loaded (/etc/fstab; generated)
   Active: active (mounted) since Sun 2020-10-04 21:59:28 EDT; 1min 46s ago
    Where: /tmp
     What: tmpfs
     Docs: man:fstab(5)
           man:systemd-fstab-generator(8)
   CGroup: /system.slice/tmp.mount

Oct 04 21:59:27 raspberry systemd[1]: Mounting /tmp...
Oct 04 21:59:28 raspberry systemd[1]: Mounted /tmp.
pi@raspberry(ro):~$ logread |grep tmp
Oct  4 22:01:14 raspberry authpriv.notice sudo:       pi : TTY=pts/0 ; PWD=/home/pi ; USER=root ; COMMAND=/bin/systemctl status tmp.mount

答案1

tmpfs中的条目没有/etc/fstab指定该目录的任何特定模式/tmp,因此它是用 来创建的0700。将条目更改为

tmpfs     /tmp        tmpfs   nosuid,nodev,mode=01777

允许所有用户在/tmp.

相关内容