Вопрос или проблема
Я использую Arch Linux, и каждый раз, когда я загружаю свой ноутбук в качестве пользователя, права доступа к папкам на жестком диске устанавливаются только для root, поэтому я не могу открыть их как пользователь. Я использовал следующую команду, чтобы изменить права доступа
sudo chmod -R 775 /mnt
где /mnt — это папка, содержащая мой жесткий диск. Когда я перезагружаю свой ноутбук, все сбрасывается, и мне снова нужно использовать ту же команду, чтобы получить доступ к жесткому диску. Как сохранить права доступа?
Вывод /etc/fstab
# Статическая информация о файловых системах.
# См. fstab(5) для подробностей.
# <файловая система> <каталог> <тип> <опции> <дамп> <передача>
# /dev/sda6
UUID=e0888535-4d8b-4b89-9a7e-4a85208fe129 / ext4 rw,relatime 0 1
Мой жесткий диск — это диск Windows, я запускаю двойную загрузку с Windows 10.
Вывод df:
Файловая система 1K-блоков Использовано Доступно Использ. % Смонтировано на
dev 2973860 0 2973860 0% /dev
run 2982588 716 2981872 1% /run
/dev/sda6 30313412 4987780 23762752 18% /
tmpfs 2982588 101116 2881472 4% /dev/shm
tmpfs 2982588 0 2982588 0% /sys/fs/cgroup
tmpfs 2982588 220 2982368 1% /tmp
tmpfs 596516 24 596492 1% /run/user/1001
/dev/sda4 354528216 350712252 3815964 99% /mnt
Вывод mount:
proc на /proc тип proc (rw,nosuid,nodev,noexec,relatime)
sys на /sys тип sysfs (rw,nosuid,nodev,noexec,relatime)
dev на /dev тип devtmpfs (rw,nosuid,relatime,size=2973860k,nr_inodes=743465,mode=755)
run на /run тип tmpfs (rw,nosuid,nodev,relatime,mode=755)
/dev/sda6 на / тип ext4 (rw,relatime)
securityfs на /sys/kernel/security тип securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs на /dev/shm тип tmpfs (rw,nosuid,nodev)
devpts на /dev/pts тип devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs на /sys/fs/cgroup тип tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup2 на /sys/fs/cgroup/unified тип cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate)
cgroup на /sys/fs/cgroup/systemd тип cgroup (rw,nosuid,nodev,noexec,relatime,xattr,name=systemd)
pstore на /sys/fs/pstore тип pstore (rw,nosuid,nodev,noexec,relatime)
bpf на /sys/fs/bpf тип bpf (rw,nosuid,nodev,noexec,relatime,mode=700)
cgroup на /sys/fs/cgroup/perf_event тип cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup на /sys/fs/cgroup/net_cls,net_prio тип cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup на /sys/fs/cgroup/rdma тип cgroup (rw,nosuid,nodev,noexec,relatime,rdma)
cgroup на /sys/fs/cgroup/cpu,cpuacct тип cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup на /sys/fs/cgroup/devices тип cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup на /sys/fs/cgroup/pids тип cgroup (rw,nosuid,nodev,noexec,relatime,pids)
cgroup на /sys/fs/cgroup/blkio тип cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup на /sys/fs/cgroup/freezer тип cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup на /sys/fs/cgroup/memory тип cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup на /sys/fs/cgroup/cpuset тип cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup на /sys/fs/cgroup/hugetlb тип cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
tmpfs на /tmp тип tmpfs (rw,nosuid,nodev)
debugfs на /sys/kernel/debug тип debugfs (rw,nosuid,nodev,noexec,relatime)
systemd-1 на /proc/sys/fs/binfmt_misc тип autofs (rw,relatime,fd=29,pgrp=1,timeout=0,minproto=5,maxproto=5,direct,pipe_ino=13513)
mqueue на /dev/mqueue тип mqueue (rw,nosuid,nodev,noexec,relatime)
hugetlbfs на /dev/hugepages тип hugetlbfs (rw,relatime,pagesize=2M)
configfs на /sys/kernel/config тип configfs (rw,nosuid,nodev,noexec,relatime)
tmpfs на /run/user/1001 тип tmpfs (rw,nosuid,nodev,relatime,size=596516k,mode=700,uid=1001,gid=1001)
/dev/sda4 на /mnt тип ntfs (rw,relatime,uid=0,gid=0,fmask=0177,dmask=077,nls=utf8,errors=continue,mft_zone_multiplier=1)
Попробуйте автоматизировать команду chmod при загрузке, добавив ее в /etc/rc.local
ИЛИ:
Попробуйте создать файл SYSTEMD UNIT в каталоге /etc/systemd/system/. Назовите его addpermission.service, например.
Добавьте этот скрипт в него:
[Unit]
Description=Добавление прав доступа для пользователей
[Service]
ExecStart=/usr/bin/bash -c 'sudo chmod -R 775 /mnt'
[Install]
WantedBy=multi-user.target
После этого активируйте его, запустив скрипт ниже:
systemctl enable addpermission.service
Чтобы проверить, работает ли это, вы можете удалить права доступа на каталог /mnt, если вы их добавили, попытаться запустить файл юнита и проверить его статус:
systemctl start addpermission.service
systemctl status addpermission.service
если статус OK. Попробуйте затем проверить права доступа на каталоге /mnt. если они изменились, то попробуйте перезагрузить и снова проверить, если нет, проверьте ошибку и попробуйте отредактировать команду в ExecStart, чтобы исправить ее. С моей стороны, это сработало.
Я недавно видел эту проблему на нескольких серверах, наконец я исправил ее, удалив ACL.
Поэтому я настоятельно рекомендую вам проверить, есть ли у этого каталога существующая настройка ACL.
Вы можете узнать с помощью getfacl, если вы увидите какие-либо права доступа ACL, то удалите их, это исправит эту проблему навсегда.
Ответ или решение
Проблема, с которой вы сталкиваетесь, заключается в том, что папки на вашем жестком диске сбрасывают права доступа при каждой перезагрузке системы Arch Linux. Это связано с тем, что ваш жесткий диск отформатирован в файловой системе NTFS, используемой в Windows, и ваше текущее монтирование этой файловой системы не устанавливает права доступа, необходимые для пользователя.
Для решения этой проблемы необходимо внести изменения в файл конфигурации /etc/fstab
, чтобы задать правильные параметры монтирования диска. Давайте рассмотрим шаги, которые вам нужно выполнить:
1. Изменение параметров монтирования в /etc/fstab
Открыть файл для редактирования:
sudo nano /etc/fstab
Найдите строку, соответствующую вашему NTFS-разделу (в вашем случае это /dev/sda4
), и измените её, добавив дополнительные параметры uid
, gid
, fmask
, и dmask
. Эти параметры будут определять пользователя и группу, которым будут принадлежать файлы, а также права доступа к файлам.
Пример изменения строки:
/dev/sda4 /mnt ntfs-3g uid=1000,gid=1000,fmask=0022,dmask=0000,nls=utf8,errors=continue,mft_zone_multiplier=1 0 0
Здесь:
uid=1000
иgid=1000
устанавливают владельцем и группу для файлов пользователя с ID 1000 (обычно это ваш пользователь в Arch Linux).fmask=0022
задает права доступа для файлов (в данном случае, rw-r–r–).dmask=0000
задает права доступа для каталогов (в данном случае, rwxrwxrwx).
2. Применение изменений
После внесенных изменений сохраните файл и выполните следующие команды, чтобы заново смонтировать диски:
sudo umount /mnt
sudo mount -a
Проверьте, изменились ли права доступа на нужный каталог:
ls -ld /mnt
3. Удаление ACL (опционально)
Если проблема все еще сохраняется, возможно, в вашей системе установлены ACL (Access Control Lists), которые могут переопределять стандартные права. Для их проверки выполните команду:
getfacl /mnt
Если у каталога есть ACL, вы можете удалить их следующим образом:
sudo setfacl -b /mnt
4. Создание системной службы (альтернативный способ)
Если вы все-таки хотите автоматически устанавливать права доступа при каждой перезагрузке, вы можете создать системное юнит-файл для этой цели.
Создайте файл в директории /etc/systemd/system/
, например addpermission.service
:
sudo nano /etc/systemd/system/addpermission.service
Добавьте в него следующее содержимое:
[Unit]
Description=Setup Permissions on /mnt
[Service]
Type=oneshot
ExecStart=/bin/bash -c 'chmod -R 775 /mnt'
[Install]
WantedBy=multi-user.target
Активируйте службу:
sudo systemctl enable addpermission.service
После этого можно протестировать службу:
sudo systemctl start addpermission.service
sudo systemctl status addpermission.service
И убедитесь, что права доступа на каталоге изменились.
Заключение
Следуя этим шагам, вы сможете настроить систему так, чтобы права доступа на ваш NTFS-раздел сохранялись после каждого перезапуска. Проверяйте изменения и служите пользователям качественной поддержкой, используя возможности Linux для эффективного управления правами доступа.