我尝试在只读环境中启动 tmux 会话,但收到错误:
pi@raspberry(ro):~/development$ tmux
error creating /tmp//tmux-1000 (Permission denied)
这个树莓派项目可能会意外断电,而 UPS 不是一个选择。为了避免 SD 卡损坏,按照中的说明将系统设置为只读这帖子(下面摘录以供参考)。tmux
随着该项目的开发继续,我仍然想出于各种原因使用它。
tmux
在这种情况下我该如何继续利用?
鉴于rw
和ro
被别名为命令在读/写和只读之间切换,这是否需要更改这些别名中的某些内容?
只读过程总结
- 编辑
/boot/cmdline.txt
并添加fastboot noswap ro
- 替换日志记录
sudo apt-get install -y busybox-syslogd && sudo apt-get remove -y --purge rsyslog
- 更新文件
/etc/fstab
并将,ro
标志添加到所有块设备。 - 还要在文件末尾添加临时文件系统的条目:
tmpfs /tmp tmpfs nosuid,nodev 0 0
tmpfs /var/log tmpfs nosuid,nodev 0 0
tmpfs /var/tmp tmpfs nosuid,nodev 0 0
- 移动文件
$ 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
- 编辑
/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
- 追加 `/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
- 追加
/etc/bash.bash_logout
:
mount -o remount,ro /
mount -o remount,ro /boot
编辑添加:
尝试添加mode=01777
到/tmp
in /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
.